首页 > 解决方案 > 执行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 个循环。

如果有人可以提供帮助,那就太好了!提前致谢

标签: loopsiterationmappingbioinformaticssnakemake

解决方案


由于您的步骤序列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 并行执行迭代映射。是否有意义?


推荐阅读