Я хотел бы знать, есть ли способ в 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