GATK --- wdl 语言

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]

原文地址:https://www.cnblogs.com/lyyao/p/9799280.html