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