You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

302 lines
7.2KB

  1. import "./tasks/mapping.wdl" as mapping
  2. import "./tasks/Metrics.wdl" as Metrics
  3. import "./tasks/Dedup.wdl" as Dedup
  4. import "./tasks/deduped_Metrics.wdl" as deduped_Metrics
  5. import "./tasks/Realigner.wdl" as Realigner
  6. import "./tasks/BQSR.wdl" as BQSR
  7. import "./tasks/Haplotyper_gVCF.wdl" as Haplotyper_gVCF
  8. import "./tasks/GVCFtyper.wdl" as GVCFtyper
  9. import "./tasks/split_gvcf_files.wdl" as split_gvcf_files
  10. import "./tasks/benchmark.wdl" as benchmark
  11. import "./tasks/multiqc.wdl" as multiqc
  12. import "./tasks/mendelian.wdl" as mendelian
  13. import "./tasks/merge_mendelian.wdl" as merge_mendelian
  14. import "./tasks/quartet_mendelian.wdl" as quartet_mendelian
  15. import "./tasks/fastqc.wdl" as fastqc
  16. import "./tasks/fastqscreen.wdl" as fastqscreen
  17. import "./tasks/qualimap.wdl" as qualimap
  18. import "./tasks/extract_multiqc.wdl" as extract_multiqc
  19. import "./tasks/D5_D6.wdl" as D5_D6
  20. import "./tasks/merge_family.wdl" as merge_family
  21. workflow {{ project_name }} {
  22. File inputSamplesFile
  23. Array[Array[File]] inputSamples = read_tsv(inputSamplesFile)
  24. String SENTIEON_INSTALL_DIR
  25. String SENTIEONdocker
  26. String FASTQCdocker
  27. String FASTQSCREENdocker
  28. String QUALIMAPdocker
  29. String BENCHMARKdocker
  30. String MENDELIANdocker
  31. String DIYdocker
  32. String fasta
  33. File ref_dir
  34. File dbmills_dir
  35. String db_mills
  36. File dbsnp_dir
  37. String dbsnp
  38. File screen_ref_dir
  39. File fastq_screen_conf
  40. File benchmarking_dir
  41. String project
  42. String disk_size
  43. String BIGcluster_config
  44. String SMALLcluster_config
  45. scatter (quartet in inputSamples){
  46. call mapping.mapping as mapping {
  47. input:
  48. SENTIEON_INSTALL_DIR=SENTIEON_INSTALL_DIR,
  49. group=quartet[2],
  50. sample=quartet[2],
  51. pl="ILLUMINAL",
  52. fasta=fasta,
  53. ref_dir=ref_dir,
  54. fastq_1=quartet[0],
  55. fastq_2=quartet[1],
  56. docker=SENTIEONdocker,
  57. disk_size=disk_size,
  58. cluster_config=BIGcluster_config
  59. }
  60. call fastqc.fastqc as fastqc {
  61. input:
  62. read1=quartet[0],
  63. read2=quartet[1],
  64. docker=FASTQCdocker,
  65. cluster_config=BIGcluster_config,
  66. disk_size=disk_size
  67. }
  68. call fastqscreen.fastq_screen as fastqscreen {
  69. input:
  70. read1=quartet[0],
  71. read2=quartet[1],
  72. screen_ref_dir=screen_ref_dir,
  73. fastq_screen_conf=fastq_screen_conf,
  74. docker=FASTQSCREENdocker,
  75. cluster_config=BIGcluster_config,
  76. disk_size=disk_size
  77. }
  78. call Metrics.Metrics as Metrics {
  79. input:
  80. SENTIEON_INSTALL_DIR=SENTIEON_INSTALL_DIR,
  81. fasta=fasta,
  82. ref_dir=ref_dir,
  83. sorted_bam=mapping.sorted_bam,
  84. sorted_bam_index=mapping.sorted_bam_index,
  85. sample=quartet[2],
  86. docker=SENTIEONdocker,
  87. disk_size=disk_size,
  88. cluster_config=BIGcluster_config
  89. }
  90. call Dedup.Dedup as Dedup {
  91. input:
  92. SENTIEON_INSTALL_DIR=SENTIEON_INSTALL_DIR,
  93. sorted_bam=mapping.sorted_bam,
  94. sorted_bam_index=mapping.sorted_bam_index,
  95. sample=quartet[2],
  96. docker=SENTIEONdocker,
  97. disk_size=disk_size,
  98. cluster_config=BIGcluster_config
  99. }
  100. call qualimap.qualimap as qualimap {
  101. input:
  102. bam=Dedup.Dedup_bam,
  103. bai=Dedup.Dedup_bam_index,
  104. docker=QUALIMAPdocker,
  105. cluster_config=BIGcluster_config,
  106. disk_size=disk_size
  107. }
  108. call deduped_Metrics.deduped_Metrics as deduped_Metrics {
  109. input:
  110. SENTIEON_INSTALL_DIR=SENTIEON_INSTALL_DIR,
  111. fasta=fasta,
  112. ref_dir=ref_dir,
  113. Dedup_bam=Dedup.Dedup_bam,
  114. Dedup_bam_index=Dedup.Dedup_bam_index,
  115. sample=quartet[2],
  116. docker=SENTIEONdocker,
  117. disk_size=disk_size,
  118. cluster_config=BIGcluster_config
  119. }
  120. call Realigner.Realigner as Realigner {
  121. input:
  122. SENTIEON_INSTALL_DIR=SENTIEON_INSTALL_DIR,
  123. fasta=fasta,
  124. ref_dir=ref_dir,
  125. Dedup_bam=Dedup.Dedup_bam,
  126. Dedup_bam_index=Dedup.Dedup_bam_index,
  127. db_mills=db_mills,
  128. dbmills_dir=dbmills_dir,
  129. sample=quartet[2],
  130. docker=SENTIEONdocker,
  131. disk_size=disk_size,
  132. cluster_config=BIGcluster_config
  133. }
  134. call BQSR.BQSR as BQSR {
  135. input:
  136. SENTIEON_INSTALL_DIR=SENTIEON_INSTALL_DIR,
  137. fasta=fasta,
  138. ref_dir=ref_dir,
  139. realigned_bam=Realigner.realigner_bam,
  140. realigned_bam_index=Realigner.realigner_bam_index,
  141. db_mills=db_mills,
  142. dbmills_dir=dbmills_dir,
  143. dbsnp=dbsnp,
  144. dbsnp_dir=dbsnp_dir,
  145. sample=quartet[2],
  146. docker=SENTIEONdocker,
  147. disk_size=disk_size,
  148. cluster_config=BIGcluster_config
  149. }
  150. call Haplotyper_gVCF.Haplotyper_gVCF as Haplotyper_gVCF {
  151. input:
  152. SENTIEON_INSTALL_DIR=SENTIEON_INSTALL_DIR,
  153. fasta=fasta,
  154. ref_dir=ref_dir,
  155. recaled_bam=BQSR.recaled_bam,
  156. recaled_bam_index=BQSR.recaled_bam_index,
  157. sample=quartet[2],
  158. docker=SENTIEONdocker,
  159. disk_size=disk_size,
  160. cluster_config=BIGcluster_config
  161. }
  162. }
  163. call GVCFtyper.GVCFtyper as GVCFtyper {
  164. input:
  165. ref_dir=ref_dir,
  166. SENTIEON_INSTALL_DIR=SENTIEON_INSTALL_DIR,
  167. fasta=fasta,
  168. vcf=Haplotyper_gVCF.vcf,
  169. vcf_idx=Haplotyper_gVCF.vcf_idx,
  170. project=project,
  171. docker=SENTIEONdocker,
  172. cluster_config=BIGcluster_config,
  173. disk_size=disk_size
  174. }
  175. call split_gvcf_files.split_gvcf_files as split_gvcf_files {
  176. input:
  177. gvcf=GVCFtyper.gvcf,
  178. docker=DIYdocker,
  179. project=project,
  180. cluster_config=SMALLcluster_config,
  181. disk_size=disk_size
  182. }
  183. Array[File] single_gvcf = split_gvcf_files.splited_vcf
  184. scatter (idx in range(length(single_gvcf))) {
  185. call benchmark.benchmark as benchmark {
  186. input:
  187. vcf=single_gvcf[idx],
  188. benchmarking_dir=benchmarking_dir,
  189. ref_dir=ref_dir,
  190. fasta=fasta,
  191. docker=BENCHMARKdocker,
  192. cluster_config=BIGcluster_config,
  193. disk_size=disk_size,
  194. }
  195. }
  196. call multiqc.multiqc as multiqc {
  197. input:
  198. read1_zip=fastqc.read1_zip,
  199. read2_zip=fastqc.read2_zip,
  200. txt1=fastqscreen.txt1,
  201. txt2=fastqscreen.txt2,
  202. zip=qualimap.zip,
  203. summary=benchmark.summary,
  204. cluster_config=SMALLcluster_config,
  205. disk_size=disk_size
  206. }
  207. call extract_multiqc.extract_multiqc as extract_multiqc {
  208. input:
  209. fastqc_qualimap=multiqc.fastqc_qualimap,
  210. fastqc=multiqc.fastqc,
  211. fastqscreen=multiqc.fastqscreen,
  212. hap=multiqc.hap,
  213. docker=DIYdocker,
  214. cluster_config=SMALLcluster_config,
  215. disk_size=disk_size
  216. }
  217. Boolean sister_tag = read_boolean(split_gvcf_files.sister_tag)
  218. Boolean quartet_tag = read_boolean(split_gvcf_files.quartet_tag)
  219. if (sister_tag) {
  220. call D5_D6.D5_D6 as D5_D6 {
  221. input:
  222. splited_vcf=split_gvcf_files.splited_vcf,
  223. project=project,
  224. docker=DIYdocker,
  225. cluster_config=SMALLcluster_config,
  226. disk_size=disk_size,
  227. }
  228. }
  229. if (quartet_tag) {
  230. call merge_family.merge_family as merge_family {
  231. input:
  232. splited_vcf=split_gvcf_files.splited_vcf,
  233. project=project,
  234. docker=DIYdocker,
  235. cluster_config=SMALLcluster_config,
  236. disk_size=disk_size,
  237. }
  238. Array[File] family_vcfs = merge_family.family_vcf
  239. scatter (idx in range(length(family_vcfs))) {
  240. call mendelian.mendelian as mendelian {
  241. input:
  242. family_vcf=family_vcfs[idx],
  243. ref_dir=ref_dir,
  244. fasta=fasta,
  245. docker=MENDELIANdocker,
  246. cluster_config=BIGcluster_config,
  247. disk_size=disk_size
  248. }
  249. call merge_mendelian.merge_mendelian as merge_mendelian {
  250. input:
  251. D5_trio_vcf=mendelian.D5_trio_vcf,
  252. D6_trio_vcf=mendelian.D6_trio_vcf,
  253. family_vcf=family_vcfs[idx],
  254. docker=DIYdocker,
  255. cluster_config=SMALLcluster_config,
  256. disk_size=disk_size
  257. }
  258. }
  259. call quartet_mendelian.quartet_mendelian as quartet_mendelian {
  260. input:
  261. project_mendelian_summary=merge_mendelian.project_mendelian_summary,
  262. project=project,
  263. docker=DIYdocker,
  264. cluster_config=SMALLcluster_config,
  265. disk_size=disk_size
  266. }
  267. }
  268. }