使用不同参数两次 运行 相同规则的最佳方法
Best way to run same rule twice with different params
我正在使用 bcftools consensus
从 vcf 文件中提取单倍型。
给定输入文件:
A.sorted.bam
B.sorted.bam
创建了以下输出文件:
A.hap1.fna
A.hap2.fna
B.hap1.fna
B.hap2.fna
我目前有两条规则可以做到这一点。它们的区别仅在于输出文件中的数字 1 和 2 以及 shell 命令。代码:
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 的方法来仅使用一个规则来完成此操作。是否可以将其合并为一个规则,或者我目前的方法是最好的方法?
在 rule all
中对单倍型 1 和 2 使用通配符。 See here 以了解有关通过 rule all
添加目标的更多信息
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}"
我正在使用 bcftools consensus
从 vcf 文件中提取单倍型。
给定输入文件:
A.sorted.bam
B.sorted.bam
创建了以下输出文件:
A.hap1.fna
A.hap2.fna
B.hap1.fna
B.hap2.fna
我目前有两条规则可以做到这一点。它们的区别仅在于输出文件中的数字 1 和 2 以及 shell 命令。代码:
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 的方法来仅使用一个规则来完成此操作。是否可以将其合并为一个规则,或者我目前的方法是最好的方法?
在 rule all
中对单倍型 1 和 2 使用通配符。 See here 以了解有关通过 rule all
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}"