#alignment task bwa { String name String read1 String read2 String outputDir String ref command <<< if [ ! -d ${outputDir}/alignment ];then mkdir ${outputDir}/alignment fi bwa mem -R '@RG\tID:group_n\tLB:library_n\tPL:BGI\tPU:unit1\tSM:${name}' -M -t 10 ${ref} ${read1} ${read2} | \ samtools view -@ 10 -bh -o - | samtools sort -@ 10 -o ${outputDir}/alignment/${name}.sorted.bam samtools index ${outputDir}/alignment/${name}.sorted.bam >>> output { String sortedBam = "${outputDir}/alignment/${name}.sorted.bam" } } #remove PCR duplicates task markduplicates { String name String ref String sortedBam String outputDir command <<< if [ ! -d ${outputDir}/alignment ];then mkdir ${outputDir}/alignment fi java -XX:+UseParallelGC -XX:ParallelGCThreads=2 -Xmx12G -jar $PICARD MarkDuplicates \ I=${sortedBam} \ O=${outputDir}/alignment/${name}.rmdup.bam \ CREATE_INDEX=true \ M=${outputDir}/alignment/${name}.rmdup.metrics.txt \ R=${ref} >>> output { String rmdupBam = "${outputDir}/alignment/${name}.rmdup.bam" } } # generater mpileup file task generater_mpileup { String name String rmdupBam String ref String bed String outputDir command <<< samtools mpileup -Bq 20 -Q 20 -f ${ref} -l ${bed} ${rmdupBam} -o ${outputDir}/alignment/${name}.pileup >>> output { String pileup = "${outputDir}/alignment/${name}.pileup" } } workflow alignment { String tumor String tumor_r1 String tumor_r2 String? normal String? normal_r1 String? normal_r2 String ref String bed String outputDir scatter(name in [tumor, normal]) { if (defined(name)) { call bwa { input: name=name, ref=ref, outputDir=outputDir, read1=if name==tumor then tumor_r1 else normal_r1, read2=if name==tumor then tumor_r2 else normal_r2 } call markduplicates { input: name=name, ref=ref, outputDir=outputDir, sortedBam=bwa.sortedBam } call generater_mpileup { input: name=name, ref=ref, outputDir=outputDir, bed=bed, rmdupBam=markduplicates.rmdupBam } } } output { String tumor_sortedBam = "${outputDir}/alignment/${tumor}.sorted.bam" String tumor_rmdupBam = "${outputDir}/alignment/${tumor}.rmdup.bam" String tumor_pileup = "${outputDir}/alignment/${tumor}.pileup" String normal_sortedBam = "${outputDir}/alignment/${normal}.sorted.bam" String normal_rmdupBam = "${outputDir}/alignment/${normal}.rmdup.bam" String normal_pileup = "${outputDir}/alignment/${normal}.pileup" } }