Skip to content

Commit 9f3ff50

Browse files
authored
Merge pull request #998 from FriederikeHanssen/issue_952
Issue 952
2 parents d513738 + 1bb57d1 commit 9f3ff50

File tree

15 files changed

+80
-213
lines changed

15 files changed

+80
-213
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
5050
- [#982](https://github.com/nf-core/sarek/pull/982) - Remove usage of exit statements, using `Nextflow.error` instead
5151
- [#985](https://github.com/nf-core/sarek/pull/985) - Cache correctly identifies when it needs to be updated
5252
- [#988](https://github.com/nf-core/sarek/pull/988) - Updated ascat module to fix seed for reproducibility
53+
- [#998](https://github.com/nf-core/sarek/pull/998) - Remove parallelization within a sample for `Manta`
5354

5455
### Deprecated
5556

conf/modules/manta.config

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,42 +16,14 @@
1616
process {
1717

1818
withName: 'MANTA.*' {
19-
ext.prefix = { meta.num_intervals <= 1 ? "${meta.id}.manta" : "${meta.id}.manta.${target_bed.simpleName}" }
2019
ext.args = { params.wes ? "--exome" : "" }
20+
ext.prefix = { "${meta.id}.manta" }
2121
ext.when = { params.tools && params.tools.split(',').contains('manta') }
2222
publishDir = [
2323
mode: params.publish_dir_mode,
24-
path: { "${params.outdir}/variant_calling/" },
25-
pattern: "*{diploid_sv,tumor_sv,somatic_sv}.{vcf.gz,vcf.gz.tbi}",
26-
saveAs: { meta.num_intervals > 1 ? null : "manta/${meta.id}/${it}" }
27-
]
28-
}
29-
30-
withName: 'MERGE_MANTA.*' {
31-
publishDir = [
32-
mode: params.publish_dir_mode,
33-
path: { "${params.outdir}/variant_calling/manta/${meta.id}/" },
24+
path: { "${params.outdir}/variant_calling/manta/${meta.id}" },
3425
pattern: "*{diploid_sv,tumor_sv,somatic_sv}.{vcf.gz,vcf.gz.tbi}"
3526
]
3627
}
3728

38-
withName: 'MERGE_MANTA_DIPLOID' {
39-
ext.prefix = {"${meta.id}.manta.diploid_sv"}
40-
}
41-
42-
withName: 'MERGE_MANTA_SMALL_INDELS' {
43-
ext.prefix = {"${meta.id}.manta.candidate_small_indels"}
44-
}
45-
46-
withName: 'MERGE_MANTA_SV' {
47-
ext.prefix = {"${meta.id}.manta.candidate_sv"}
48-
}
49-
50-
withName: 'MERGE_MANTA_TUMOR' {
51-
ext.prefix = {"${meta.id}.manta.tumor_sv"}
52-
}
53-
54-
withName: 'MERGE_MANTA_SOMATIC' {
55-
ext.prefix = {"${meta.id}.manta.somatic_sv"}
56-
}
5729
}

modules.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,12 +295,12 @@
295295
},
296296
"manta/somatic": {
297297
"branch": "master",
298-
"git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c",
298+
"git_sha": "f68f379dcdba4e8c132c6daa6cd8794527b81a04",
299299
"installed_by": ["modules"]
300300
},
301301
"manta/tumoronly": {
302302
"branch": "master",
303-
"git_sha": "c8e35eb2055c099720a75538d1b8adb3fb5a464c",
303+
"git_sha": "f68f379dcdba4e8c132c6daa6cd8794527b81a04",
304304
"installed_by": ["modules"]
305305
},
306306
"mosdepth": {

modules/nf-core/manta/somatic/main.nf

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

modules/nf-core/manta/tumoronly/main.nf

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

subworkflows/local/bam_variant_calling_germline_all/main.nf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ workflow BAM_VARIANT_CALLING_GERMLINE_ALL {
2626
fasta_fai // channel: [mandatory] fasta_fai
2727
intervals // channel: [mandatory] [ intervals, num_intervals ] or [ [], 0 ] if no intervals
2828
intervals_bed_combined // channel: [mandatory] intervals/target regions in one file unzipped
29+
intervals_bed_gz_tbi_combined // channel: [mandatory] intervals/target regions in one file zipped
2930
intervals_bed_combined_haplotypec // channel: [mandatory] intervals/target regions in one file unzipped, no_intervals.bed if no_intervals
3031
intervals_bed_gz_tbi // channel: [mandatory] [ interval.bed.gz, interval.bed.gz.tbi, num_intervals ] or [ [], [], 0 ] if no intervals
3132
known_indels_vqsr
@@ -159,7 +160,7 @@ workflow BAM_VARIANT_CALLING_GERMLINE_ALL {
159160
dict.map{ it -> [ [ id:'dict' ], it ] },
160161
fasta,
161162
fasta_fai,
162-
intervals_bed_gz_tbi
163+
intervals_bed_gz_tbi_combined
163164
)
164165

165166
vcf_manta = BAM_VARIANT_CALLING_GERMLINE_MANTA.out.vcf

subworkflows/local/bam_variant_calling_germline_manta/main.nf

Lines changed: 12 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
include { GATK4_MERGEVCFS as MERGE_MANTA_DIPLOID } from '../../../modules/nf-core/gatk4/mergevcfs/main'
2-
include { GATK4_MERGEVCFS as MERGE_MANTA_SMALL_INDELS } from '../../../modules/nf-core/gatk4/mergevcfs/main'
3-
include { GATK4_MERGEVCFS as MERGE_MANTA_SV } from '../../../modules/nf-core/gatk4/mergevcfs/main'
41
include { MANTA_GERMLINE } from '../../../modules/nf-core/manta/germline/main'
52

63
// Seems to be the consensus on upstream modules implementation too
@@ -10,57 +7,29 @@ workflow BAM_VARIANT_CALLING_GERMLINE_MANTA {
107
dict // channel: [optional] [ meta, dict ]
118
fasta // channel: [mandatory] [ fasta ]
129
fasta_fai // channel: [mandatory] [ fasta_fai ]
13-
intervals // channel: [mandatory] [ interval.bed.gz, interval.bed.gz.tbi, num_intervals ] or [ [], [], 0 ] if no intervals
10+
intervals // channel: [mandatory] [ interval.bed.gz, interval.bed.gz.tbi] or [ [], []] if no intervals; intervals file contains all intervals
1411

1512
main:
1613
versions = Channel.empty()
1714

18-
// Combine cram and intervals for spread and gather strategy
19-
cram_intervals = cram.combine(intervals)
20-
// Move num_intervals to meta map
21-
.map{ meta, cram, crai, intervals, intervals_index, num_intervals -> [ meta + [ num_intervals:num_intervals ], cram, crai, intervals, intervals_index ] }
15+
// Combine cram and intervals, account for 0 intervals
16+
cram_intervals = cram.combine(intervals).map{ it ->
17+
bed_gz = it.size() > 3 ? it[3] : []
18+
bed_tbi = it.size() > 3 ? it[4] : []
2219

23-
MANTA_GERMLINE(cram_intervals, fasta, fasta_fai)
24-
25-
// Figuring out if there is one or more vcf(s) from the same sample
26-
small_indels_vcf = MANTA_GERMLINE.out.candidate_small_indels_vcf.branch{
27-
// Use meta.num_intervals to asses number of intervals
28-
intervals: it[0].num_intervals > 1
29-
no_intervals: it[0].num_intervals <= 1
30-
}
31-
32-
// Figuring out if there is one or more vcf(s) from the same sample
33-
sv_vcf = MANTA_GERMLINE.out.candidate_sv_vcf.branch{
34-
// Use meta.num_intervals to asses number of intervals
35-
intervals: it[0].num_intervals > 1
36-
no_intervals: it[0].num_intervals <= 1
20+
[it[0], it[1], it[2], bed_gz, bed_tbi]
3721
}
3822

39-
// Figuring out if there is one or more vcf(s) from the same sample
40-
diploid_sv_vcf = MANTA_GERMLINE.out.diploid_sv_vcf.branch{
41-
// Use meta.num_intervals to asses number of intervals
42-
intervals: it[0].num_intervals > 1
43-
no_intervals: it[0].num_intervals <= 1
44-
}
45-
46-
// Only when using intervals
47-
diploid_sv_vcf_to_merge = diploid_sv_vcf.intervals.map{ meta, vcf -> [ groupKey(meta, meta.num_intervals), vcf ]}.groupTuple()
48-
small_indels_vcf_to_merge = small_indels_vcf.intervals.map{ meta, vcf -> [ groupKey(meta, meta.num_intervals), vcf ]}.groupTuple()
49-
sv_vcf_to_merge = sv_vcf.intervals.map{ meta, vcf -> [ groupKey(meta, meta.num_intervals), vcf ]}.groupTuple()
23+
MANTA_GERMLINE(cram_intervals, fasta, fasta_fai)
5024

51-
MERGE_MANTA_DIPLOID(diploid_sv_vcf_to_merge, dict)
52-
MERGE_MANTA_SMALL_INDELS(small_indels_vcf_to_merge, dict)
53-
MERGE_MANTA_SV(sv_vcf_to_merge, dict)
25+
small_indels_vcf = MANTA_GERMLINE.out.candidate_small_indels_vcf
26+
sv_vcf = MANTA_GERMLINE.out.candidate_sv_vcf
27+
diploid_sv_vcf = MANTA_GERMLINE.out.diploid_sv_vcf
5428

55-
// Mix intervals and no_intervals channels together
5629
// Only diploid SV should get annotated
57-
vcf = Channel.empty().mix(MERGE_MANTA_DIPLOID.out.vcf, diploid_sv_vcf.no_intervals)
58-
// add variantcaller to meta map and remove no longer necessary field: num_intervals
59-
.map{ meta, vcf -> [ meta - meta.subMap('num_intervals') + [ variantcaller:'manta' ], vcf ] }
30+
// add variantcaller to meta map
31+
vcf = diploid_sv_vcf.map{ meta, vcf -> [ meta + [ variantcaller:'manta' ], vcf ] }
6032

61-
versions = versions.mix(MERGE_MANTA_DIPLOID.out.versions)
62-
versions = versions.mix(MERGE_MANTA_SMALL_INDELS.out.versions)
63-
versions = versions.mix(MERGE_MANTA_SV.out.versions)
6433
versions = versions.mix(MANTA_GERMLINE.out.versions)
6534

6635
emit:

subworkflows/local/bam_variant_calling_somatic_all/main.nf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ workflow BAM_VARIANT_CALLING_SOMATIC_ALL {
3131
intervals // channel: [mandatory] [ intervals, num_intervals ] or [ [], 0 ] if no intervals
3232
intervals_bed_gz_tbi // channel: [mandatory] intervals/target regions index zipped and indexed
3333
intervals_bed_combined // channel: [mandatory] intervals/target regions in one file unzipped
34+
intervals_bed_gz_tbi_combined // channel: [mandatory] intervals/target regions in one file zipped
3435
mappability
3536
msisensorpro_scan // channel: [optional] msisensorpro_scan
3637
panel_of_normals // channel: [optional] panel_of_normals
@@ -147,7 +148,7 @@ workflow BAM_VARIANT_CALLING_SOMATIC_ALL {
147148
dict.map{ it -> [ [ id:'dict' ], it ] },
148149
fasta,
149150
fasta_fai,
150-
intervals_bed_gz_tbi
151+
intervals_bed_gz_tbi_combined
151152
)
152153

153154
vcf_manta = BAM_VARIANT_CALLING_SOMATIC_MANTA.out.vcf

subworkflows/local/bam_variant_calling_somatic_manta/main.nf

Lines changed: 14 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
include { GATK4_MERGEVCFS as MERGE_MANTA_DIPLOID } from '../../../modules/nf-core/gatk4/mergevcfs/main'
2-
include { GATK4_MERGEVCFS as MERGE_MANTA_SMALL_INDELS } from '../../../modules/nf-core/gatk4/mergevcfs/main'
3-
include { GATK4_MERGEVCFS as MERGE_MANTA_SOMATIC } from '../../../modules/nf-core/gatk4/mergevcfs/main'
4-
include { GATK4_MERGEVCFS as MERGE_MANTA_SV } from '../../../modules/nf-core/gatk4/mergevcfs/main'
51
include { MANTA_SOMATIC } from '../../../modules/nf-core/manta/somatic/main'
62

73
workflow BAM_VARIANT_CALLING_SOMATIC_MANTA {
@@ -10,86 +6,31 @@ workflow BAM_VARIANT_CALLING_SOMATIC_MANTA {
106
dict // channel: [optional] [ meta, dict ]
117
fasta // channel: [mandatory] [ fasta ]
128
fasta_fai // channel: [mandatory] [ fasta_fai ]
13-
intervals // channel: [mandatory] [ interval.bed.gz, interval.bed.gz.tbi, num_intervals ] or [ [], [], 0 ] if no intervals
9+
intervals // channel: [mandatory] [ interval.bed.gz, interval.bed.gz.tbi ] or [ [], [] ] if no intervals
1410

1511
main:
1612
versions = Channel.empty()
1713

18-
// Combine cram and intervals for spread and gather strategy
19-
cram_intervals = cram.combine(intervals)
20-
// Move num_intervals to meta map
21-
.map{ meta, cram1, crai1, cram2, crai2, intervals, intervals_index, num_intervals -> [ meta + [ num_intervals:num_intervals ], cram1, crai1, cram2, crai2, intervals, intervals_index ] }
14+
// Combine cram and intervals, account for 0 intervals
15+
cram_intervals = cram.combine(intervals).map{ it ->
16+
bed_gz = it.size() > 5 ? it[5] : []
17+
bed_tbi = it.size() > 5 ? it[6] : []
2218

23-
MANTA_SOMATIC(cram_intervals, fasta, fasta_fai)
24-
25-
// Figuring out if there is one or more vcf(s) from the same sample
26-
candidate_small_indels_vcf = MANTA_SOMATIC.out.candidate_small_indels_vcf.branch{
27-
// Use meta.num_intervals to asses number of intervals
28-
intervals: it[0].num_intervals > 1
29-
no_intervals: it[0].num_intervals <= 1
30-
}
31-
32-
// Figuring out if there is one or more vcf(s) from the same sample
33-
candidate_small_indels_vcf_tbi = MANTA_SOMATIC.out.candidate_small_indels_vcf_tbi.branch{
34-
// Use meta.num_intervals to asses number of intervals
35-
intervals: it[0].num_intervals > 1
36-
no_intervals: it[0].num_intervals <= 1
19+
[it[0], it[1], it[2], it[3], it[4], bed_gz, bed_tbi]
3720
}
3821

39-
// Figuring out if there is one or more vcf(s) from the same sample
40-
candidate_sv_vcf = MANTA_SOMATIC.out.candidate_sv_vcf.branch{
41-
// Use meta.num_intervals to asses number of intervals
42-
intervals: it[0].num_intervals > 1
43-
no_intervals: it[0].num_intervals <= 1
44-
}
45-
46-
// Figuring out if there is one or more vcf(s) from the same sample
47-
diploid_sv_vcf = MANTA_SOMATIC.out.diploid_sv_vcf.branch{
48-
// Use meta.num_intervals to asses number of intervals
49-
intervals: it[0].num_intervals > 1
50-
no_intervals: it[0].num_intervals <= 1
51-
}
52-
53-
// Figuring out if there is one or more vcf(s) from the same sample
54-
somatic_sv_vcf = MANTA_SOMATIC.out.somatic_sv_vcf.branch{
55-
// Use meta.num_intervals to asses number of intervals
56-
intervals: it[0].num_intervals > 1
57-
no_intervals: it[0].num_intervals <= 1
58-
}
59-
60-
// Only when using intervals
61-
candidate_small_indels_vcf_to_merge = candidate_small_indels_vcf.intervals.map{ meta, vcf -> [ groupKey(meta, meta.num_intervals), vcf ]}.groupTuple()
62-
candidate_sv_vcf_to_merge = candidate_sv_vcf.intervals.map{ meta, vcf -> [ groupKey(meta, meta.num_intervals), vcf ]}.groupTuple()
63-
diploid_sv_vcf_to_merge = diploid_sv_vcf.intervals.map{ meta, vcf -> [ groupKey(meta, meta.num_intervals), vcf ]}.groupTuple()
64-
somatic_sv_vcf_to_merge = somatic_sv_vcf.intervals.map{ meta, vcf -> [ groupKey(meta, meta.num_intervals), vcf ]}.groupTuple()
22+
MANTA_SOMATIC(cram_intervals, fasta, fasta_fai)
6523

66-
MERGE_MANTA_SMALL_INDELS(candidate_small_indels_vcf_to_merge, dict)
67-
MERGE_MANTA_SV(candidate_sv_vcf_to_merge, dict)
68-
MERGE_MANTA_DIPLOID(diploid_sv_vcf_to_merge, dict)
69-
MERGE_MANTA_SOMATIC(somatic_sv_vcf_to_merge, dict)
24+
candidate_small_indels_vcf = MANTA_SOMATIC.out.candidate_small_indels_vcf
25+
candidate_small_indels_vcf_tbi = MANTA_SOMATIC.out.candidate_small_indels_vcf_tbi
26+
candidate_sv_vcf = MANTA_SOMATIC.out.candidate_sv_vcf
27+
diploid_sv_vcf = MANTA_SOMATIC.out.diploid_sv_vcf
28+
somatic_sv_vcf = MANTA_SOMATIC.out.somatic_sv_vcf
7029

71-
// Mix intervals and no_intervals channels together
7230
// Only diploid and somatic SV should get annotated
73-
vcf = Channel.empty().mix(MERGE_MANTA_DIPLOID.out.vcf, MERGE_MANTA_SOMATIC.out.vcf, diploid_sv_vcf.no_intervals, somatic_sv_vcf.no_intervals)
74-
// add variantcaller to meta map and remove no longer necessary field: num_intervals
75-
.map{ meta, vcf -> [ meta - meta.subMap('num_intervals') + [ variantcaller:'manta' ], vcf ] }
76-
77-
// Mix intervals and no_intervals channels together
78-
// Only joining reads for StrelkaBP
79-
candidate_small_indels_vcf = Channel.empty().mix(MERGE_MANTA_SMALL_INDELS.out.vcf, candidate_small_indels_vcf.no_intervals)
80-
// remove no longer necessary field: num_intervals
81-
.map{ meta, vcf -> [ meta - meta.subMap('num_intervals'), vcf ] }
82-
83-
// Mix intervals and no_intervals channels together
84-
// Only joining reads for StrelkaBP
85-
candidate_small_indels_vcf_tbi = Channel.empty().mix(MERGE_MANTA_SMALL_INDELS.out.tbi, candidate_small_indels_vcf_tbi.no_intervals)
86-
// remove no longer necessary field: num_intervals
87-
.map{ meta, tbi -> [ meta - meta.subMap('num_intervals'), tbi ] }
31+
// add variantcaller to meta map
32+
vcf = Channel.empty().mix(diploid_sv_vcf, somatic_sv_vcf).map{ meta, vcf -> [ meta + [ variantcaller:'manta' ], vcf ] }
8833

89-
versions = versions.mix(MERGE_MANTA_SV.out.versions)
90-
versions = versions.mix(MERGE_MANTA_SMALL_INDELS.out.versions)
91-
versions = versions.mix(MERGE_MANTA_DIPLOID.out.versions)
92-
versions = versions.mix(MERGE_MANTA_SOMATIC.out.versions)
9334
versions = versions.mix(MANTA_SOMATIC.out.versions)
9435

9536
emit:

subworkflows/local/bam_variant_calling_tumor_only_all/main.nf

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ workflow BAM_VARIANT_CALLING_TUMOR_ONLY_ALL {
3030
intervals // channel: [mandatory] [ intervals, num_intervals ] or [ [], 0 ] if no intervals
3131
intervals_bed_gz_tbi // channel: [mandatory] [ interval.bed.gz, interval.bed.gz.tbi, num_intervals ] or [ [], [], 0 ] if no intervals
3232
intervals_bed_combined // channel: [mandatory] intervals/target regions in one file unzipped
33+
intervals_bed_gz_tbi_combined // channel: [mandatory] intervals/target regions in one file zipped
3334
mappability
3435
panel_of_normals // channel: [optional] panel_of_normals
3536
panel_of_normals_tbi // channel: [optional] panel_of_normals_tbi
@@ -132,7 +133,8 @@ workflow BAM_VARIANT_CALLING_TUMOR_ONLY_ALL {
132133
dict.map{ it -> [ [ id:'dict' ], it ] },
133134
fasta,
134135
fasta_fai,
135-
intervals_bed_gz_tbi
136+
intervals_bed_gz_tbi_combined
137+
136138
)
137139

138140
vcf_manta = BAM_VARIANT_CALLING_TUMOR_ONLY_MANTA.out.vcf

0 commit comments

Comments
 (0)