1+ include { FASTQ_ALIGN_BWA } from ' ../fastq_align_bwa/main'
2+ include { PICARD_ADDORREPLACEREADGROUPS } from ' ../../../modules/nf-core/picard/addorreplacereadgroups/main'
3+ include { PICARD_MARKDUPLICATES } from ' ../../../modules/nf-core/picard/markduplicates/main'
4+ include { SAMTOOLS_INDEX } from ' ../../../modules/nf-core/samtools/index/main'
5+
6+ workflow FASTQ_ALIGN_DEDUP_BWAMEM {
7+
8+ take :
9+ ch_reads // channel: [ val(meta), [ reads ] ]
10+ ch_fasta // channel: [ val(meta), [ fasta ] ]
11+ ch_fasta_index // channel: [ val(meta), [ fasta index ] ]
12+ ch_bwamem_index // channel: [ val(meta), [ bwam index ] ]
13+ skip_deduplication // boolean: whether to deduplicate alignments
14+ use_gpu // boolean: whether to use GPU or CPU for bwamem alignment
15+
16+ main :
17+
18+ ch_alignment = Channel . empty()
19+ ch_alignment_index = Channel . empty()
20+ ch_flagstat = Channel . empty()
21+ ch_stats = Channel . empty()
22+ ch_picard_metrics = Channel . empty()
23+ ch_multiqc_files = Channel . empty()
24+ ch_versions = Channel . empty()
25+
26+ FASTQ_ALIGN_BWA (
27+ ch_reads,
28+ ch_bwamem_index,
29+ true , // val_sort_bam hardcoded to true
30+ ch_fasta
31+ )
32+ ch_alignment = ch_alignment. mix(FASTQ_ALIGN_BWA . out. bam)
33+ ch_alignment_index = ch_alignment. mix(FASTQ_ALIGN_BWA . out. bai)
34+ ch_stats = ch_alignment. mix(FASTQ_ALIGN_BWA . out. stats) // channel: [ val(meta), path(stats) ]
35+ ch_flagstat = ch_alignment. mix(FASTQ_ALIGN_BWA . out. flagstat) // channel: [ val(meta), path(flagstat) ]
36+ ch_idxstats = ch_alignment. mix(FASTQ_ALIGN_BWA . out. idxstats) // channel: [ val(meta), path(idxstats) ]
37+ ch_versions = ch_versions. mix(FASTQ_ALIGN_BWA . out. versions. first())
38+
39+ if (! skip_deduplication) {
40+ /*
41+ * Run Picard AddOrReplaceReadGroups to add read group (RG) to reads in bam file
42+ */
43+ PICARD_ADDORREPLACEREADGROUPS (
44+ ch_alignment,
45+ ch_fasta,
46+ ch_fasta_index
47+ )
48+ ch_versions = ch_versions. mix(PICARD_ADDORREPLACEREADGROUPS . out. versions. first())
49+
50+ /*
51+ * Run Picard MarkDuplicates with the --REMOVE_DUPLICATES true flag
52+ */
53+
54+ PICARD_MARKDUPLICATES (
55+ PICARD_ADDORREPLACEREADGROUPS . out. bam,
56+ ch_fasta,
57+ ch_fasta_index
58+ )
59+ ch_versions = ch_versions. mix(PICARD_MARKDUPLICATES . out. versions. first())
60+
61+ /*
62+ * Run samtools index on deduplicated alignment
63+ */
64+ SAMTOOLS_INDEX (
65+ PICARD_MARKDUPLICATES . out. bam
66+ )
67+ ch_alignment = PICARD_MARKDUPLICATES . out. bam
68+ ch_alignment_index = SAMTOOLS_INDEX . out. bai
69+ ch_picard_metrics = PICARD_MARKDUPLICATES . out. metrics
70+ ch_versions = ch_versions. mix(SAMTOOLS_INDEX . out. versions. first())
71+ }
72+
73+ /*
74+ * Collect MultiQC inputs
75+ */
76+ ch_multiqc_files = ch_picard_metrics. collect{ meta, metrics -> metrics }
77+ .mix(ch_flagstat. collect{ meta , flagstat -> flagstat })
78+ .mix(ch_stats. collect{ meta , stats -> stats })
79+ .mix(ch_idxstats. collect{ meta , stats -> stats })
80+
81+ emit :
82+ bam = ch_alignment // channel: [ val(meta), [ bam ] ]
83+ bai = ch_alignment_index // channel: [ val(meta), [ bai ] ]
84+ samtools_flagstat = ch_flagstat // channel: [ val(meta), [ flagstat ] ]
85+ samtools_stats = ch_stats // channel: [ val(meta), [ stats ] ]
86+ samtools_index_stats = ch_idxstats // channel: [ val(meta), [ idxstats ] ]
87+ picard_metrics = ch_picard_metrics // channel: [ val(meta), [ metrics ] ]
88+ multiqc = ch_multiqc_files // channel: [ *{html,txt} ]
89+ versions = ch_versions // channel: [ versions.yml ]
90+ }
0 commit comments