并行化蛇形规则

时间:2018-06-13 02:20:43

标签: python snakemake

对不起,如果这是一个天真的问题,但我仍然试图围绕Snakemake的复杂问题。

我有一个包含许多文件的目录,我想并行应用规则(即我想向集群提交相同的脚本,为每个提交指定不同的输入文件)。

我首先尝试使用expand作为输入文件,但这只会导致一个作业提交:

CHROMS = [str(c) for c in range(1, 23)] + ["X"]
rule vep:
    input:
        expand("data/split/chr{chrom}.vcf", 
               chrom=CHROMS)
    output:
        expand("data/vep/split/chr{chrom}.ann.vcf",
               chrom=CHROMS)
    shell:
        "vep "
        "{input} "
        "{output}"

这里有替代方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

目前,您的工作流程确实包含应用" vep"规则只执行一次,它以所有输入和输出作为参数执行ccze。我不知道vep是如何运作的,但它可能会失败或者没有达到预期的效果。

您可能应该编写规则的输入和输出而不进行扩展,并使用" all"来驱动它。规则,进行扩展:

vep

生成" all"的所需输入规则,snakemake将确定需要应用" vep"的次数和方式(即CHROMS = [str(c) for c in range(1, 23)] + ["X"] rule all: input: expand("data/vep/split/chr{chrom}.ann.vcf", chrom=CHROMS) rule vep: input: "data/split/chr{chrom}.vcf" output: "data/vep/split/chr{chrom}.ann.vcf" shell: "vep " "{input} " "{output}" 通配符的值是多少)。规则。

一定要把"全部"所有其他规则之前的规则。