我有一个相当复杂的蛇形生物信息学工作流程,由>;200条规则组成。它基本上是从一组FASTQ文件开始的,从中可以推断出变量,如下所示:
(WC1, WC2, WC3, WC4) = glob_wildcards(FASTQPATH + "{wc1}_{wc2}_{wc3}_{wc4}.fastq.gz")
然后展开这些文件以生成目标文件,例如(为了简洁起见,我跳过了中间规则):
rule all:
expand("mappings/{wc1}_{wc2}_{wc3}_{wc4}.bam", wc1=WC1, wc2=WC2, wc3=WC3, wc4=WC4),
在项目的整个过程中,元数据会不断发展,需要添加通配符,例如wc5
:
(WC1, WC2, WC3, WC4, WC5) = glob_wildcards(FASTQPATH + "{wc1}_{wc2}_{wc3}_{wc4}_{wc5}.fastq.gz")
这将导致手动编辑约200个工作流规则,以符合新的输入。我想知道社区中是否有人提出了一个更优雅、更简单的解决方案(也许使用输入函数?)或者这仅仅是一个我们都必须面对的障碍?你知道吗
提前谢谢
我有一个用于ChIP seq数据的工作流,我的fastq文件以MARK\u格式命名_复制.fastq.gz例如H3K4me3\u Liver\u B。快速Q.gz. 对于我的许多规则,我不需要为标记、组织和复制使用单独的通配符。我可以这样写规则:
然后,对于需要有多个输入的规则,可能是通过复制组合在一起,或者在所有组织中执行某些操作,我有一个名为“libraries”的函数,它返回具有特定条件的库列表。例如,库(mark=“H3K4me3”)将返回该标记的所有库,或者库(tissue=“Liver”,replicate=“A”)将返回该特定组织样本中所有标记的库。我可以用它来编写需要组合多个库的规则,例如:
为了解决一些奇怪或模棱两可的规则问题,我发现像这样设置一些通配符约束很有帮助:
希望您可以将这些想法应用到自己的工作流中。你知道吗
我认为@Colin在这里走的是正确的(最像蛇一样的)道路。但是,如果要使用通配符(例如在日志中)或它们指定某些参数,则可以尝试用变量替换通配符,并将其插入规则的输入和输出中:
这种改变为或多或少的通配符的方法相对容易。你知道吗
免责声明我还没有测试过这些方法是否有效:)
相关问题 更多 >
编程相关推荐