欢迎关注"生信修炼手册"!
在GATK4
的best practice
中,不再像以前那样给出每个步骤对应的代码,而是直接给出了官方使用的pipeline。这些pipeline
采用WDL
进行编写。
WDL
是一种流程编写语言,没有太多复杂的逻辑和语法,入门简单。首先看一个hello world
的例子
workflow myWorkflow {
call myTask
}
task myTask {
command {
echo "hello world"
}
output {
String out = read_string(stdout())
}
}
对于一个WDL
脚本而言,有以下5个核心结构
workflow
task
call
command
output
每个脚本包含1个workflow
, workflow
由多个task
构成。 在workflow
中,通过call
调用对应的task
。每个task
在workflow
代码块之外单独定义。
task
代表任务,读取输入文件,执行相应命令,然后输出。command
中对应的就是执行的命令,比如一条具体的gatk的命令,output
指定task
的输出值。可以将task
理解为编程语言中的函数,每个函数读取输入的参数,执行代码,然后返回,command
对应执行的具体代码,output
对应返回值。
在WDL
中,也是可以传递参数的。task
和workflow
中的写法不同
1. task 中的参数
下面的示意图中,task 有3个输入的参数,文件类型的ref
,in
和字符串类型的id
。 在command
中,通过${ref}
这种格式访问变量的值