WDL

WDL (一个workflow description language)+ Cromwell(an execution engine that can run WDL scripts)是目前可以更好使用GATK的一套工具。

阿里云批量计算:https://help.aliyun.com/document_detail/110173.html

主要组成

  • workflow, task and call。
  • workflow在顶层,用calls去执行tasks。tasks在workflow模块外被定义。
  • 变量:有2种不同层次的variables,一种存在于task,一种存在于整个workflow。variable也可以从一个task传递到下一个task

workflow

workflow myWorkFlowName {
    call task_A
    call task_B
}
task task_A{...}
task task_B{...}

task

task task_A {
    File ref
    File in
    String id
    command {
      do_stuff R=${ref} I=${in} O=${id}.ext
    }
    runtime{
    docker: "ubuntu:latest"
    memory: "2GB"
    }
    output {
      File out="${id}.ext"
    }
}
  • 变量:变量需要定义其类型,主要有File, String, Array[]。在command中引用需要${var}。
  • command : 定义运行的命令
  • output: 定义输出的变量和文件
  • runtime: 定义运行的环境

call

call是通过workflow调用task。若需要输入,通过{input:}

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
    }
}

任务调度: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}
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}

你可能感兴趣的:(WDL)