WDL - 指定输入

在WDL脚本中为命令指定输入变量的值(例如文件名和参数)的最简单方法是对它们进行硬编码,即在脚本本身中编写它们。但是,这样做会迫使您每次要在新的一批数据上运行脚本时都要制作一个新副本并编辑输入-这破坏了首先设置管道脚本的优势。

更好的方法是为要在运行中自定义的输入变量指定所有值,以便在JSON文件中运行(结构化文本格式有点像XML,但更好-当然更具可读性)。然后,您要做的就是为要通过管道运行的每一批新数据创建一个新的输入文件。执行引擎将在适当的情况下使用该JSON文件来填充脚本中命令的输入值。

尽管如此,从表面上看,您可能会认为将输入的JSON文件放在一起(具体来说,正确地构造它,并且不要忘记任何命令的输入)将是一项繁琐和/或艰巨的任务,尤其是在仅命令行的世界中没有点击式GUI。

但是不要害怕!帮助随时可用。WDL带有实用程序功能(在 wdltool 软件包中),该功能将解析您的WDL脚本并自动生成一个模板JSON文件,其中包含适当的输入文件和参数定义。然后,您所需要做的就是给定管道运行中使用的实际值填充文件的副本。准备好在选定的执行引擎上运行脚本时,只需将输入文件与脚本一起提供。

要为WDL脚本生成输入模板,只需inputs在脚本上调用wdltool 函数:

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

这将创建一个名为的文件myWorkflow_inputs.json ,该文件 按照以下模式列出脚本中所有任务的所有输入:

{
    "<workflow name>.<task name>.<variable name>": "<variable type>"
}

为特定运行定制输入文件

每次您要对一些新数据或使用一些不同参数运行脚本时,只需在文本编辑器中打开此文件(或更好的副本),然后用所需的值替换冒号右侧的部分即可。

如果您想知道,原始模板中的<variable type>只是用来提醒您任务希望看到的变量类型。本着同样的精神,我们建议您在输入文件中填写文件名和参数值时,给您的任务和变量起一个有意义的名字。否则,您将发现自己不得不经常引用管道脚本本身,因为不可能在JSON文件中添加注释。

假设 myWorkflow.wdl 脚本描述了名为的工作流程 myWorkflowName。该工作流程包括一个名为的任务stepA ,该任务 需要两个输入,一个名为的文件 input_file 和一个名为的字符串 sample_name。上面的命令生成的输入模板如下所示:

{
    "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"
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值