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 04/80] 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 05/80] 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 06/80] 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 07/80] 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 08/80] 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 09/80] 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 10/80] 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 11/80] 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 12/80] 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 13/80] 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 14/80] 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 15/80] 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 16/80] 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 17/80] 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 18/80] 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 19/80] 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 20/80] 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 21/80] 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 22/80] 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 23/80] 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 24/80] 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 25/80] 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 26/80] 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 27/80] 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 28/80] 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 29/80] 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 30/80] 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 31/80] 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 32/80] 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 33/80] 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 34/80] 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 35/80] 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 36/80] 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 37/80] 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 38/80] 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 39/80] 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 40/80] 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 41/80] 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 42/80] 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 43/80] 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 54e957cefe1daebf219c65154b5ca95ce74a4052 Mon Sep 17 00:00:00 2001
From: nf-core-bot
Date: Wed, 8 May 2024 14:00:59 +0000
Subject: [PATCH 44/80] Template update for nf-core/tools version 2.14.0
---
.editorconfig | 6 +-
.github/PULL_REQUEST_TEMPLATE.md | 2 +-
.github/workflows/awsfulltest.yml | 10 +-
.github/workflows/awstest.yml | 12 +-
.github/workflows/ci.yml | 4 +-
.github/workflows/download_pipeline.yml | 22 ++-
.github/workflows/fix-linting.yml | 6 +-
.github/workflows/linting.yml | 18 +-
.github/workflows/linting_comment.yml | 2 +-
.github/workflows/release-announcements.yml | 6 +-
.nf-core.yml | 1 +
.pre-commit-config.yaml | 3 +
CHANGELOG.md | 2 +-
README.md | 2 +-
conf/base.config | 3 -
conf/modules.config | 8 -
conf/test.config | 2 +-
conf/test_full.config | 2 +-
docs/usage.md | 2 +
modules.json | 4 +-
modules/nf-core/fastqc/main.nf | 6 +
nextflow.config | 178 +++++++++---------
nextflow_schema.json | 7 +
pyproject.toml | 15 --
.../utils_nfcore_raredisease_pipeline/main.nf | 16 +-
.../nf-core/utils_nfcore_pipeline/main.nf | 8 +-
workflows/raredisease.nf | 46 +++--
27 files changed, 222 insertions(+), 171 deletions(-)
delete mode 100644 pyproject.toml
diff --git a/.editorconfig b/.editorconfig
index dd9ffa53..72dda289 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -28,10 +28,6 @@ indent_style = unset
[/assets/email*]
indent_size = unset
-# ignore Readme
-[README.md]
-indent_style = unset
-
-# ignore python
+# ignore python and markdown
[*.{py,md}]
indent_style = unset
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 23097c52..fc4dc8ad 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 (`nf-test test main.nf.test -profile test,docker`).
+- [ ] Ensure the test suite passes (`nextflow run . -profile test,docker --outdir `).
- [ ] Check for unexpected warnings in debug mode (`nextflow run . -profile debug,test,docker --outdir `).
- [ ] Usage Documentation in `docs/usage.md` is updated.
- [ ] Output Documentation in `docs/output.md` is updated.
diff --git a/.github/workflows/awsfulltest.yml b/.github/workflows/awsfulltest.yml
index 2919151f..6026e464 100644
--- a/.github/workflows/awsfulltest.yml
+++ b/.github/workflows/awsfulltest.yml
@@ -8,12 +8,12 @@ on:
types: [published]
workflow_dispatch:
jobs:
- run-tower:
+ run-platform:
name: Run AWS full tests
if: github.repository == 'nf-core/raredisease'
runs-on: ubuntu-latest
steps:
- - name: Launch workflow via tower
+ - name: Launch workflow via Seqera Platform
uses: seqeralabs/action-tower-launch@v2
# TODO nf-core: You can customise AWS full pipeline tests as required
# Add full size test data (but still relatively small datasets for few samples)
@@ -33,7 +33,7 @@ jobs:
- uses: actions/upload-artifact@v4
with:
- name: Tower debug log file
+ name: Seqera Platform debug log file
path: |
- tower_action_*.log
- tower_action_*.json
+ seqera_platform_action_*.log
+ seqera_platform_action_*.json
diff --git a/.github/workflows/awstest.yml b/.github/workflows/awstest.yml
index 4ed98bab..7a710d67 100644
--- a/.github/workflows/awstest.yml
+++ b/.github/workflows/awstest.yml
@@ -5,13 +5,13 @@ name: nf-core AWS test
on:
workflow_dispatch:
jobs:
- run-tower:
+ run-platform:
name: Run AWS tests
if: github.repository == 'nf-core/raredisease'
runs-on: ubuntu-latest
steps:
- # Launch workflow using Tower CLI tool action
- - name: Launch workflow via tower
+ # Launch workflow using Seqera Platform CLI tool action
+ - name: Launch workflow via Seqera Platform
uses: seqeralabs/action-tower-launch@v2
with:
workspace_id: ${{ secrets.TOWER_WORKSPACE_ID }}
@@ -27,7 +27,7 @@ jobs:
- uses: actions/upload-artifact@v4
with:
- name: Tower debug log file
+ name: Seqera Platform debug log file
path: |
- tower_action_*.log
- tower_action_*.json
+ seqera_platform_action_*.log
+ seqera_platform_action_*.json
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index e56bcd29..46a43e64 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -28,10 +28,10 @@ jobs:
- "latest-everything"
steps:
- name: Check out pipeline code
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
+ uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4
- name: Install Nextflow
- uses: nf-core/setup-nextflow@v1
+ uses: nf-core/setup-nextflow@v2
with:
version: "${{ matrix.NXF_VER }}"
diff --git a/.github/workflows/download_pipeline.yml b/.github/workflows/download_pipeline.yml
index 08622fd5..2d20d644 100644
--- a/.github/workflows/download_pipeline.yml
+++ b/.github/workflows/download_pipeline.yml
@@ -14,6 +14,8 @@ on:
pull_request:
types:
- opened
+ - edited
+ - synchronize
branches:
- master
pull_request_target:
@@ -28,11 +30,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Install Nextflow
- uses: nf-core/setup-nextflow@v1
+ uses: nf-core/setup-nextflow@v2
- - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5
+ - name: Disk space cleanup
+ uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be # v1.3.1
+
+ - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
with:
- python-version: "3.11"
+ python-version: "3.12"
architecture: "x64"
- uses: eWaterCycle/setup-singularity@931d4e31109e875b13309ae1d07c70ca8fbc8537 # v7
with:
@@ -65,8 +70,17 @@ jobs:
- name: Inspect download
run: tree ./${{ env.REPOTITLE_LOWERCASE }}
- - name: Run the downloaded pipeline
+ - name: Run the downloaded pipeline (stub)
+ id: stub_run_pipeline
+ continue-on-error: true
env:
NXF_SINGULARITY_CACHEDIR: ./
NXF_SINGULARITY_HOME_MOUNT: true
run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -stub -profile test,singularity --outdir ./results
+ - name: Run the downloaded pipeline (stub run not supported)
+ id: run_pipeline
+ if: ${{ job.steps.stub_run_pipeline.status == failure() }}
+ env:
+ NXF_SINGULARITY_CACHEDIR: ./
+ NXF_SINGULARITY_HOME_MOUNT: true
+ run: nextflow run ./${{ env.REPOTITLE_LOWERCASE }}/$( sed 's/\W/_/g' <<< ${{ env.REPO_BRANCH }}) -profile test,singularity --outdir ./results
diff --git a/.github/workflows/fix-linting.yml b/.github/workflows/fix-linting.yml
index 114b102d..4dbed09c 100644
--- a/.github/workflows/fix-linting.yml
+++ b/.github/workflows/fix-linting.yml
@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
# Use the @nf-core-bot token to check out so we can push later
- - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
+ - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4
with:
token: ${{ secrets.nf_core_bot_auth_token }}
@@ -32,9 +32,9 @@ jobs:
GITHUB_TOKEN: ${{ secrets.nf_core_bot_auth_token }}
# Install and run pre-commit
- - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5
+ - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
with:
- python-version: 3.11
+ python-version: "3.12"
- name: Install pre-commit
run: pip install pre-commit
diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml
index 073e1876..a3fb2541 100644
--- a/.github/workflows/linting.yml
+++ b/.github/workflows/linting.yml
@@ -14,12 +14,12 @@ jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
+ - uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4
- - name: Set up Python 3.11
- uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5
+ - name: Set up Python 3.12
+ uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
with:
- python-version: 3.11
+ python-version: "3.12"
cache: "pip"
- name: Install pre-commit
@@ -32,14 +32,14 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out pipeline code
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
+ uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4
- name: Install Nextflow
- uses: nf-core/setup-nextflow@v1
+ uses: nf-core/setup-nextflow@v2
- - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5
+ - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
with:
- python-version: "3.11"
+ python-version: "3.12"
architecture: "x64"
- name: Install dependencies
@@ -60,7 +60,7 @@ jobs:
- name: Upload linting log file artifact
if: ${{ always() }}
- uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4
+ uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4
with:
name: linting-logs
path: |
diff --git a/.github/workflows/linting_comment.yml b/.github/workflows/linting_comment.yml
index b706875f..40acc23f 100644
--- a/.github/workflows/linting_comment.yml
+++ b/.github/workflows/linting_comment.yml
@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Download lint results
- uses: dawidd6/action-download-artifact@f6b0bace624032e30a85a8fd9c1a7f8f611f5737 # v3
+ uses: dawidd6/action-download-artifact@09f2f74827fd3a8607589e5ad7f9398816f540fe # v3
with:
workflow: linting.yml
workflow_conclusion: completed
diff --git a/.github/workflows/release-announcements.yml b/.github/workflows/release-announcements.yml
index d468aeaa..03ecfcf7 100644
--- a/.github/workflows/release-announcements.yml
+++ b/.github/workflows/release-announcements.yml
@@ -12,7 +12,7 @@ jobs:
- name: get topics and convert to hashtags
id: get_topics
run: |
- curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ' >> $GITHUB_OUTPUT
+ echo "topics=$(curl -s https://nf-co.re/pipelines.json | jq -r '.remote_workflows[] | select(.full_name == "${{ github.repository }}") | .topics[]' | awk '{print "#"$0}' | tr '\n' ' ')" >> $GITHUB_OUTPUT
- uses: rzr/fediverse-action@master
with:
@@ -25,13 +25,13 @@ jobs:
Please see the changelog: ${{ github.event.release.html_url }}
- ${{ steps.get_topics.outputs.GITHUB_OUTPUT }} #nfcore #openscience #nextflow #bioinformatics
+ ${{ steps.get_topics.outputs.topics }} #nfcore #openscience #nextflow #bioinformatics
send-tweet:
runs-on: ubuntu-latest
steps:
- - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5
+ - uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
with:
python-version: "3.10"
- name: Install dependencies
diff --git a/.nf-core.yml b/.nf-core.yml
index 3805dc81..d6daa403 100644
--- a/.nf-core.yml
+++ b/.nf-core.yml
@@ -1 +1,2 @@
repository_type: pipeline
+nf_core_version: "2.14.0"
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index af57081f..4dc0f1dc 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -3,6 +3,9 @@ repos:
rev: "v3.1.0"
hooks:
- id: prettier
+ additional_dependencies:
+ - prettier@3.2.5
+
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
rev: "2.7.3"
hooks:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a1aaaaa1..ec64267b 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.0dev - [date]
+## v2.1.0dev - [date]
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 bf3b4c0c..63a3c99b 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@
[![run with conda](http://img.shields.io/badge/run%20with-conda-3EB049?labelColor=000000&logo=anaconda)](https://docs.conda.io/en/latest/)
[![run with docker](https://img.shields.io/badge/run%20with-docker-0db7ed?labelColor=000000&logo=docker)](https://www.docker.com/)
[![run with singularity](https://img.shields.io/badge/run%20with-singularity-1d355c.svg?labelColor=000000)](https://sylabs.io/docs/)
-[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://tower.nf/launch?pipeline=https://github.com/nf-core/raredisease)
+[![Launch on Seqera Platform](https://img.shields.io/badge/Launch%20%F0%9F%9A%80-Seqera%20Platform-%234256e7)](https://cloud.seqera.io/launch?pipeline=https://github.com/nf-core/raredisease)
[![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)
diff --git a/conf/base.config b/conf/base.config
index 9a86068f..806d4b89 100644
--- a/conf/base.config
+++ b/conf/base.config
@@ -59,7 +59,4 @@ process {
errorStrategy = 'retry'
maxRetries = 2
}
- withName:CUSTOM_DUMPSOFTWAREVERSIONS {
- cache = false
- }
}
diff --git a/conf/modules.config b/conf/modules.config
index e3ea8fa6..d203d2b6 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -22,14 +22,6 @@ process {
ext.args = '--quiet'
}
- withName: CUSTOM_DUMPSOFTWAREVERSIONS {
- publishDir = [
- path: { "${params.outdir}/pipeline_info" },
- mode: params.publish_dir_mode,
- pattern: '*_versions.yml'
- ]
- }
-
withName: 'MULTIQC' {
ext.args = { params.multiqc_title ? "--title \"$params.multiqc_title\"" : '' }
publishDir = [
diff --git a/conf/test.config b/conf/test.config
index 49fc7560..6bf4a9c9 100644
--- a/conf/test.config
+++ b/conf/test.config
@@ -22,7 +22,7 @@ params {
// Input data
// TODO nf-core: Specify the paths to your test data on nf-core/test-datasets
// TODO nf-core: Give any required params for the test so that command line flags are not needed
- input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv'
+ input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_test_illumina_amplicon.csv'
// Genome references
genome = 'R64-1-1'
diff --git a/conf/test_full.config b/conf/test_full.config
index a33b4721..9dd10b7f 100644
--- a/conf/test_full.config
+++ b/conf/test_full.config
@@ -17,7 +17,7 @@ params {
// Input data for full size test
// TODO nf-core: Specify the paths to your full test data ( on nf-core/test-datasets or directly in repositories, e.g. SRA)
// TODO nf-core: Give any required params for the test so that command line flags are not needed
- input = 'https://raw.githubusercontent.com/nf-core/test-datasets/viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv'
+ input = params.pipelines_testdata_base_path + 'viralrecon/samplesheet/samplesheet_full_illumina_amplicon.csv'
// Genome references
genome = 'R64-1-1'
diff --git a/docs/usage.md b/docs/usage.md
index e710e34e..e3c24bc4 100644
--- a/docs/usage.md
+++ b/docs/usage.md
@@ -156,6 +156,8 @@ If `-profile` is not specified, the pipeline will run locally and expect all sof
- A generic configuration profile to be used with [Charliecloud](https://hpc.github.io/charliecloud/)
- `apptainer`
- A generic configuration profile to be used with [Apptainer](https://apptainer.org/)
+- `wave`
+ - A generic configuration profile to enable [Wave](https://seqera.io/wave/) containers. Use together with one of the above (requires Nextflow ` 24.03.0-edge` or later).
- `conda`
- A generic configuration profile to be used with [Conda](https://conda.io/docs/). Please only use Conda as a last resort i.e. when it's not possible to run the pipeline with Docker, Singularity, Podman, Shifter, Charliecloud, or Apptainer.
diff --git a/modules.json b/modules.json
index b773a78a..886ce742 100644
--- a/modules.json
+++ b/modules.json
@@ -7,7 +7,7 @@
"nf-core": {
"fastqc": {
"branch": "master",
- "git_sha": "f4ae1d942bd50c5c0b9bd2de1393ce38315ba57c",
+ "git_sha": "285a50500f9e02578d90b3ce6382ea3c30216acd",
"installed_by": ["modules"]
},
"multiqc": {
@@ -26,7 +26,7 @@
},
"utils_nfcore_pipeline": {
"branch": "master",
- "git_sha": "5caf7640a9ef1d18d765d55339be751bb0969dfa",
+ "git_sha": "92de218a329bfc9a9033116eb5f65fd270e72ba3",
"installed_by": ["subworkflows"]
},
"utils_nfvalidation_plugin": {
diff --git a/modules/nf-core/fastqc/main.nf b/modules/nf-core/fastqc/main.nf
index 9e19a74c..d79f1c86 100644
--- a/modules/nf-core/fastqc/main.nf
+++ b/modules/nf-core/fastqc/main.nf
@@ -25,6 +25,11 @@ process FASTQC {
def old_new_pairs = reads instanceof Path || reads.size() == 1 ? [[ reads, "${prefix}.${reads.extension}" ]] : reads.withIndex().collect { entry, index -> [ entry, "${prefix}_${index + 1}.${entry.extension}" ] }
def rename_to = old_new_pairs*.join(' ').join(' ')
def renamed_files = old_new_pairs.collect{ old_name, new_name -> new_name }.join(' ')
+
+ def memory_in_mb = MemoryUnit.of("${task.memory}").toUnit('MB')
+ // FastQC memory value allowed range (100 - 10000)
+ def fastqc_memory = memory_in_mb > 10000 ? 10000 : (memory_in_mb < 100 ? 100 : memory_in_mb)
+
"""
printf "%s %s\\n" $rename_to | while read old_name new_name; do
[ -f "\${new_name}" ] || ln -s \$old_name \$new_name
@@ -33,6 +38,7 @@ process FASTQC {
fastqc \\
$args \\
--threads $task.cpus \\
+ --memory $fastqc_memory \\
$renamed_files
cat <<-END_VERSIONS > versions.yml
diff --git a/nextflow.config b/nextflow.config
index 5469bb1b..15f5b2f3 100644
--- a/nextflow.config
+++ b/nextflow.config
@@ -16,7 +16,8 @@ params {
genome = null
igenomes_base = 's3://ngi-igenomes/igenomes/'
igenomes_ignore = false
- fasta = null// MultiQC options
+
+ // MultiQC options
multiqc_config = null
multiqc_title = null
multiqc_logo = null
@@ -24,15 +25,16 @@ params {
multiqc_methods_description = null
// Boilerplate options
- outdir = null
- publish_dir_mode = 'copy'
- email = null
- email_on_fail = null
- plaintext_email = false
- monochrome_logs = false
- hook_url = null
- help = false
- version = false
+ outdir = null
+ publish_dir_mode = 'copy'
+ email = null
+ email_on_fail = null
+ plaintext_email = false
+ monochrome_logs = false
+ hook_url = null
+ help = false
+ version = false
+ pipelines_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/'
// Config options
config_profile_name = null
@@ -68,103 +70,109 @@ try {
}
// Load nf-core/raredisease custom profiles from different institutions.
-// Warning: Uncomment only if a pipeline-specific institutional config already exists on nf-core/configs!
-// try {
-// includeConfig "${params.custom_config_base}/pipeline/raredisease.config"
-// } catch (Exception e) {
-// System.err.println("WARNING: Could not load nf-core/config/raredisease profiles: ${params.custom_config_base}/pipeline/raredisease.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")
+}
profiles {
debug {
- dumpHashes = true
- process.beforeScript = 'echo $HOSTNAME'
- cleanup = false
+ dumpHashes = true
+ process.beforeScript = 'echo $HOSTNAME'
+ cleanup = false
nextflow.enable.configProcessNamesValidation = true
}
conda {
- conda.enabled = true
- docker.enabled = false
- singularity.enabled = false
- podman.enabled = false
- shifter.enabled = false
- charliecloud.enabled = false
- channels = ['conda-forge', 'bioconda', 'defaults']
- apptainer.enabled = false
+ conda.enabled = true
+ docker.enabled = false
+ singularity.enabled = false
+ podman.enabled = false
+ shifter.enabled = false
+ charliecloud.enabled = false
+ conda.channels = ['conda-forge', 'bioconda', 'defaults']
+ apptainer.enabled = false
}
mamba {
- conda.enabled = true
- conda.useMamba = true
- docker.enabled = false
- singularity.enabled = false
- podman.enabled = false
- shifter.enabled = false
- charliecloud.enabled = false
- apptainer.enabled = false
+ conda.enabled = true
+ conda.useMamba = true
+ docker.enabled = false
+ singularity.enabled = false
+ podman.enabled = false
+ shifter.enabled = false
+ charliecloud.enabled = false
+ apptainer.enabled = false
}
docker {
- docker.enabled = true
- conda.enabled = false
- singularity.enabled = false
- podman.enabled = false
- shifter.enabled = false
- charliecloud.enabled = false
- apptainer.enabled = false
- docker.runOptions = '-u $(id -u):$(id -g)'
+ docker.enabled = true
+ conda.enabled = false
+ singularity.enabled = false
+ podman.enabled = false
+ shifter.enabled = false
+ charliecloud.enabled = false
+ apptainer.enabled = false
+ docker.runOptions = '-u $(id -u):$(id -g)'
}
arm {
- docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64'
+ docker.runOptions = '-u $(id -u):$(id -g) --platform=linux/amd64'
}
singularity {
- singularity.enabled = true
- singularity.autoMounts = true
- conda.enabled = false
- docker.enabled = false
- podman.enabled = false
- shifter.enabled = false
- charliecloud.enabled = false
- apptainer.enabled = false
+ singularity.enabled = true
+ singularity.autoMounts = true
+ conda.enabled = false
+ docker.enabled = false
+ podman.enabled = false
+ shifter.enabled = false
+ charliecloud.enabled = false
+ apptainer.enabled = false
}
podman {
- podman.enabled = true
- conda.enabled = false
- docker.enabled = false
- singularity.enabled = false
- shifter.enabled = false
- charliecloud.enabled = false
- apptainer.enabled = false
+ podman.enabled = true
+ conda.enabled = false
+ docker.enabled = false
+ singularity.enabled = false
+ shifter.enabled = false
+ charliecloud.enabled = false
+ apptainer.enabled = false
}
shifter {
- shifter.enabled = true
- conda.enabled = false
- docker.enabled = false
- singularity.enabled = false
- podman.enabled = false
- charliecloud.enabled = false
- apptainer.enabled = false
+ shifter.enabled = true
+ conda.enabled = false
+ docker.enabled = false
+ singularity.enabled = false
+ podman.enabled = false
+ charliecloud.enabled = false
+ apptainer.enabled = false
}
charliecloud {
- charliecloud.enabled = true
- conda.enabled = false
- docker.enabled = false
- singularity.enabled = false
- podman.enabled = false
- shifter.enabled = false
- apptainer.enabled = false
+ charliecloud.enabled = true
+ conda.enabled = false
+ docker.enabled = false
+ singularity.enabled = false
+ podman.enabled = false
+ shifter.enabled = false
+ apptainer.enabled = false
}
apptainer {
- apptainer.enabled = true
- apptainer.autoMounts = true
- conda.enabled = false
- docker.enabled = false
- singularity.enabled = false
- podman.enabled = false
- shifter.enabled = false
- charliecloud.enabled = false
+ apptainer.enabled = true
+ apptainer.autoMounts = true
+ conda.enabled = false
+ docker.enabled = false
+ singularity.enabled = false
+ podman.enabled = false
+ shifter.enabled = false
+ charliecloud.enabled = false
+ }
+ wave {
+ apptainer.ociAutoPull = true
+ singularity.ociAutoPull = true
+ wave.enabled = true
+ wave.freeze = true
+ wave.strategy = 'conda,container'
}
gitpod {
- executor.name = 'local'
- executor.cpus = 4
- executor.memory = 8.GB
+ executor.name = 'local'
+ executor.cpus = 4
+ executor.memory = 8.GB
}
test { includeConfig 'conf/test.config' }
test_full { includeConfig 'conf/test_full.config' }
@@ -231,7 +239,7 @@ manifest {
description = """call and score variants from WGS/WES of rare disease patients"""
mainScript = 'main.nf'
nextflowVersion = '!>=23.04.0'
- version = '1.2.0dev'
+ version = '2.1.0dev'
doi = ''
}
diff --git a/nextflow_schema.json b/nextflow_schema.json
index 2077e3bd..eebcbad7 100644
--- a/nextflow_schema.json
+++ b/nextflow_schema.json
@@ -265,6 +265,13 @@
"description": "Validation of parameters in lenient more.",
"hidden": true,
"help_text": "Allows string values that are parseable as numbers or booleans. For further information see [JSONSchema docs](https://github.com/everit-org/json-schema#lenient-mode)."
+ },
+ "pipelines_testdata_base_path": {
+ "type": "string",
+ "fa_icon": "far fa-check-circle",
+ "description": "Base URL or local path to location of pipeline test dataset files",
+ "default": "https://raw.githubusercontent.com/nf-core/test-datasets/",
+ "hidden": true
}
}
}
diff --git a/pyproject.toml b/pyproject.toml
deleted file mode 100644
index 56110621..00000000
--- a/pyproject.toml
+++ /dev/null
@@ -1,15 +0,0 @@
-# Config file for Python. Mostly used to configure linting of bin/*.py with Ruff.
-# Should be kept the same as nf-core/tools to avoid fighting with template synchronisation.
-[tool.ruff]
-line-length = 120
-target-version = "py38"
-cache-dir = "~/.cache/ruff"
-
-[tool.ruff.lint]
-select = ["I", "E1", "E4", "E7", "E9", "F", "UP", "N"]
-
-[tool.ruff.lint.isort]
-known-first-party = ["nf_core"]
-
-[tool.ruff.lint.per-file-ignores]
-"__init__.py" = ["E402", "F401"]
diff --git a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf
index 3ec266c7..b95a50e7 100644
--- a/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf
+++ b/subworkflows/local/utils_nfcore_raredisease_pipeline/main.nf
@@ -140,6 +140,10 @@ workflow PIPELINE_COMPLETION {
imNotification(summary_params, hook_url)
}
}
+
+ workflow.onError {
+ log.error "Pipeline failed. Please refer to troubleshooting docs: https://nf-co.re/docs/usage/troubleshooting"
+ }
}
/*
@@ -230,8 +234,16 @@ def methodsDescriptionText(mqc_methods_yaml) {
meta["manifest_map"] = workflow.manifest.toMap()
// Pipeline DOI
- meta["doi_text"] = meta.manifest_map.doi ? "(doi: ${meta.manifest_map.doi})" : ""
- meta["nodoi_text"] = meta.manifest_map.doi ? "": "If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used. "
+ if (meta.manifest_map.doi) {
+ // Using a loop to handle multiple DOIs
+ // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers
+ // Removing ` ` since the manifest.doi is a string and not a proper list
+ def temp_doi_ref = ""
+ String[] manifest_doi = meta.manifest_map.doi.tokenize(",")
+ for (String doi_ref: manifest_doi) temp_doi_ref += "(doi: ${doi_ref.replace("https://doi.org/", "").replace(" ", "")}), "
+ meta["doi_text"] = temp_doi_ref.substring(0, temp_doi_ref.length() - 2)
+ } else meta["doi_text"] = ""
+ meta["nodoi_text"] = meta.manifest_map.doi ? "" : "If available, make sure to update the text to include the Zenodo DOI of version of the pipeline used. "
// Tool references
meta["tool_citations"] = ""
diff --git a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
index a8b55d6f..14558c39 100644
--- a/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
+++ b/subworkflows/nf-core/utils_nfcore_pipeline/main.nf
@@ -65,9 +65,15 @@ def checkProfileProvided(nextflow_cli_args) {
// Citation string for pipeline
//
def workflowCitation() {
+ def temp_doi_ref = ""
+ String[] manifest_doi = workflow.manifest.doi.tokenize(",")
+ // Using a loop to handle multiple DOIs
+ // Removing `https://doi.org/` to handle pipelines using DOIs vs DOI resolvers
+ // Removing ` ` since the manifest.doi is a string and not a proper list
+ for (String doi_ref: manifest_doi) temp_doi_ref += " https://doi.org/${doi_ref.replace('https://doi.org/', '').replace(' ', '')}\n"
return "If you use ${workflow.manifest.name} for your analysis please cite:\n\n" +
"* The pipeline\n" +
- " ${workflow.manifest.doi}\n\n" +
+ temp_doi_ref + "\n" +
"* The nf-core framework\n" +
" https://doi.org/10.1038/s41587-020-0439-x\n\n" +
"* Software dependencies\n" +
diff --git a/workflows/raredisease.nf b/workflows/raredisease.nf
index c9dd37ed..27bcebe2 100644
--- a/workflows/raredisease.nf
+++ b/workflows/raredisease.nf
@@ -40,22 +40,44 @@ workflow RAREDISEASE {
// Collate and save software versions
//
softwareVersionsToYAML(ch_versions)
- .collectFile(storeDir: "${params.outdir}/pipeline_info", name: 'nf_core_pipeline_software_mqc_versions.yml', sort: true, newLine: true)
- .set { ch_collated_versions }
+ .collectFile(
+ storeDir: "${params.outdir}/pipeline_info",
+ name: 'nf_core_pipeline_software_mqc_versions.yml',
+ sort: true,
+ newLine: true
+ ).set { ch_collated_versions }
//
// MODULE: MultiQC
//
- ch_multiqc_config = Channel.fromPath("$projectDir/assets/multiqc_config.yml", checkIfExists: true)
- ch_multiqc_custom_config = params.multiqc_config ? Channel.fromPath(params.multiqc_config, checkIfExists: true) : Channel.empty()
- ch_multiqc_logo = params.multiqc_logo ? Channel.fromPath(params.multiqc_logo, checkIfExists: true) : Channel.empty()
- summary_params = paramsSummaryMap(workflow, parameters_schema: "nextflow_schema.json")
- ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params))
- ch_multiqc_custom_methods_description = params.multiqc_methods_description ? file(params.multiqc_methods_description, checkIfExists: true) : file("$projectDir/assets/methods_description_template.yml", checkIfExists: true)
- ch_methods_description = Channel.value(methodsDescriptionText(ch_multiqc_custom_methods_description))
- ch_multiqc_files = ch_multiqc_files.mix(ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'))
- ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions)
- ch_multiqc_files = ch_multiqc_files.mix(ch_methods_description.collectFile(name: 'methods_description_mqc.yaml', sort: false))
+ ch_multiqc_config = Channel.fromPath(
+ "$projectDir/assets/multiqc_config.yml", checkIfExists: true)
+ ch_multiqc_custom_config = params.multiqc_config ?
+ Channel.fromPath(params.multiqc_config, checkIfExists: true) :
+ Channel.empty()
+ ch_multiqc_logo = params.multiqc_logo ?
+ Channel.fromPath(params.multiqc_logo, checkIfExists: true) :
+ Channel.empty()
+
+ summary_params = paramsSummaryMap(
+ workflow, parameters_schema: "nextflow_schema.json")
+ ch_workflow_summary = Channel.value(paramsSummaryMultiqc(summary_params))
+
+ ch_multiqc_custom_methods_description = params.multiqc_methods_description ?
+ file(params.multiqc_methods_description, checkIfExists: true) :
+ file("$projectDir/assets/methods_description_template.yml", checkIfExists: true)
+ ch_methods_description = Channel.value(
+ methodsDescriptionText(ch_multiqc_custom_methods_description))
+
+ ch_multiqc_files = ch_multiqc_files.mix(
+ ch_workflow_summary.collectFile(name: 'workflow_summary_mqc.yaml'))
+ ch_multiqc_files = ch_multiqc_files.mix(ch_collated_versions)
+ ch_multiqc_files = ch_multiqc_files.mix(
+ ch_methods_description.collectFile(
+ name: 'methods_description_mqc.yaml',
+ sort: true
+ )
+ )
MULTIQC (
ch_multiqc_files.collect(),
From b55545c00da19229686bfd99b6b1c1688f3c86a1 Mon Sep 17 00:00:00 2001
From: nf-core-bot
Date: Thu, 9 May 2024 11:42:50 +0000
Subject: [PATCH 45/80] Template update for nf-core/tools version 2.14.1
---
.github/workflows/linting.yml | 1 -
.nf-core.yml | 2 +-
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml
index a3fb2541..1fcafe88 100644
--- a/.github/workflows/linting.yml
+++ b/.github/workflows/linting.yml
@@ -20,7 +20,6 @@ jobs:
uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
with:
python-version: "3.12"
- cache: "pip"
- name: Install pre-commit
run: pip install pre-commit
diff --git a/.nf-core.yml b/.nf-core.yml
index d6daa403..e0b85a77 100644
--- a/.nf-core.yml
+++ b/.nf-core.yml
@@ -1,2 +1,2 @@
repository_type: pipeline
-nf_core_version: "2.14.0"
+nf_core_version: "2.14.1"
From 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 46/80] 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 47/80] 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 48/80] 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 49/80] 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 50/80] 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 51/80] 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 52/80] 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 53/80] 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 54/80] 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 55/80] 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 56/80] 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 57/80] 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 58/80] 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 59/80] 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 60/80] 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 61/80] 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 62/80] 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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