GATK Cromwell +WDL学习

WDL (一个workflow description language)+ Cromwell(an execution engine that can run WDL scripts)是目前可以更好使用GATK的一套工具。这里学习wdl的快速入门教程
我这里使用sublime text3,因此设置新的wdl对应的高亮。根据package control 下载package control包。在sublime text里Preference-> package control -> install package -> wdl syntax 安装。

WDL
Base structure
  • Top-level components: workflow, task and call
    workflow在顶层,用calls去执行tasks。tasks在workflow模块外被定义。
workflow myWorkFlowName {
    call task_A
    call task_B
}
task task_A{...}
task task_B{...}
  • Core task-level components: command and output
    task的核心成分:command被运行,output明确指出哪一部分命令组成了输出。
task task_A {
    command {...}
    output {...}
}
Add Variables

有2种不同层次的variables,一种存在于task,一种存在于整个workflow。variable也可以从一个task传递到下一个task。
- Adding task-level variables

task task_A {
    File ref
    File in
    String id
    command {
    do_stuff R=${ref} I=${in} O=${id}.ext
    }
    output {
    File out="${id}.ext"
    }
}
  • Adding workflow-level variables
workflow myWorkflowName {
    File my_ref
    File my_input
    String name
    call task_A {
    input: ref=my_ref, in=my_input, id=name
    }
    call task_B {
    input: ref=my_ref, in=task_A.out
    }
}
task task_A{...}
task task_B{...}
Adding Plumbing

simple connections linear or simple branching and merging
Switching and iterating logic switch between alternate pathways and iterate over sets of data, either in series or in parallel. scatter-gather parallelism
Efficiency through code re-use
- Linear Chaining
在call里面就要开始定义前一个的结果

call stepB {input: in=stepA.out}
call stepC {input: in=stepB.out}
  • Multi-input/Multi-output
    这里写图片描述
call stepC {input: in1=stepB.out1, in2=stepB.out2}
  • Branch & Merge
    这里写图片描述
call stepB {input: in=stepA.out}
call stepC {input: in=stepA.out}
call stepD {input: in1=stepB.out, in2=stepC.out}
  • Scatter-Gather
    这里写图片描述
    Parallelism即平行可以使得任务更快,而非顺序进行。我们使用了基于WDL standard library的scatter,会产生可平行的任务(成为一列Input,array),并且会输出结果(也是array)。Scatter这个过程是外显的(explicit),而gather这个过程是不外显的(implicit)。
Array[file] inputFiles
    sactter (oneFile in inputFiles) {
    call stepA {input: in=oneFile}
    }
    call stepB {input: files=stepA.out}
  • Task Aliasing
    这里写图片描述
    如果有一些copy-paste的任务,可以用task aliasing避免重复粘贴命令。
call stepA as firstSample {input: in=firstInput}
call stepA as secondSample {input: in=secondInput}
call stepB {input: in=firstSample.out}
call stepB {input: in=secondSample.out}
Validate Syntax

validate于脚本:

$java -jar wdltool.jar validate myWorkflow.wdl

例子:error if a call references a task that doesn’t exist:

$java -jar wdltool.jar validate myWorkflow.wdl
ERROR: Call references a taks (BADps) that doesn't exist (line 22, col 8)

    call BADps
         ^
Specify Inputs

相比于直接输入input,这里可以用JSON文件为所有输入变量规定值。
- Generating the template JSON
我们可以用wdltool inputs函数:

java -jar wdltool.jar inputs myWorkflow.wdl > myWorkflow_inputs.json

结果:

{
    "<workflow name>.<task name>.<variable name>": "<variable type>"
}
  • Customizing the inputs file for a particular run
    要注意<variable type>在最初得到的template里只是提醒变量的类型,在实际使用中要改为相应的文件或者名字。但是,也要取名比较好辨认,这样避免回到脚本里对看究竟是哪个变量。比如:
{
    "myWorkflowName.stepA.input_file": "File"
    "myWorkflowName.stepA.sample_name": "String"
}

那么,如果一个文件叫input.bam,样本名字叫NA12878,那么我们应该对应修改如下:

{
    "myWorkflowName.stepA.input_file": "~/path/to/input.bam"
    "myWorkflowName.stepA.sample_name": "NA12878"
}
Execute!
  • Cromwell
    使用Cromwell。Cromwell是一个开源的由Java编写支持WDL的执行工具。可以在3个平台支持支持WDL的执行:本地机器,本地服务器集群,云平台。需要java 8
    基本命令:
java -jar cromwell.jar <action> <parameters>
  • Running WDL on Cromwell locally
java -jar Cromwell.jar run myWorkflow.wdl --inputs myWorkflow_inputs.json

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值