WDL开发工具IDE介绍
-
Vscode插件:推荐
语法校验:WOMtool
https://cromwell.readthedocs.io/en/stable/WOMtool/
脚本实践
应用示例
-
2020,Nature Methods,Cumulus provides cloud-based data analysis for large-scale single-cell and single-nucleus RNA-seq:https://cumulus.readthedocs.io/en/stable/
-
菌株基因组数据库(gcType)2021,NAR:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7778895/
-
目前Broad已经将GATK best prctice pipeline按WDL脚本发布
-
Broad子项目Gtex流程也采用WDL脚本发布
实践:WES简易流程编写
从fastq质控到call SNP的流程?
-
要点1:在WDL中添加判断语句,使数据达到某一标准后才执行bwa及后续步骤(fastp会输出fastq评价结果);
-
要点2:bam index(samtools index),输出哪种类型的结果?
-
要点3:如何实现多样本运行及vcf合并?
一些建议
程序粒度的切分
-
基于Docker平台在作业运行中,涉及镜像的拉取,因此在编写流程时,尽量避免镜像重复使用;
-
但把所有软件安装在一个镜像中会使得计算节点的资源占用过高;
-
如果在command中使用管道,需用set -o pipefail;
-
在task command中加入退出输出有助于排查错误原因。
输入输出问题
-
做到凡是task或workflow,必有输出(易排错);
-
当流程中有分支时,应合理应用WDL自带函数,保证流程的弹性;
-
合理使用select_first函数。
合理使用sub-workflow
-
使用子流程,不但可以保证代码可读性,还可更好地实现代码复用;
-
但前提是,需要对输入输出有较好的命名规则。
一些问题
- WDL作为语法标准存在多种解析器,Cromwell作为其解析器的一种,对WDL官方语法支持不全面。如scatter嵌套(Cromwell支持,但官方文档中没有)。
# can do this in cromwell
workflow foo{
Map[String, Int] map
scatter(pair in map){
String key = pair.left
Int value = pair.right
}
output{
# automatically gathered from inside the scatter:
Array[String] keys = key
Array[Int] values = value
}
}
-
WDL应用场景还有一定限制(并非WDL本身额外难题,而是一些主流应用还在过渡期),如CellRanger,Pacbio的一系列应用。
-
尽量充分的注释,以保证代码可维护性。
参数的注释:
{"## wgs.bam": "/path/to/sample.bam"}
往期:
【WDL】1. 语言介绍
【WDL】2. 基础结构
【WDL】3. 变量类型
【WDL】4. 内置函数
Ref
http://www.xtaohub.com/WDL-Intro/WDL-lesson5.html
http://www.xtaohub.com/WDL-Intro/WDL-lesson6.html
网友评论