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

inputoutput文件不需要出现在shell/run部分规则中。