loops - 执行snakemake进行迭代映射
问题描述
我想使用 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 个循环。
如果有人可以提供帮助,那就太好了!提前致谢
解决方案
由于您的步骤序列bowtie2 > samtools view > samtools mpileup ...
必须连续完成,即对于给定的输入 fastq 不能并行化,我想我会按照您在 bash 脚本中描述的操作。类似的东西,主要是伪代码:
rule all:
input:
['a.consensus.fastq', 'b.consensus.fastq', ...]
rule iterative_mapping:
input:
fq= '{sample}.fastq',
output:
fq= '{sample}.consensus.fastq',
run:
i = 0
while i < 15 and fastq has changed:
shell("bowtie2 > samtools view ...")
shell("check_fastq_has_changed.R ...")
这将为不同{sample}
的 s 并行执行迭代映射。是否有意义?
推荐阅读
- asp.net-core - 如何在 ABP.IO 框架中实现用户忘记密码
- python - Websocket Lambda Python 和 Angular
- javascript - 在现有状态转换期间无法更新(例如在 `render` 中)。渲染方法应该是 props 和 state 的纯函数。在 Index.js 中
- android - 在 Android 11 中在后台访问麦克风/摄像头
- lua - 在 Splash 中使用 Lua 脚本访问 google.com 的 DOM
- sql-server - 将不带破折号和冒号的 varchar 日期时间转换为带破折号和冒号的 varchar 日期时间
- reactjs - 更改选定项目的样式组件的样式
- python - odeint:无法根据规则“安全”将数组数据从 dtype('O') 转换为 dtype('float64')
- wordpress - 带有 Google Captcha 和 Honey Pot 的 Wordpress 联系表单垃圾邮件保护
- json - 带有 json 条目的 csv 解析