diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index e4575c4d69..57e59161cf 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -42,6 +42,7 @@ jobs:
- "haplotypecaller"
- "manta"
- "markduplicates"
+ - "mpileup"
- "msisensorpro"
- "mutect2"
- "prepare_recalibration"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6797e4bb50..bdc8e1fc87 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -57,6 +57,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- [#551](https://github.com/nf-core/sarek/pull/551) - Sync `TEMPLATE` with `tools` `2.4`
- [#562](https://github.com/nf-core/sarek/pull/562) - Restart from `--step annotate` is now also requiring a CSV file.
- [#563](https://github.com/nf-core/sarek/pull/563) - Updated subway map
+- [#570](https://github.com/nf-core/sarek/pull/570) - Extract mpileup into its own subworkflow; zip mpileup files
- [#571](https://github.com/nf-core/sarek/pull/571) - Including and using GATK4's mergeVcfs
- [#572](https://github.com/nf-core/sarek/pull/572) - Adjusted subway map svg for firefox compatibility
- [#578](https://github.com/nf-core/sarek/pull/578) - Updated module deeptools/bamcoverage
diff --git a/conf/modules.config b/conf/modules.config
index ab4affec1b..1deca131d3 100644
--- a/conf/modules.config
+++ b/conf/modules.config
@@ -682,11 +682,11 @@ process{
]
}
- withName: 'CAT_MPILEUP_.*' {
+ withName: 'CAT_MPILEUP' {
publishDir = [
mode: params.publish_dir_mode,
- path: { "${params.outdir}/variant_calling/${meta.id}/controlfreec" },
- pattern: "*mpileup"
+ path: { "${params.outdir}/variant_calling/${meta.id}/mpileup" },
+ pattern: "*{mpileup.gz}",
]
}
@@ -758,14 +758,13 @@ process{
]
}
- withName: 'MPILEUP_.*' {
- ext.prefix = { meta.num_intervals <= 1 ? meta.id : "${meta.id}_${intervals.simpleName}"}
- ext.when = { params.tools && params.tools.contains('controlfreec') }
+ withName: 'SAMTOOLS_MPILEUP' {
+ ext.when = { params.tools && (params.tools.contains('controlfreec') || params.tools.contains('mpileup')) }
publishDir = [
mode: params.publish_dir_mode,
- path: { "${params.outdir}/variant_calling/${meta.id}/" },
- pattern: "*mpileup",
- saveAs: { meta.num_intervals > 1 ? null : "controlfreec/${it}" }
+ path: { "${params.outdir}/variant_calling/${meta.id}/mpileup" },
+ pattern: "*mpileup.gz",
+ saveAs: { meta.num_intervals > 1 ? null : it }
]
}
@@ -910,20 +909,36 @@ process{
}
//CONTROLFREEC
- withName: 'MPILEUP_NORMAL' {
- ext.prefix = { meta.num_intervals <= 1 ? "${meta.id}.normal" : "${meta.id}_${intervals.simpleName}.normal" }
+ withName: 'NFCORE_SAREK:SAREK:PAIR_VARIANT_CALLING:RUN_MPILEUP_NORMAL:SAMTOOLS_MPILEUP' {
+ ext.prefix = { meta.num_intervals <= 1 ? "${meta.id}.normal" : "${meta.id}_${intervals.simpleName}.normal" }
+ }
+
+ withName: 'NFCORE_SAREK:SAREK:PAIR_VARIANT_CALLING:RUN_MPILEUP_TUMOR:SAMTOOLS_MPILEUP' {
+ ext.prefix = { meta.num_intervals <= 1 ? "${meta.id}.tumor" : "${meta.id}_${intervals.simpleName}.tumor" }
+ }
+
+ withName: 'NFCORE_SAREK:SAREK:PAIR_VARIANT_CALLING:RUN_MPILEUP_NORMAL:CAT_MPILEUP' {
+ ext.prefix = { "${meta.id}.normal.mpileup.gz" }
+ }
+
+ withName: 'NFCORE_SAREK:SAREK:PAIR_VARIANT_CALLING:RUN_MPILEUP_TUMOR:CAT_MPILEUP' {
+ ext.prefix = { "${meta.id}.tumor.mpileup.gz" }
}
- withName: 'MPILEUP_TUMOR' {
- ext.prefix = { meta.num_intervals <= 1 ? "${meta.id}.tumor" : "${meta.id}_${intervals.simpleName}.tumor" }
+ withName: 'NFCORE_SAREK:SAREK:TUMOR_ONLY_VARIANT_CALLING:RUN_MPILEUP:CAT_MPILEUP' {
+ ext.prefix = { "${meta.id}.tumor.mpileup.gz" }
}
- withName: 'CAT_MPILEUP_NORMAL' {
- ext.prefix = { "${meta.id}.normal.mpileup" }
+ withName: 'NFCORE_SAREK:SAREK:GERMLINE_VARIANT_CALLING:RUN_MPILEUP:SAMTOOLS_MPILEUP' {
+ ext.prefix = { meta.num_intervals <= 1 ? "${meta.id}.normal" : "${meta.id}_${intervals.simpleName}.normal" }
}
- withName: 'CAT_MPILEUP_TUMOR' {
- ext.prefix = { "${meta.id}.tumor.mpileup" }
+ withName: 'NFCORE_SAREK:SAREK:GERMLINE_VARIANT_CALLING:RUN_MPILEUP:CAT_MPILEUP' {
+ ext.prefix = { "${meta.id}.normal.mpileup.gz" }
+ }
+
+ withName: 'NFCORE_SAREK:SAREK:TUMOR_ONLY_VARIANT_CALLING:RUN_MPILEUP:SAMTOOLS_MPILEUP' {
+ ext.prefix = { meta.num_intervals <= 1 ? "${meta.id}.tumor" : "${meta.id}_${intervals.simpleName}.tumor" }
}
withName: 'FREEC_SOMATIC'{
@@ -972,6 +987,7 @@ process{
pattern: "*{bed,cnn,cnr,cns,pdf,png}"
]
}
+
//FREEBAYES
withName: 'NFCORE_SAREK:SAREK:PAIR_VARIANT_CALLING:RUN_FREEBAYES_SOMATIC:FREEBAYES' {
ext.args = "--pooled-continuous \
diff --git a/docs/images/sarek_subway.png b/docs/images/sarek_subway.png
index a17d702ae9..3cd8f13802 100644
Binary files a/docs/images/sarek_subway.png and b/docs/images/sarek_subway.png differ
diff --git a/docs/images/sarek_subway.svg b/docs/images/sarek_subway.svg
index 8b290c954a..734168a8f3 100644
--- a/docs/images/sarek_subway.svg
+++ b/docs/images/sarek_subway.svg
@@ -7,9 +7,9 @@
viewBox="0 0 297 210"
version="1.1"
id="svg5"
- inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
- sodipodi:docname="sarek_subway_orig_new.svg"
- inkscape:export-filename="inkscape_subway_orig_new.90dpi.png"
+ inkscape:version="1.2 (dc2aeda, 2022-05-15)"
+ sodipodi:docname="sarek_subway.svg"
+ inkscape:export-filename="sarek_subway.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
@@ -26,13 +26,13 @@
inkscape:pagecheckerboard="false"
inkscape:document-units="mm"
showgrid="true"
- inkscape:zoom="0.798645"
- inkscape:cx="688.66643"
- inkscape:cy="380.64472"
- inkscape:window-width="1920"
- inkscape:window-height="1000"
- inkscape:window-x="-11"
- inkscape:window-y="-11"
+ inkscape:zoom="7.7830401"
+ inkscape:cx="491.64593"
+ inkscape:cy="410.95766"
+ inkscape:window-width="1024"
+ inkscape:window-height="587"
+ inkscape:window-x="0"
+ inkscape:window-y="25"
inkscape:window-maximized="1"
inkscape:current-layer="layer4"
width="211mm"
@@ -42,7 +42,7 @@
fit-margin-bottom="0"
lock-margins="false"
units="mm"
- inkscape:showpageshadow="2"
+ inkscape:showpageshadow="false"
inkscape:deskcolor="#d1d1d1">
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:3.91732;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal" />
deepvariant
freebayes
haplotypecaller
freebayes
+
+
+
+
+
+
Example analysis pathways
@@ -3215,6 +3247,36 @@
sodipodi:nodetypes="ccsscccccccccc"
style="fill:#ffffff;stroke-width:0.435688" />
+ mpileup
+ mpileup
diff --git a/modules.json b/modules.json
index 0c330b13f3..36dff42a66 100644
--- a/modules.json
+++ b/modules.json
@@ -205,7 +205,7 @@
"git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773"
},
"samtools/mpileup": {
- "git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773"
+ "git_sha": "24e05f6097a5dde57dd80d33295ed120f1b81aef"
},
"samtools/stats": {
"git_sha": "897c33d5da084b61109500ee44c01da2d3e4e773"
diff --git a/modules/nf-core/modules/samtools/mpileup/main.nf b/modules/nf-core/modules/samtools/mpileup/main.nf
index fcd498becb..cfab5c981c 100644
--- a/modules/nf-core/modules/samtools/mpileup/main.nf
+++ b/modules/nf-core/modules/samtools/mpileup/main.nf
@@ -11,8 +11,8 @@ process SAMTOOLS_MPILEUP {
path fasta
output:
- tuple val(meta), path("*.mpileup"), emit: mpileup
- path "versions.yml" , emit: versions
+ tuple val(meta), path("*.mpileup.gz"), emit: mpileup
+ path "versions.yml" , emit: versions
when:
task.ext.when == null || task.ext.when
@@ -27,6 +27,7 @@ process SAMTOOLS_MPILEUP {
--output ${prefix}.mpileup \\
$args \\
$input
+ bgzip ${prefix}.mpileup
cat <<-END_VERSIONS > versions.yml
"${task.process}":
samtools: \$(echo \$(samtools --version 2>&1) | sed 's/^.*samtools //; s/Using.*\$//')
diff --git a/subworkflows/local/germline_variant_calling.nf b/subworkflows/local/germline_variant_calling.nf
index e29e48d874..ee0d45c726 100644
--- a/subworkflows/local/germline_variant_calling.nf
+++ b/subworkflows/local/germline_variant_calling.nf
@@ -7,6 +7,7 @@ include { RUN_DEEPVARIANT } from '../nf-core/variantcalling/deepvariant/main
include { RUN_FREEBAYES } from '../nf-core/variantcalling/freebayes/main.nf'
include { RUN_HAPLOTYPECALLER } from '../nf-core/variantcalling/haplotypecaller/main.nf'
include { RUN_MANTA_GERMLINE } from '../nf-core/variantcalling/manta/germline/main.nf'
+include { RUN_MPILEUP } from '../nf-core/variantcalling/mpileup/main'
include { RUN_STRELKA_SINGLE } from '../nf-core/variantcalling/strelka/single/main.nf'
include { RUN_TIDDIT } from '../nf-core/variantcalling/tiddit/main.nf'
@@ -39,6 +40,7 @@ workflow GERMLINE_VARIANT_CALLING {
manta_vcf = Channel.empty()
strelka_vcf = Channel.empty()
tiddit_vcf = Channel.empty()
+ mpileup = Channel.empty()
// Remap channel with intervals
cram_recalibrated_intervals = cram_recalibrated.combine(intervals)
@@ -63,6 +65,18 @@ workflow GERMLINE_VARIANT_CALLING {
cram, crai, bed_new, tbi_new]
}
+ if(params.tools.contains('mpileup')){
+ cram_intervals_no_index = cram_recalibrated_intervals
+ .map { meta, cram, crai, intervals ->
+ [meta, cram, intervals]
+ }
+
+ RUN_MPILEUP(cram_intervals_no_index,
+ fasta)
+ mpileup_germline = RUN_MPILEUP.out.mpileup
+ ch_versions = ch_versions.mix(RUN_MPILEUP.out.versions)
+ }
+
// CNVKIT
if(tools.contains('cnvkit')){
diff --git a/subworkflows/local/pair_variant_calling.nf b/subworkflows/local/pair_variant_calling.nf
index ee9a0b4b05..49d0723d23 100644
--- a/subworkflows/local/pair_variant_calling.nf
+++ b/subworkflows/local/pair_variant_calling.nf
@@ -8,6 +8,8 @@ include { RUN_FREEBAYES as RUN_FREEBAYES_SOMATIC } from '../nf-core/variantca
include { RUN_MANTA_SOMATIC } from '../nf-core/variantcalling/manta/somatic/main.nf'
include { RUN_STRELKA_SOMATIC } from '../nf-core/variantcalling/strelka/somatic/main.nf'
include { RUN_CNVKIT_SOMATIC } from '../nf-core/variantcalling/cnvkit/somatic/main.nf'
+include { RUN_MPILEUP as RUN_MPILEUP_NORMAL } from '../nf-core/variantcalling/mpileup/main'
+include { RUN_MPILEUP as RUN_MPILEUP_TUMOR } from '../nf-core/variantcalling/mpileup/main'
workflow PAIR_VARIANT_CALLING {
take:
@@ -73,9 +75,18 @@ workflow PAIR_VARIANT_CALLING {
.map {meta, normal_cram, normal_crai, tumor_cram, tumor_crai, intervals ->
[meta, tumor_cram, intervals]
}
-
- RUN_CONTROLFREEC_SOMATIC(cram_normal_intervals_no_index,
- cram_tumor_intervals_no_index,
+ RUN_MPILEUP_NORMAL(cram_normal_intervals_no_index, fasta)
+ mpileup_normal = RUN_MPILEUP_NORMAL.out.mpileup
+ RUN_MPILEUP_TUMOR(cram_tumor_intervals_no_index, fasta)
+ mpileup_tumor = RUN_MPILEUP_TUMOR.out.mpileup
+ ch_versions = ch_versions.mix(RUN_MPILEUP_NORMAL.out.versions)
+ ch_versions = ch_versions.mix(RUN_MPILEUP_TUMOR.out.versions)
+
+ controlfreec_input = mpileup_normal.cross(mpileup_tumor)
+ .map{ normal, tumor ->
+ [normal[0], normal[1], tumor[1], [], [], [], []]
+ }
+ RUN_CONTROLFREEC_SOMATIC(controlfreec_input,
fasta,
fasta_fai,
dbsnp,
diff --git a/subworkflows/local/tumor_variant_calling.nf b/subworkflows/local/tumor_variant_calling.nf
index 2ef58e26e3..0d12f83702 100644
--- a/subworkflows/local/tumor_variant_calling.nf
+++ b/subworkflows/local/tumor_variant_calling.nf
@@ -9,6 +9,7 @@ include { RUN_MANTA_TUMORONLY } from '../nf-core/variantcall
include { RUN_STRELKA_SINGLE } from '../nf-core/variantcalling/strelka/single/main.nf'
include { RUN_CONTROLFREEC_TUMORONLY } from '../nf-core/variantcalling/controlfreec/tumoronly/main.nf'
include { RUN_CNVKIT_TUMORONLY } from '../nf-core/variantcalling/cnvkit/tumoronly/main.nf'
+include { RUN_MPILEUP } from '../nf-core/variantcalling/mpileup/main'
workflow TUMOR_ONLY_VARIANT_CALLING {
take:
@@ -62,12 +63,23 @@ workflow TUMOR_ONLY_VARIANT_CALLING {
cram, crai, bed_new, tbi_new]
}
- if(tools.contains('controlfreec')){
+ if (tools.contains('mpileup') || tools.contains('controlfreec')){
cram_intervals_no_index = cram_recalibrated_intervals.map { meta, cram, crai, intervals ->
[meta, cram, intervals]
}
+ RUN_MPILEUP(cram_intervals_no_index,
+ fasta)
+ ch_versions = ch_versions.mix(RUN_MPILEUP.out.versions)
+ }
+
+ if (tools.contains('controlfreec')){
+ controlfreec_input = RUN_MPILEUP.out.mpileup
+ .map{ meta, pileup_tumor ->
+ [meta, [], pileup_tumor, [], [], [], []]
+ }
+
RUN_CONTROLFREEC_TUMORONLY(
- cram_intervals_no_index,
+ controlfreec_input,
fasta,
fasta_fai,
dbsnp,
diff --git a/subworkflows/nf-core/variantcalling/controlfreec/somatic/main.nf b/subworkflows/nf-core/variantcalling/controlfreec/somatic/main.nf
index c5e0b07678..0c88ba8737 100644
--- a/subworkflows/nf-core/variantcalling/controlfreec/somatic/main.nf
+++ b/subworkflows/nf-core/variantcalling/controlfreec/somatic/main.nf
@@ -1,17 +1,12 @@
-include { CAT_CAT as CAT_MPILEUP_NORMAL } from '../../../../../modules/nf-core/modules/cat/cat/main.nf'
-include { CAT_CAT as CAT_MPILEUP_TUMOR } from '../../../../../modules/nf-core/modules/cat/cat/main.nf'
include { CONTROLFREEC_FREEC as FREEC_SOMATIC } from '../../../../../modules/nf-core/modules/controlfreec/freec/main'
include { CONTROLFREEC_ASSESSSIGNIFICANCE as ASSESS_SIGNIFICANCE } from '../../../../../modules/nf-core/modules/controlfreec/assesssignificance/main'
include { CONTROLFREEC_FREEC2BED as FREEC2BED } from '../../../../../modules/nf-core/modules/controlfreec/freec2bed/main'
include { CONTROLFREEC_FREEC2CIRCOS as FREEC2CIRCOS } from '../../../../../modules/nf-core/modules/controlfreec/freec2circos/main'
include { CONTROLFREEC_MAKEGRAPH as MAKEGRAPH } from '../../../../../modules/nf-core/modules/controlfreec/makegraph/main'
-include { SAMTOOLS_MPILEUP as MPILEUP_NORMAL } from '../../../../../modules/nf-core/modules/samtools/mpileup/main'
-include { SAMTOOLS_MPILEUP as MPILEUP_TUMOR } from '../../../../../modules/nf-core/modules/samtools/mpileup/main'
workflow RUN_CONTROLFREEC_SOMATIC {
take:
- cram_normal // channel: [mandatory] [meta, cram, crai, interval]
- cram_tumor // channel: [mandatory] [meta, cram, crai, interval]
+ controlfreec_input // channel: [mandatory] [meta, pileup_normal, pileup_tumor, [], [], [], []]
fasta // channel: [mandatory]
fasta_fai // channel: [mandatory]
dbsnp // channel: [mandatory]
@@ -24,59 +19,6 @@ workflow RUN_CONTROLFREEC_SOMATIC {
ch_versions = Channel.empty()
- MPILEUP_NORMAL(cram_normal, fasta)
-
- MPILEUP_NORMAL.out.mpileup.branch{
- intervals: it[0].num_intervals > 1
- no_intervals: it[0].num_intervals <= 1
- }.set{mpileup_normal}
-
- MPILEUP_TUMOR(cram_tumor, fasta)
-
- MPILEUP_TUMOR.out.mpileup.branch{
- intervals: it[0].num_intervals > 1
- no_intervals: it[0].num_intervals <= 1
- }.set{mpileup_tumor}
-
- //Merge mpileup only when intervals and natural order sort them
- CAT_MPILEUP_NORMAL( mpileup_normal.intervals.map{ meta, pileup ->
-
- new_meta = [patient:meta.patient, normal_id:meta.normal_id, tumor_id:meta.tumor_id, gender:meta.gender, id:meta.tumor_id + "_vs_" + meta.normal_id, num_intervals:meta.num_intervals]
-
- [groupKey(new_meta, meta.num_intervals), pileup]
- }.groupTuple(sort:true))
-
- CAT_MPILEUP_TUMOR(mpileup_tumor.intervals
- .map{ meta, pileup ->
- new_meta = [patient:meta.patient, normal_id:meta.normal_id, tumor_id:meta.tumor_id, gender:meta.gender, id:meta.tumor_id + "_vs_" + meta.normal_id, num_intervals:meta.num_intervals]
-
- [groupKey(new_meta, meta.num_intervals), pileup]
- }
- .groupTuple(sort:true))
-
- controlfreec_input_normal = Channel.empty().mix(
- CAT_MPILEUP_NORMAL.out.file_out,
- mpileup_normal.no_intervals
- ).map{ meta, pileup ->
- new_meta = [patient:meta.patient, normal_id:meta.normal_id, tumor_id:meta.tumor_id, gender:meta.gender, id:meta.tumor_id + "_vs_" + meta.normal_id, num_intervals:meta.num_intervals]
-
- [new_meta, pileup]
- }
-
- controlfreec_input_tumor = Channel.empty().mix(
- CAT_MPILEUP_TUMOR.out.file_out,
- mpileup_tumor.no_intervals
- ).map{ meta, pileup ->
- new_meta = [patient:meta.patient, normal_id:meta.normal_id, tumor_id:meta.tumor_id, gender:meta.gender, id:meta.tumor_id + "_vs_" + meta.normal_id, num_intervals:meta.num_intervals]
- [new_meta, pileup]
- }
-
- controlfreec_input_normal.cross(controlfreec_input_tumor)
- .map{ normal, tumor ->
- [normal[0], normal[1], tumor[1], [], [], [], []]
- }
- .set{controlfreec_input}
-
FREEC_SOMATIC(controlfreec_input,
fasta,
fasta_fai,
@@ -93,10 +35,6 @@ workflow RUN_CONTROLFREEC_SOMATIC {
FREEC2CIRCOS( FREEC_SOMATIC.out.ratio )
MAKEGRAPH(FREEC_SOMATIC.out.ratio.join(FREEC_SOMATIC.out.BAF))
- ch_versions = ch_versions.mix(MPILEUP_NORMAL.out.versions)
- ch_versions = ch_versions.mix(MPILEUP_TUMOR.out.versions)
- ch_versions = ch_versions.mix(CAT_MPILEUP_NORMAL.out.versions)
- ch_versions = ch_versions.mix(CAT_MPILEUP_TUMOR.out.versions)
ch_versions = ch_versions.mix(FREEC_SOMATIC.out.versions)
ch_versions = ch_versions.mix(ASSESS_SIGNIFICANCE.out.versions)
ch_versions = ch_versions.mix(FREEC2BED.out.versions)
diff --git a/subworkflows/nf-core/variantcalling/controlfreec/tumoronly/main.nf b/subworkflows/nf-core/variantcalling/controlfreec/tumoronly/main.nf
index 30c03ea743..c7535b10c6 100644
--- a/subworkflows/nf-core/variantcalling/controlfreec/tumoronly/main.nf
+++ b/subworkflows/nf-core/variantcalling/controlfreec/tumoronly/main.nf
@@ -1,14 +1,12 @@
-include { CAT_CAT as CAT_MPILEUP_TUMOR } from '../../../../../modules/nf-core/modules/cat/cat/main.nf'
include { CONTROLFREEC_FREEC as FREEC_TUMORONLY } from '../../../../../modules/nf-core/modules/controlfreec/freec/main'
include { CONTROLFREEC_ASSESSSIGNIFICANCE as ASSESS_SIGNIFICANCE } from '../../../../../modules/nf-core/modules/controlfreec/assesssignificance/main'
include { CONTROLFREEC_FREEC2BED as FREEC2BED } from '../../../../../modules/nf-core/modules/controlfreec/freec2bed/main'
include { CONTROLFREEC_FREEC2CIRCOS as FREEC2CIRCOS } from '../../../../../modules/nf-core/modules/controlfreec/freec2circos/main'
include { CONTROLFREEC_MAKEGRAPH as MAKEGRAPH } from '../../../../../modules/nf-core/modules/controlfreec/makegraph/main'
-include { SAMTOOLS_MPILEUP as MPILEUP_TUMOR } from '../../../../../modules/nf-core/modules/samtools/mpileup/main'
workflow RUN_CONTROLFREEC_TUMORONLY {
take:
- cram_tumor // channel: [mandatory] [meta, cram, crai, interval]
+ controlfreec_input // channel: [mandatory] [meta, [], pileup_tumor, [], [], [], []]
fasta // channel: [mandatory]
fasta_fai // channel: [mandatory]
dbsnp // channel: [mandatory]
@@ -21,36 +19,6 @@ workflow RUN_CONTROLFREEC_TUMORONLY {
ch_versions = Channel.empty()
- MPILEUP_TUMOR(cram_tumor, fasta)
-
- MPILEUP_TUMOR.out.mpileup.branch{
- intervals: it[0].num_intervals > 1
- no_intervals: it[0].num_intervals <= 1
- }.set{mpileup_tumor}
-
- //Merge mpileup only when intervals and natural order sort them
- CAT_MPILEUP_TUMOR(mpileup_tumor.intervals
- .map{ meta, pileup ->
- new_meta = [patient:meta.patient, sample:meta.sample, status:meta.status, gender:meta.gender, id:meta.sample, num_intervals:meta.num_intervals]
-
- [groupKey(new_meta, meta.num_intervals), pileup]
- }
- .groupTuple(sort:true))
-
- controlfreec_input_tumor = Channel.empty().mix(
- CAT_MPILEUP_TUMOR.out.file_out,
- mpileup_tumor.no_intervals
- ).map{ meta, pileup ->
- new_meta = [patient:meta.patient, sample:meta.sample, status:meta.status, gender:meta.gender, id:meta.sample, num_intervals:meta.num_intervals]
-
- [new_meta, pileup]
- }
-
- controlfreec_input_tumor
- .map{ meta, pileup_tumor ->
- [meta, [], pileup_tumor, [], [], [], []]
- }.set{controlfreec_input}
-
FREEC_TUMORONLY(controlfreec_input,
fasta,
fasta_fai,
@@ -67,8 +35,6 @@ workflow RUN_CONTROLFREEC_TUMORONLY {
FREEC2CIRCOS( FREEC_TUMORONLY.out.ratio )
MAKEGRAPH(FREEC_TUMORONLY.out.ratio.join(FREEC_TUMORONLY.out.BAF))
- ch_versions = ch_versions.mix(MPILEUP_TUMOR.out.versions)
- ch_versions = ch_versions.mix(CAT_MPILEUP_TUMOR.out.versions)
ch_versions = ch_versions.mix(FREEC_TUMORONLY.out.versions)
ch_versions = ch_versions.mix(ASSESS_SIGNIFICANCE.out.versions)
ch_versions = ch_versions.mix(FREEC2BED.out.versions)
diff --git a/subworkflows/nf-core/variantcalling/mpileup/main.nf b/subworkflows/nf-core/variantcalling/mpileup/main.nf
new file mode 100644
index 0000000000..1f4ddde3d5
--- /dev/null
+++ b/subworkflows/nf-core/variantcalling/mpileup/main.nf
@@ -0,0 +1,35 @@
+include { CAT_CAT as CAT_MPILEUP } from '../../../../modules/nf-core/modules/cat/cat/main'
+include { SAMTOOLS_MPILEUP } from '../../../../modules/nf-core/modules/samtools/mpileup/main'
+
+workflow RUN_MPILEUP {
+ take:
+ cram // channel: [mandatory] [meta, cram, interval]
+ fasta // channel: [mandatory]
+
+ main:
+
+ ch_versions = Channel.empty()
+
+ SAMTOOLS_MPILEUP(cram, fasta)
+ mpileup = SAMTOOLS_MPILEUP.out.mpileup.branch{
+ intervals: it[0].num_intervals > 1
+ no_intervals: it[0].num_intervals <= 1
+ }
+
+ //Merge mpileup only when intervals and natural order sort them
+ CAT_MPILEUP(mpileup.intervals
+ .map{ meta, pileup ->
+ new_meta = meta.tumor_id ? [patient:meta.patient, normal_id:meta.normal_id, tumor_id:meta.tumor_id, gender:meta.gender, id:meta.tumor_id + "_vs_" + meta.normal_id, num_intervals:meta.num_intervals] // not annotated, so no variantcaller necessary
+ : [patient:meta.patient, sample:meta.sample, status:meta.status, gender:meta.gender, id:meta.sample, num_intervals:meta.num_intervals]
+ [groupKey(new_meta, meta.num_intervals), pileup]
+ }
+ .groupTuple(sort:true))
+
+
+ ch_versions = ch_versions.mix(SAMTOOLS_MPILEUP.out.versions)
+ ch_versions = ch_versions.mix(CAT_MPILEUP.out.versions)
+
+ emit:
+ versions = ch_versions
+ mpileup = Channel.empty().mix(CAT_MPILEUP.out.file_out, mpileup.no_intervals)
+}
diff --git a/tests/test_tools.yml b/tests/test_tools.yml
index a2b3f4e58e..ab0111ebbb 100644
--- a/tests/test_tools.yml
+++ b/tests/test_tools.yml
@@ -95,16 +95,16 @@
- path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3_ratio.png
- path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.bed
- path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.circos.txt
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.normal.mpileup
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.normal.mpileup_control.cpn
+ - path: results/variant_calling/sample4_vs_sample3/mpileup/sample4_vs_sample3.normal.mpileup.gz
+ - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.normal.mpileup.gz_control.cpn
- path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.p.value.txt
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup_BAF.txt
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup_CNVs
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup_info.txt
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup_ratio.BedGraph
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup_ratio.txt
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup_sample.cpn
+ - path: results/variant_calling/sample4_vs_sample3/mpileup/sample4_vs_sample3.tumor.mpileup.gz
+ - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup.gz_BAF.txt
+ - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup.gz_CNVs
+ - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup.gz_info.txt
+ - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup.gz_ratio.BedGraph
+ - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup.gz_ratio.txt
+ - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup.gz_sample.cpn
- name: Run variant calling on somatic samples with controlfreec without intervals
command: nextflow run main.nf -profile test,tools_somatic,docker --tools controlfreec -c ./tests/nextflow.config --no_intervals
@@ -121,16 +121,16 @@
- path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3_ratio.png
- path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.bed
- path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.circos.txt
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.normal.mpileup
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.normal.mpileup_control.cpn
+ - path: results/variant_calling/sample4_vs_sample3/mpileup/sample4_vs_sample3.normal.mpileup.gz
+ - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.normal.mpileup.gz_control.cpn
- path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.p.value.txt
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup_BAF.txt
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup_CNVs
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup_info.txt
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup_ratio.BedGraph
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup_ratio.txt
- - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup_sample.cpn
+ - path: results/variant_calling/sample4_vs_sample3/mpileup/sample4_vs_sample3.tumor.mpileup.gz
+ - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup.gz_BAF.txt
+ - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup.gz_CNVs
+ - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup.gz_info.txt
+ - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup.gz_ratio.BedGraph
+ - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup.gz_ratio.txt
+ - path: results/variant_calling/sample4_vs_sample3/controlfreec/sample4_vs_sample3.tumor.mpileup.gz_sample.cpn
- name: Run variant calling on tumor_only sample with controlfreec
command: nextflow run main.nf -profile test,tools_tumoronly,docker --tools controlfreec -stub-run
@@ -152,7 +152,7 @@
- path: results/variant_calling/sample2/controlfreec/sample2_sample.cpn
- path: results/variant_calling/sample2/controlfreec/sample2.bed
- path: results/variant_calling/sample2/controlfreec/sample2.circos.txt
- - path: results/variant_calling/sample2/controlfreec/sample2.tumor.mpileup
+ - path: results/variant_calling/sample2/mpileup/sample2.tumor.mpileup.gz
- path: results/variant_calling/sample2/controlfreec/sample2.p.value.txt
- name: Run variant calling on germline sample with deepvariant
@@ -602,3 +602,37 @@
- path: results/variant_calling/sample4_vs_sample3/strelka/sample4_vs_sample3.somatic_snvs.vcf.gz
- path: results/variant_calling/sample4_vs_sample3/strelka/sample4_vs_sample3.somatic_snvs.vcf.gz.tbi
- path: results/csv/variantcalled.csv
+
+- name: Run variant calling on tumor_only sample to test mpileup
+ command: nextflow run main.nf -profile test,tools_tumoronly,docker --tools mpileup
+ tags:
+ - tumor_only
+ - mpileup
+ files:
+ - path: results/variant_calling/sample2/mpileup/sample2.tumor.mpileup.gz
+
+- name: Run variant calling on tumor_only sample to test mpileup without intervals
+ command: nextflow run main.nf -profile test,tools_tumoronly,docker --tools mpileup --no_intervals
+ tags:
+ - tumor_only
+ - mpileup
+ - no_intervals
+ files:
+ - path: results/variant_calling/sample2/mpileup/sample2.tumor.mpileup.gz
+
+- name: Run variant calling on germline sample to test mpileup
+ command: nextflow run main.nf -profile test,tools_germline,docker --tools mpileup
+ tags:
+ - germline
+ - mpileup
+ files:
+ - path: results/variant_calling/sample1/mpileup/sample1.normal.mpileup.gz
+
+- name: Run variant calling on germline sample to test mpileup without intervals
+ command: nextflow run main.nf -profile test,tools_germline,docker --tools mpileup --no_intervals
+ tags:
+ - germline
+ - mpileup
+ - no_intervals
+ files:
+ - path: results/variant_calling/sample1/mpileup/sample1.normal.mpileup.gz
diff --git a/workflows/sarek.nf b/workflows/sarek.nf
index e2c7f78d43..884e9452d9 100644
--- a/workflows/sarek.nf
+++ b/workflows/sarek.nf
@@ -810,7 +810,8 @@ workflow SAREK {
pon,
pon_tbi,
chr_files,
- mappability)
+ mappability
+ )
// Gather vcf files for annotation and QC
vcf_to_annotate = Channel.empty()