WDL是Broad Institute开发的一个方便搭建工作流的一种描述性语言,采用了类似yaml、json的语法格式。基本的WDL包括了五大块基本概念:workflow,task,call,command和output。其中workflow,task,call属于顶层组件,也是基础组件,一般一个完整的Workflow需要包含这三部分。
官方链接如下:https://github.com/openwdl/wdl
在流程上我们需要定义workflow、task形式如下:
task my_task {
[ input definitions ]
command { ... }
output { ... }
}
在task中我们定义了command、output,形式如下:
command {
java -jar myExecutable.jar \
INPUT=${input_file} \
OUTPUT=${output_basename}.txt
}
output {
File out = "${output_basename}.txt"
}
workflow形式:
workflow myWorkflowName {
call my_task
}
一个简单的示例:
# 一个简单的workflow
workflow helloworld{
call hello{}
}
task hello{
String name="world!"
command{
echo "hello" ${name}
}
}
在task中变量类型:
String
: 字符串类型,例如String name=“test”Float
: 浮点型数字,例如:3.1459Int
: 整型的数字, 例如:16Boolean
: 布尔类型,如 true、 false.File
: 文件类型的对象一个文件名命名的对象Array
: 数组,如 [A,B,C,D]Map
: 字典,如 {“color”: “blue”, “size”: “large”}Object
: 对象
WDL主要组件:
- basename
basename
用来得到一个路径的文件名 - call
call
用于workflow中调用task模块 - command
command
需要运行的命令,包含在task中 - meta
meta
可以写一些描述信息 - output
output
定义task的输出部分 - parmeter_meta
parameter_meta
用于存放参数的一些描述信息 - runtime
runtime
用来定义在不同的平台运行时的一些变量,如:本地、docker等 - task
task
任务模块 - variables
variables
用来定义一些变量 - workflow
workflow
生成相应的工作流模块
例如我们写一个GATK的HaplotypeCaller流程如下:
workflow worflow_HaplotypeCaller {
call haplotypeCaller
}
task haplotypeCaller {
File GATK
File RefFasta
File RefIndex
File RefDict
String sampleName
File inputBAM
File bamIndex
command {
java -jar ${GATK} \
-T HaplotypeCaller \
-R ${RefFasta} \
-I ${inputBAM} \
-o ${sampleName}.raw.indels.snps.vcf
}
output {
File rawVCF = "${sampleName}.raw.indels.snps.vcf"
}
}
然后我们利用WDL执行的引擎软件如:Cromwell、MiniWDL等都可以作为后端引擎。
我们用womtool(Cromwell套件)生成input文件(json)
java -jar womtool-52.jar inputs xxx.wdl > xxx.wdl.json
{
“worflow_HaplotypeCaller.haplotypeCaller.RefDict”: “File”,
“worflow_HaplotypeCaller.haplotypeCaller.inputBAM”: “File”,
“worflow_HaplotypeCaller.haplotypeCaller.RefIndex”: “File”,
“worflow_HaplotypeCaller.haplotypeCaller.GATK”: “File”,
“worflow_HaplotypeCaller.haplotypeCaller.sampleName”: “String”,
“worflow_HaplotypeCaller.haplotypeCaller.RefFasta”: “File”,
“worflow_HaplotypeCaller.haplotypeCaller.bamIndex”: “File”
}
然后我们定义好json中的变量文件后用Cromwell执行:
java -jar cromwell-52.jar run xxx.wdl -i xxx.wdl.json
整个WDL流程已经介绍完了,在我们常用的工作流程中用它搭建workflow是比我们直接用脚本写流程要便捷和标准化很多。
参考资料:
1.https://support.terra.bio/hc/en-us/articles/360037118252