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?

解决方法

由于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}"