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]