GATK的pipeline使用WDL進行編寫java
WDL是一種流程管理語言,內置的支持並行,適合編寫pipelinejson
運行wdl腳本須要兩步:第一步編輯參數列表對應的json文件,第二步直接運行Cromwell.jarspa
egcode
workflow helloWorld{ call myTask; } task myTask{ commond{ echo "hello world" } output { String out = read_string(stdout()) } }
對於一個WDL腳本,有5個核心結構:blog
1,workflowip
2, task:表明任務,讀取輸入文件,執行相應的commond,而後輸出output。task中能夠有參數。input
3, callworkflow
4, commondstring
5, outputpip
一個腳本包括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]