GATK的pipeline使用WDL进行编写
WDL是一种流程管理语言,内置的支持并行,适合编写pipeline
运行wdl脚本需要两步:第一步编辑参数列表对应的json文件,第二步直接运行Cromwell.jar
eg
workflow helloWorld{ call myTask; } task myTask{ commond{ echo "hello world" } output { String out = read_string(stdout()) } }
对于一个WDL脚本,有5个核心结构:
1,workflow
2, task:代表任务,读取输入文件,执行相应的commond,然后输出output。task中可以有参数。
3, call
4, commond
5, output
一个脚本包括1个workflow,一个workflow由多个task构成,并在workflow中通过call调用。每个task在workflow代码块之外单独定义。包括多个commond
如:task中的参数:
task task_1{ File ref File in String id commond{ do_stuff R = ${ref} I=${in} O=${id}.ext } output{ File out = "${id}.ext" } }
workflow 中的参数,传递参数给task时,直接传变量名
task 之间具有多种关系。理论上每个task 只可以调用1次,若调用多次,需要借助task alias。例如:
workflow taskAlias{ File firstInput File secondInput call stepA as firstSample { input: in=firstInput } call stepA as secondSample{ input: in = secondInput } call stepB{input: in=firstSample.out} call stepC{input: in=secondSample.out} } task stepA{ File in commond{ programA I=${in} O=outputA.ext} output{File out="outputA.ext"} } task stepB{ File in commond{ programA I=${in} O=outputB.ext} output{File out="outputB.ext"} } task stepA{ File in commond{ programA I=${in} O=outputC.ext} output{File out="outputC.ext"} }
运行WDL脚本,需要:
1,cromwell.jar
2,womtools.jar
第一步是得到输入的参数列表:用json格式存储,这一步知识一个模板,需要编辑这个文件,将对应的参数替换成实际需要的参数
java -jar womtools.jar inputs myWorkflow.wdl > myWorkflow_inputs.json
第二步,运行脚本
java -jar Cromwell.jar run myWorkflow.wdl -inputs myWorkflow_inputs.json
[转载:https://www.jianshu.com/p/42f377e20ff7]