Я использую bcftools consensus
для извлечения гаплотипов из файла vcf. Учитывая входные файлы:
A.sorted.bam
B.sorted.bam
Создаются следующие выходные файлы:
A.hap1.fna
A.hap2.fna
B.hap1.fna
B.hap2.fna
В настоящее время у меня есть два правила для этого. Они отличаются только номерами 1 и 2 в выходных файлах и команде оболочки. Код:
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}"
Хотя этот код работает, кажется, что должен быть лучший, более питонический способ сделать это, используя только одно правило. Можно ли свернуть это в одно правило, или мой текущий метод лучше всего?