首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为特定版本的shell调用的软件编写规则?(例如Samtools 1.3.1和0.1.18)

如何为特定版本的shell调用的软件编写规则?(例如Samtools 1.3.1和0.1.18)
EN

Stack Overflow用户
提问于 2017-08-03 02:20:25
回答 1查看 65关注 0票数 1

思考如何解释一个管道,它可以使用需要(稍微)不同的shell调用的软件版本?

有时,使用康达在不同版本之间切换时,shell调用是不同的,例如Samtools 0.1.18和Samtools 1.3.1。对前缀需要不同的格式设置。

我想了三种方法,并正在寻找更多的建议:

  1. 我将在YAML中添加一个配置变量,使用它设置版本号。有一个条件,以便只包含匹配的版本规则。类似于我使用软件选择标志这里。的方式。
  2. 我将在规则中进行版本检测,并相应地更改shell调用。在上面的例子中,唯一的区别是添加了'-T‘参数。这很简单,但我担心最终我会遇到一种情况,那就是它不仅仅是一个额外的论点。
  3. 编写完全独立的规则,将版本放在规则名称中,让用户负责选择正确的版本。这将不可避免地引起歧义冲突,但我可以处理这些冲突。

反射:我不相信嵌套条件是最好的方法,因为它使维护变得更加困难,而且它实际上也没有那么优雅。在规则中进行检测并没有那么糟糕,但我不喜欢将控制流推入规则的想法(现在它已经从我的管道规则中删除了)。我想避免制造歧义冲突。

我缺少支持功能吗?起初我以为是这个Snakemake“版本”指令,但实际上不是我想要的。要么就是我错过了如何利用它。

有什么想法?

辅助文件

Samtools 1.3.1

代码语言:javascript
复制
 (CentOS5-Compatible) [tboyarski@login3 bin]$ ./samtools sort
 Usage: samtools sort [options...] [in.bam]
 Options:
   -l INT     Set compression level, from 0 (uncompressed) to 9 (best)
   -m INT     Set maximum memory per thread; suffix K/M/G recognized [768M]
   -n         Sort by read name
   -o FILE    Write final output to FILE rather than standard output
   -T PREFIX  Write temporary files to PREFIX.nnnn.bam
   -@, --threads INT
              Set number of sorting and compression threads [1]
       --input-fmt-option OPT[=VAL]
                Specify a single input file format option in the form
                of OPTION or OPTION=VALUE
   -O, --output-fmt FORMAT[,OPT[=VAL]]...
                Specify output format (SAM, BAM, CRAM)
       --output-fmt-option OPT[=VAL]
                Specify a single output file format option in the form
                of OPTION or OPTION=VALUE
       --reference FILE
                Reference sequence FASTA FILE [null]

1.3.1 ->配置“samtools”+‘sort -no -m’+ str(config"sortMem") +‘- -T’+ str(log.stdErr)

Samtools 0.1.18

代码语言:javascript
复制
(CentOS5-Compatible) [tboyarski@login3 condaENV]$ samtools sort
Usage: samtools sort [-on] [-m <maxMem>] <in.bam> <out.prefix>

0.1.18 ->配置“samtools”+‘sort -no -m’+ str(config"sortMem") +‘-’+ str(log.stdErr)

区别就在str(log.stdErr)之前的'-T‘。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-04 09:10:42

我将选择选项2,使用工具版本作为通配符:您将在输出文件路径中使用它,这将增强文档,并且如果您希望获得与不同版本的工具对应的结果,将避免麻烦。

您可以使用通配符函数作为params来确定要传递给shell的部分甚至所有命令。如果没有生成整个命令,还可以使用params中的一个函数来选择正确的工具。

代码语言:javascript
复制
TOOL_VERSIONS = config["tool_versions"]


rule all:
    expand("tool_results/{tool_version}/tool_output", tool_version=TOOL_VERSIONS)


rule previous_rule: # I skip this part


def version2tool(wildcards):
    if float(wildcards.tool_version) <= 0.1.18:
        return "/usr/bin/tool"
    else:
        return "/usr/local/bin/tool"


def tool_version2options(wildcards):
    if float(wildcards.tool_version) <= 0.1.18:
        return "-"
    else:
        return "--T"


rule apply_tool:
    input:
        rules.previous_rule.output
    output:
        "tool_results/{tool_version}/tool_output"
    params:
        tool = version2tool,
        tool_options = tool_version2options
    shell:
        """
        {params.tool} {params.tool_options} {input} > {output}
        """

以上假设您的配置文件中有所需的版本:

代码语言:javascript
复制
tool_versions : ["0.1.18", "1.3.1"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45473767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档