2016-11-25 13 views
1

実際に入力ファイルではない依存関係を定義する方法がSnakemakeにあるかどうかを知りたいと思います。 私は、コマンドラインで提供されていないファイルが存在すると予想されるプログラムがあることを意味しています。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それは、コマンドライン引数(インデックスファイルへのパスゲノムパスから推定される)がいない間ゲノムインデックスファイルが存在することを期待する: これはJohannes Köster mapping rulesからルールです。

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と置きますが、shellまたはbamファイルのみを使用します。 run部分。そして私はoutputという2つのファイルを持つルールを生成しています。

inputおよびoutputファイルは、shell/run部分に表示する必要はありません。

関連する問題