В настоящее время я строю конвейер змеиного мейкера, где мне нужно:
1 - Разделить эталонные геномы по хромосоме.
2 - Выполните несущественную операцию над ними.
3 - Объедините хромосомы обратно в полную сборку.
Вот фрагмент того, что происходит на шаге 2:
rule get_consensus:
input:
vcf = rules.filter_snps.output,
chr_ref = "../data/g1k_v37/chromo/{chr}.fa"
output:
hap1=temp("{sample}/chr{chr}/{sample}_chr{chr}_haplo1.fa"),
hap2=temp("{sample}/chr{chr}/{sample}_chr{chr}_haplo2.fa"),
threads: 2
priority: 1
shell:
"bcftools consensus -H 1 -f {input.chr_ref} --sample {wildcards.sample} {input.vcf} > {output.hap1} \
& \
bcftools consensus -H 2 -f {input.chr_ref} --sample {wildcards.sample} {input.vcf} > {output.hap2}"
Чтобы уменьшить использование памяти, мне нужно, чтобы snakemake выполнил третью операцию ASAP , то есть он должен установить приоритет задания в шаге 2 в соответствии с хромосомами, а не образцами:
wildcards: sample=sample1, chr=01
wildcards: sample=sample1, chr=02
wildcards: sample=sample1, chr=03
...
К сожалению, snakemake делает только наоборот:
wildcards: sample=sample1, chr=01
wildcards: sample=sample2, chr=01
wildcards: sample=sample3, chr=01
...
Это означает, что мой конвейер в настоящее время накапливает все разделенные посты (до все они были сгенерированы), перед тем как объединить любое из них, используя правило на шаге 3 (показано ниже):
rule merge_chromosomes:
input:
hap1=expand(rules.get_consensus.output.forw, chr=range(1,23), sample="{sample}"),
hap2=expand(rules.get_consensus.output.rev, chr=range(1,23), sample="{sample}")
output:
hap1=temp("{sample}_s1.fq.gz"),
hap2=temp("{sample}_s2.fq.gz")
threads: 4
priority: 3
shell:
"zcat {input.hap1} | gzip > {output.hap1} \
& \
zcat {input.hap2} | gzip > {output.hap2} \
"
Мой вопрос: есть ли способ заставить snakemake установить приоритеты для { chr} подстановочный знак вместо {sample} при генерации DAG?
Я пытался настроить с priority:
, resources:
и --prioritize
, но безрезультатно.
Моя проблема во многом похожа на полную смесь этих двух прошлых вопросы: