• 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]

  • 相关阅读:
    Java最常见的面试题:模块十一
    Java最常见的面试题:模块九和模块十
    Java最常见的面试题:模块八
    Java最常见的面试题:模块七
    【leetcode】跳跃游戏
    【leetcode】字母异位词分组
    【C++】STL各容器的实现,时间复杂度,适用情况分析
    【C++】如何使用GCC生成动态库和静态库
    【C++】C++中基类的析构函数为什么要用virtual虚析构函数?
    【leet-code】接雨水
  • 原文地址:https://www.cnblogs.com/lyyao/p/9799280.html
Copyright © 2020-2023  润新知