【发布时间】:2021-07-05 03:01:26
【问题描述】:
我想使用 Snakemake 对我的样本进行迭代映射。我事先不知道样本需要重新映射多少次。对于某些样品,它可能是 2-3 次,对于其他样品,可能是 10 次。如果我理解正确,Snakemake 不能使用 while 循环,但也许某种检查点是可能的?
基本上我想在这个循环中做的是每次调用我的 Illumina 读取的 fasta 序列,直到它不再改变。 (这是使用 bowtie2 > samtools view > samtools mpileup > bcftools call > bcftools view > bcftools index > bcftools 共识完成的)
我之前编写了一个 bash 脚本来执行此操作,但 Snakemake 确实可以加快此过程。在 bash 脚本中,我使用了我编写的 R 脚本,用于计算新旧 fasta 文件之间的差异数量。如果这个数字= 0,那么它可以停止循环,如果它不一样,那么它必须重新运行上面的步骤。理想情况下,它应该至少有 3 个循环,最多 15 个循环。
如果有人可以提供帮助,那就太好了! 提前致谢
【问题讨论】:
-
我不确定 snakemake 是否适合执行迭代逻辑,但如果是的话,它可能需要在给定迭代中发现的差异数量在文件名中进行编码。最后一轮将生成名称中带有“0”的文件。一个问题是规则应该能够根据其输出的命名方式提前知道其输入应如何命名,但“0”代不一定是“1”代的子代。
-
如果事先确定了迭代次数(比如15),那么你可以决定文件名中的“世代数”从14到0,而不考虑实际的差异数,但是如果在“0”代之前达到实际零,您将有无用的步骤。
-
确实,我确实设置了最大值(否则在某些情况下这永远不会结束)。目前我通过使用 for 循环(for in {0..15})构建它,如果循环至少运行了 5 次并且没有变化,则中断。
标签: loops iteration mapping bioinformatics snakemake