2016-11-25 3 views
1

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

Рассмотрим в качестве примера bwa. Это правило из Johannes Köster mapping rules:

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 часть следовательно. Это лучшее решение?

Заранее спасибо. Benoist

ответ

0

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

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

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

Смежные вопросы