Я хотел бы знать, есть ли в 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
. Это лучшее решение?
Заранее спасибо. Бенуа