Запускайте распараллеленные задания змеиного мастера в заданном порядке c - PullRequest
1 голос
/ 24 февраля 2020

В настоящее время я строю конвейер змеиного мейкера, где мне нужно:

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, но безрезультатно.

Моя проблема во многом похожа на полную смесь этих двух прошлых вопросы:

...