You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用不同参数重复运行同一规则?bcftools单倍型提取场景

优化Snakemake规则提取单倍型

你现在写了两条重复的规则,其实可以用Snakemake的通配符把它们合并成一条更简洁易维护的版本,不用再写几乎一样的重复代码啦!下面是优化后的完整代码:

rule consensus_hap:
    input:
        vcf="variants/phased.vcf.gz",
        tbi="variants/phased.vcf.gz.tbi",
        bam="alignments/{sample}.sorted.bam",
        ref="reference.fasta"  # 注意:bcftools consensus必须依赖参考序列,这里替换成你的参考文件路径
    output:
        "haplotypes/{sample}.hap{hap}.fna"
    params:
        sample="{sample}",
        haplotype="{hap}"
    shell:
        """
        bcftools consensus -H {params.haplotype} -s {params.sample} -f {input.ref} {input.vcf} > {output}
        """

# 可以加一个rule all来明确指定要生成的所有目标文件
rule all:
    input:
        expand("haplotypes/{sample}.hap{hap}.fna", sample=["A", "B"], hap=[1, 2])

关键细节说明:

  • 用{sample}和{hap}两个通配符,直接覆盖你需要的样本(A、B)和单倍型(1、2),一条规则就能处理所有组合
  • 补上了参考序列作为输入,因为bcftools consensus必须依赖参考序列才能生成完整的单倍型序列,记得替换成你实际的参考文件路径
  • rule all里的expand函数会自动生成所有需要的输出文件列表,Snakemake会根据这个列表自动触发对应的任务
  • 要确保你的VCF文件是**已经定相(phased)**的,否则-H参数无法正确提取出两个独立的单倍型

这样修改后,后续如果要调整bcftools consensus的参数,只需要在一处修改即可,不用再同步修改两条规则,维护起来方便很多。

内容的提问来源于stack exchange,提问作者Kelly Sovacool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:25:58