首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用不同参数运行同一规则两次的最佳方法

使用不同参数运行同一规则两次的最佳方法
EN

Stack Overflow用户
提问于 2018-04-02 11:02:51
回答 1查看 780关注 0票数 1

我正在使用bcftools consensus从vcf文件中提取单体型。给定输入文件:

代码语言:javascript
复制
A.sorted.bam
B.sorted.bam

将创建以下输出文件:

代码语言:javascript
复制
A.hap1.fna
A.hap2.fna
B.hap1.fna
B.hap2.fna

我目前有两条规则来做到这一点。它们在输出文件和shell命令中仅有数字1和2的区别。代码:

代码语言:javascript
复制
rule consensus1:
    input:
        vcf="variants/phased.vcf.gz",
        tbi="variants/phased.vcf.gz.tbi",
        bam="alignments/{sample}.sorted.bam"
    output:
        "haplotypes/{sample}.hap1.fna"
    params:
        sample="{sample}"
    shell:
        "bcftools consensus -i -s {params.sample} -H 1 -f {reference_file} {input.vcf} > {output}"

rule consensus2:
    input:
        vcf="variants/phased.vcf.gz",
        tbi="variants/phased.vcf.gz.tbi",
        bam="alignments/{sample}.sorted.bam"
    output:
        "haplotypes/{sample}.hap2.fna"
    params:
        sample="{sample}"
    shell:
        "bcftools consensus -i -s {params.sample} -H 2 -f {reference_file} {input.vcf} > {output}"

虽然这段代码可以工作,但似乎应该有一种更好、更有pythonic风格的方法,只使用一条规则就可以做到这一点。有没有可能把它压缩成一条规则,或者我目前的方法是最好的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-02 11:19:40

rule all中的单倍型1和2使用通配符。See here了解有关通过rule all添加目标的更多信息

代码语言:javascript
复制
reference_file = "ref.txt"

rule all:
    input:
        expand("haplotypes/{sample}.hap{hap_no}.fna",
                   sample=["A", "B"], hap_no=["1", "2"])

rule consensus1:
    input:
        vcf="variants/phased.vcf.gz",
        tbi="variants/phased.vcf.gz.tbi",
        bam="alignments/{sample}.sorted.bam"
    output:
        "haplotypes/{sample}.hap{hap_no}.fna"
    params:
        sample="{sample}",
        hap_no="{hap_no}"
    shell:
        "bcftools consensus -i -s {params.sample} -H {params.hap_no} \
               -f {reference_file} {input.vcf} > {output}"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49604782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档