Skip to content

Commit 474e226

Browse files
committed
Re-factor channel joining for featurecounts
1 parent 6f17b33 commit 474e226

File tree

1 file changed

+87
-55
lines changed

1 file changed

+87
-55
lines changed

workflows/chipseq.nf

Lines changed: 87 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -224,15 +224,16 @@ workflow CHIPSEQ {
224224

225225
ch_genome_bam_chromap.paired_end
226226
.collect()
227-
.map { it ->
228-
def count = it.size()
229-
if (count > 0) {
230-
log.warn "=============================================================================\n" +
231-
" Paired-end files produced by chromap cannot be used by some downstream tools due to the issue below:\n" +
232-
" https://github.com/nf-core/chipseq/issues/291\n" +
233-
" They will be excluded from the analysis. Consider using a different aligner\n" +
234-
"==================================================================================="
235-
}
227+
.map {
228+
it ->
229+
def count = it.size()
230+
if (count > 0) {
231+
log.warn "=============================================================================\n" +
232+
" Paired-end files produced by chromap cannot be used by some downstream tools due to the issue below:\n" +
233+
" https://github.com/nf-core/chipseq/issues/291\n" +
234+
" They will be excluded from the analysis. Consider using a different aligner\n" +
235+
"==================================================================================="
236+
}
236237
}
237238

238239
ch_genome_bam = ch_genome_bam_chromap.single_end
@@ -271,9 +272,13 @@ workflow CHIPSEQ {
271272
def meta_clone = meta.clone()
272273
meta_clone.remove('read_group')
273274
meta_clone.id = meta_clone.id.split('_')[0..-2].join('_')
274-
[ meta_clone, bam ] }
275+
[ meta_clone, bam ]
276+
}
275277
.groupTuple(by: [0])
276-
.map { it -> [ it[0], it[1].flatten() ] }
278+
.map {
279+
it ->
280+
[ it[0], it[1].flatten() ]
281+
}
277282
.set { ch_sort_bam }
278283

279284
PICARD_MERGESAMFILES (
@@ -309,7 +314,7 @@ workflow CHIPSEQ {
309314
MARK_DUPLICATES_PICARD.out.bam
310315
)
311316
ch_preseq_multiqc = PRESEQ_LCEXTRAP.out.lc_extrap
312-
ch_versions = ch_versions.mix(PRESEQ_LCEXTRAP.out.versions.first())
317+
ch_versions = ch_versions.mix(PRESEQ_LCEXTRAP.out.versions.first())
313318
}
314319

315320
//
@@ -382,7 +387,7 @@ workflow CHIPSEQ {
382387
}
383388

384389
//
385-
// Refactor channels: [ val(meta), [ ip_bam, control_bam ] [ ip_bai, control_bai ] ]
390+
// Refactor channels: [ meta, [ ip_bam, control_bam ] [ ip_bai, control_bai ] ]
386391
//
387392
FILTER_BAM_BAMTOOLS
388393
.out
@@ -427,9 +432,12 @@ workflow CHIPSEQ {
427432
ch_macs_gsize = KHMER_UNIQUEKMERS.out.kmers.map { it.text.trim() }
428433
}
429434

430-
// Create channel: [ val(meta), ip_bam, control_bam ]
435+
// Create channel: [ meta, ip_bam, control_bam ]
431436
ch_ip_control_bam_bai
432-
.map { meta, bams, bais -> [ meta , bams[0], bams[1] ] }
437+
.map {
438+
meta, bams, bais ->
439+
[ meta , bams[0], bams[1] ]
440+
}
433441
.set { ch_ip_control_bam }
434442

435443
MACS2_CALLPEAK (
@@ -447,23 +455,31 @@ workflow CHIPSEQ {
447455
.filter { meta, peaks -> peaks.size() > 0 }
448456
.set { ch_macs2_peaks }
449457

458+
// Create channel: [ meta, ip_bam, peaks ]
450459
ch_ip_control_bam
451460
.join(ch_macs2_peaks, by: [0])
452-
.map { it -> [ it[0], it[1], it[3] ] }
453-
.set { ch_ip_peak }
461+
.map {
462+
it ->
463+
[ it[0], it[1], it[3] ]
464+
}
465+
.set { ch_ip_bam_peaks }
454466

455467
FRIP_SCORE (
456-
ch_ip_peak
468+
ch_ip_bam_peaks
457469
)
458470
ch_versions = ch_versions.mix(FRIP_SCORE.out.versions.first())
459471

460-
ch_ip_peak
472+
// Create channel: [ meta, peaks, frip ]
473+
ch_ip_bam_peaks
461474
.join(FRIP_SCORE.out.txt, by: [0])
462-
.map { it -> [ it[0], it[2], it[3] ] }
463-
.set { ch_ip_peak_frip }
475+
.map {
476+
it ->
477+
[ it[0], it[2], it[3] ]
478+
}
479+
.set { ch_ip_peaks_frip }
464480

465481
MULTIQC_CUSTOM_PEAKS (
466-
ch_ip_peak_frip,
482+
ch_ip_peaks_frip,
467483
ch_peak_count_header,
468484
ch_frip_score_header
469485
)
@@ -502,31 +518,36 @@ workflow CHIPSEQ {
502518
ch_deseq2_clustering_multiqc = Channel.empty()
503519
if (!params.skip_consensus_peaks) {
504520
// Create channel: [ meta , [ peaks ] ]
505-
// Where meta = [ id:antibody, multiple_groups:true/false, replicates_exist:true/false ]
521+
// Where meta = [ id:antibody, multiple_groups:true/false, replicates_exist:true/false ]
506522
ch_macs2_peaks
507-
.map { meta, peak -> [ meta.antibody, meta.id.split('_')[0..-2].join('_'), peak ] }
523+
.map {
524+
meta, peak ->
525+
[ meta.antibody, meta.id.split('_')[0..-2].join('_'), peak ]
526+
}
508527
.groupTuple()
509528
.map {
510529
antibody, groups, peaks ->
511530
[
512531
antibody,
513532
groups.groupBy().collectEntries { [(it.key) : it.value.size()] },
514533
peaks
515-
] }
534+
]
535+
}
516536
.map {
517537
antibody, groups, peaks ->
518-
def meta = [:]
519-
meta.id = antibody
520-
meta.multiple_groups = groups.size() > 1
521-
meta.replicates_exist = groups.max { groups.value }.value > 1
522-
[ meta, peaks ] }
538+
def meta_new = [:]
539+
meta_new.id = antibody
540+
meta_new.multiple_groups = groups.size() > 1
541+
meta_new.replicates_exist = groups.max { groups.value }.value > 1
542+
[ meta_new, peaks ]
543+
}
523544
.set { ch_antibody_peaks }
524545

525546
MACS2_CONSENSUS (
526547
ch_antibody_peaks
527548
)
528549
ch_macs2_consensus_bed_lib = MACS2_CONSENSUS.out.bed
529-
ch_versions = ch_versions.mix(MACS2_CONSENSUS.out.versions)
550+
ch_versions = ch_versions.mix(MACS2_CONSENSUS.out.versions)
530551

531552
if (!params.skip_peak_annotation) {
532553
HOMER_ANNOTATEPEAKS_CONSENSUS (
@@ -542,29 +563,32 @@ workflow CHIPSEQ {
542563
ch_versions = ch_versions.mix(ANNOTATE_BOOLEAN_PEAKS.out.versions)
543564
}
544565

545-
// Create channel: [ val(meta), ip_bam ]
566+
// Create channel: [ antibody, [ ip_bams ] ]
567+
ch_ip_control_bam
568+
.map {
569+
meta, ip_bam, control_bam ->
570+
[ meta.antibody, ip_bam ]
571+
}
572+
.groupTuple()
573+
.set { ch_antibody_bams }
574+
575+
// Create channel: [ meta, [ ip_bams ], saf ]
546576
MACS2_CONSENSUS
547577
.out
548578
.saf
549-
.map { meta, saf -> [ meta.id, meta, saf ] }
550-
.set { ch_ip_saf }
551-
552-
ch_ip_control_bam
553-
.map { meta, ip_bam, control_bam -> [ meta.antibody, meta, ip_bam ] }
554-
.groupTuple()
555-
.map { it -> [ it[0], it[1][0], it[2].flatten().sort() ] }
556-
.join(ch_ip_saf)
579+
.map {
580+
meta, saf ->
581+
[ meta.id, meta, saf ]
582+
}
583+
.join(ch_antibody_bams)
557584
.map {
558-
it ->
559-
def fmeta = it[1]
560-
fmeta['id'] = it[3]['id']
561-
fmeta['replicates_exist'] = it[3]['replicates_exist']
562-
fmeta['multiple_groups'] = it[3]['multiple_groups']
563-
[ fmeta, it[2], it[4] ] }
564-
.set { ch_ip_bam }
585+
antibody, meta, saf, bams ->
586+
[ meta, bams.flatten().sort(), saf ]
587+
}
588+
.set { ch_saf_bams }
565589

566590
SUBREAD_FEATURECOUNTS (
567-
ch_ip_bam
591+
ch_saf_bams
568592
)
569593
ch_subreadfeaturecounts_multiqc = SUBREAD_FEATURECOUNTS.out.summary
570594
ch_versions = ch_versions.mix(SUBREAD_FEATURECOUNTS.out.versions.first())
@@ -590,13 +614,21 @@ workflow CHIPSEQ {
590614
ch_macs2_peaks.collect{it[1]}.ifEmpty([]),
591615
ch_macs2_consensus_bed_lib.collect{it[1]}.ifEmpty([]),
592616
{ "${params.aligner}/mergedLibrary/bigwig" },
593-
{ ["${params.aligner}/mergedLibrary/macs2",
594-
params.narrow_peak? '/narrowPeak' : '/broadPeak'
595-
].join('') },
596-
{ ["${params.aligner}/mergedLibrary/macs2",
597-
params.narrow_peak? '/narrowPeak' : '/broadPeak',
598-
'/consensus'
599-
].join('') }
617+
{
618+
[
619+
"${params.aligner}/mergedLibrary/macs2",
620+
params.narrow_peak ? '/narrowPeak' : '/broadPeak'
621+
]
622+
.join('')
623+
},
624+
{
625+
[
626+
"${params.aligner}/mergedLibrary/macs2",
627+
params.narrow_peak ? '/narrowPeak' : '/broadPeak',
628+
'/consensus'
629+
]
630+
.join('')
631+
}
600632
)
601633
ch_versions = ch_versions.mix(IGV.out.versions)
602634
}

0 commit comments

Comments
 (0)