【WDL】5. 实践与建议

WDL开发工具IDE介绍

语法校验:WOMtool

https://cromwell.readthedocs.io/en/stable/WOMtool/

脚本实践

应用示例

实践: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

posted @ 2022-05-11 23:59  生物信息与育种  阅读(232)  评论(0编辑  收藏  举报