Snakemake:没有输入的依赖关系
问题描述:
我想知道是否有一种方法在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
答
我认为唯一的办法snakemake处理规则之间的依赖关系是通过文件,所以我说你是做正确,当你把索引文件中明确为input
您的映射规则,即使该文件不不会出现在映射命令中。
对于它的价值,我对bam索引文件做了同样的处理,这是对某些工具的隐式依赖:我将排序后的bam文件及其索引放置为input
,但仅使用shell
中的bam文件或run
部分。我有一个规则生成两个文件为output
。
input
和output
文件不需要出现在shell
/run
部分规则中。