snakemake - 从集群提交包装器访问配置变量

snakemake - accessing config variables from cluster submission wrapper

我正在使用 snakemake --cluster "python qsub_script.py" 的集群提交包装器脚本。我需要传递一个取自 config['someVar'] 的全局变量。这应该适用于所有规则。我可以将它添加到每个规则的 params,然后使用 job_properties['params']['someVar'] 访问它,但这可能不是最佳解决方案。有没有办法从提交包装器访问 config?简单地使用 config['someVar'] 给我一个 NameError.

如果那不可能,你能推荐一个替代方案吗?我怀疑使用配置文件可能会有帮助,但无法弄清楚它如何与提交包装器交互。

问题陈述有点宽泛,因此下面的解决方案可能不是最佳解决方案,但它应该可以满足您的需求。具体来说,下面的代码允许修改工作流中的每个规则。

这是一个可重现的演示:

rule all:
    input:
        "a.txt",
        "b.txt",


rule a:
    output:
        "a.txt",
    shell:
        """
        echo {params.val} > {output}
        """


rule b:
    output:
        "b.txt",
    shell:
        """
        echo {params.val} > {output}
        """

# this allows iteration across every rule using python syntax
# so complex business logic can be implemented
for n, r in enumerate(workflow.rules):
    r.set_params(val=n)

对于您的特定 use-case,最后一段代码可能如下所示:

for r in workflow.rules:
    r.set_params(someVar=config["someVar"])

其中 config 字典是在工作流中使用 configfile 定义的:

configfile: "config.yaml"