首页 > 解决方案 > Snakemake 基于配置执行规则

问题描述

我希望能够编写一个工作流,以便我可以选择在 config.json 文件中运行哪些可选规则。例如,如果我有一个包含 2 个规则的 Snakefile,rule_a 和 rule_b,每个规则都有相同的输入但不同的输出:

rule_a:
  input: input.txt
  output: out_a.txt
  run: ...

rule_b:
  input: input.txt
  output: out_b.txt
  run: ...

我在 json 文件中有以下配置:

{
"run_a": "T",
"run_b": "F"
}

如何编写 Snakefile,以便在这种情况下仅运行 rule_a 而忽略 rule_b?

标签: snakemake

解决方案


由于 python 可以在 snakemake 脚本中使用,您可以使用 python 代码来识别需要创建哪些文件。

配置文件config.json

{
    "run_a": true,
    "run_b": false
}

Snakefile

configfile: "config.json"

if config['run_a']:
    target = 'out_a.txt'
elif config['run_b']:
    target = 'out_b.txt'


rule all:
    input:
        target

rule a:
  input: 'input.txt'
  output: 'out_a.txt'
  shell:
    "touch {output}"

rule b:
  input: 'input.txt'
  output: 'out_b.txt'
  shell:
    "touch {output}"

推荐阅读