【发布时间】:2021-03-03 22:45:58
【问题描述】:
基本上,我有三个蛇形规则(除了规则全部)并且无法解决这个问题,尽管有检查点资源。
第一条规则是我开始使用的第一个也是唯一一个文件。它将有 x 个输出(数量因输入文件而异)。这些 x 输出中的每一个都需要在规则 2 中单独处理,这意味着规则 2 将运行 x 个作业。但是,这些作业中只有一些子集 y 会产生输出(软件只为通过某个阈值的输入写出文件)。所以,虽然 我希望这些输出中的每一个在作业 3 中作为单独的作业运行,我不知道规则 2 会产生多少文件。规则 3 也将运行 y 个作业,一个对应于规则 2 的每个成功输出。我有两个问题。首先是如何编写规则 3 的输入,不知道规则 2 会产生多少文件?第二个问题是,当输入文件没有相应数量的输出文件时,我如何“告诉”规则 2 已完成?如果我添加第四条规则,我想它会尝试在没有获得输出文件的作业上重新运行规则二,这将永远不会产生输出。也许我在设置检查点时遗漏了什么?
类似:
rule a:
input: file.vcf
output: dummy.txt
shell:"""
.... make unknown number of output files (x) x_1 , x_2, ..., x_n
"""
#run a separate job from each output of rule a
rule b:
input: x_1 #not sure how many are going to be inputs here
output: y_1 #not sure how many output files will be here
shell:"""
some of the x inputs will output their corresponding y, but others will have no output
"""
#run a separate job for each output of rule b
rule c:
input: y_1 #not sure how many input files here
output: z_1
【问题讨论】:
-
对我来说有些事情不是很清楚:你的规则 b 应该运行一次(有几个输入和几个输出),还是运行多次,每个可用输入一次?
-
我的印象是你的规则 a 应该是一个检查点,而不是输出一个虚拟文件,它应该输出一个目录。然后,下游规则必须通过等待检查点的输入函数找出可用的输入,然后探索其输出目录的内容。
-
感谢您的回复。第二条规则为每个输入运行一个作业。我想我可以做两个检查站?我很困惑如何将规则 1 设置为检查点来处理规则 2 的输出文件少于其运行的作业数量的问题。
标签: python algorithm workflow snakemake