pipeline/wdl/alignment.wdl

168 lines
4.5 KiB
Plaintext

#alignment
task bwa {
String name
String read1
String read2
String output_dir
String ref
command <<<
if [ ! -d ${output_dir}/alignment ];then
mkdir ${output_dir}/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 ${output_dir}/alignment/${name}.sorted.bam
samtools index ${output_dir}/alignment/${name}.sorted.bam
>>>
output {
String sorted_bam = "${output_dir}/alignment/${name}.sorted.bam"
}
}
#remove PCR duplicates
task markduplicates_genecore {
String name
String ref
String sorted_bam
String output_dir
command <<<
if [ ! -d ${output_dir}/alignment ];then
mkdir ${output_dir}/alignment
fi
gencore -i ${sorted_bam} \
-o ${output_dir}/alignment/${name}.rmdup.bam \
-r ${ref} \
-u UMI \
-j ${output_dir}/alignment/${name}_rmdup.json \
-h ${output_dir}/alignment/${name}_rmdup.html
samtools index ${output_dir}/alignment/${name}.rmdup.bam
>>>
output {
String rmdup_bam = "${output_dir}/alignment/${name}.rmdup.bam"
}
}
task markduplicates_picard {
String name
String ref
String sorted_bam
String output_dir
command <<<
if [ ! -d ${output_dir}/alignment ];then
mkdir ${output_dir}/alignment
fi
java -XX:+UseParallelGC -XX:ParallelGCThreads=2 -Xmx12G -jar $PICARD MarkDuplicates \
I=${sorted_bam} \
O=${output_dir}/alignment/${name}.rmdup.bam \
CREATE_INDEX=true \
M=${output_dir}/alignment/${name}.rmdup.metrics.txt \
R=${ref}
>>>
output {
String rmdup_bam = "${output_dir}/alignment/${name}.rmdup.bam"
}
}
# generater mpileup file
task generater_mpileup {
String name
String rmdupBam
String ref
String bed
String output_dir
command <<<
samtools mpileup -Bq 20 -Q 20 -f ${ref} -l ${bed} ${rmdupBam} -o ${output_dir}/alignment/${name}.pileup
>>>
output {
String pileup = "${output_dir}/alignment/${name}.pileup"
}
}
workflow alignment {
String tumor
String tumor_r1
String tumor_r2
String? normal
String? normal_r1
String? normal_r2
Boolean umi
String ref
String bed
String output_dir
scatter(name in [tumor, normal]) {
if (defined(name)) {
call bwa {
input:
name=name,
ref=ref,
output_dir=output_dir,
read1=if name==tumor then tumor_r1 else normal_r1,
read2=if name==tumor then tumor_r2 else normal_r2
}
if (name==tumor) {
if (umi) {
call markduplicates_genecore as tumor_markduplicates_genecore {
input:
name=name,
ref=ref,
output_dir=output_dir,
sorted_bam=bwa.sorted_bam,
}
}
if (!umi) {
call markduplicates_picard as tumor_markduplicates_picard {
input:
name=name,
ref=ref,
output_dir=output_dir,
sorted_bam=bwa.sorted_bam,
}
}
}
if (name==select_first([normal, 'None'])) {
call markduplicates_picard as normal_markduplicates_picard {
input:
name=name,
ref=ref,
output_dir=output_dir,
sorted_bam=bwa.sorted_bam,
}
}
}
}
output {
String tumor_sorted_bam = "${output_dir}/alignment/${tumor}.sorted.bam"
String tumor_rmdup_bam = "${output_dir}/alignment/${tumor}.rmdup.bam"
String tumor_pileup = "${output_dir}/alignment/${tumor}.pileup"
String normal_sorted_bam = "${output_dir}/alignment/${normal}.sorted.bam"
String normal_rmdup_bam = "${output_dir}/alignment/${normal}.rmdup.bam"
String normal_pileup = "${output_dir}/alignment/${normal}.pileup"
}
}