Snakemake: зависимости, которые не вводятся

Я хотел бы знать, есть ли в Snakemake способ определить зависимость, которая на самом деле не является входным файлом. Я имею в виду, что есть программы, которые ожидают, что некоторые файлы будут существовать, а их нет в командной строке.

Рассмотрим bwa в качестве примера. Это правило из правила сопоставления:

rule bwa_mem_map:
    input:
        lambda wildcards: config["references"][wildcards.reference],
        lambda wildcards: config["units"][wildcards.unit]
    output:
        "mapping/{reference}/units/{unit}.bam"
    params:
        sample=lambda wildcards: UNIT_TO_SAMPLE[wildcards.unit],
        custom=config.get("params_bwa_mem", "")
    log:
        "mapping/log/{reference}/{unit}.log"
    threads: 8
    shell:
        "bwa mem {params.custom} "
        r"-R '@RG\tID:{wildcards.unit}\t"
        "SM:{params.sample}\tPL:{config[platform]}' "
        "-t {threads} {input}  2> {log} "
        "| samtools view -Sbh - > {output}"

Здесь bwa ожидает, что индексный файл генома существует, пока он не является аргументом командной строки (путь к индексному файлу выводится из пути генома).

Есть ли способ сообщить Snakemake, что индексный файл является зависимостью, и Snakemake будет искать в своем правиле, если он знает, как сгенерировать этот файл?

Я полагаю, вы все еще можете переписать свои входные данные правила как:

rule bwa_mem_map:
    input:
        genome=lambda wildcards: config["references"][wildcards.reference],
        fastq=lambda wildcards: config["units"][wildcards.unit]
        index=foo.idx

И соответственно адаптировать часть правила run. Это лучшее решение?

Заранее спасибо. Бенуа


person ben    schedule 25.11.2016    source источник


Ответы (1)


Я думаю, что snakemake обрабатывает зависимости между правилами только через файлы, поэтому я бы сказал, что вы делаете это правильно, когда вы явно помещаете индексный файл как input для вашего правила сопоставления, даже если этот файл не отображается в команде сопоставления .

Как бы то ни было, я делаю то же самое для файлов индекса bam, которые являются неявной зависимостью для некоторых инструментов: я помещаю отсортированный файл bam и его индекс как input, но использую только файл bam в части shell или run. И у меня есть правило, генерирующее оба файла как output.

Файлы input и output не обязательно должны появляться в shell / run частях правила.

person bli    schedule 25.11.2016