4

これは、snakemake チュートリアルの高度なセクションからの短い例です。

rule bwa_map:
input:
    "data/genome.fa",
    lambda wildcards: config["samples"][wildcards.sample]
output:
    "mapped_reads/{sample}.bam"
threads: 8
shell:
    "bwa mem -t {threads} {input} | samtools view -Sb - > {output}"

ここで、このルールを数か月前に作成し、出力ファイル名を覚えていないとしましょう。私の理解では、エラーが発生するため、ルール名を呼び出して snakemake を実行することはできません。

$ snakemake bwa_map
InputFunctionException in line 9 of Snakefile:
AttributeError: 'Wildcards' object has no attribute 'sample'
Wildcards:

$

まず、「サンプル」セクションを参照することは明らかであるため、snakemake がラムダ関数を使用して構成ファイルから入力ファイルを推測できない理由がわかりません。

第二に、これに対する回避策はありますか?古き良き Makefile を使用して古い Makefile を使用し、次のように入力して同じ bwa_map ルールを実行するのは非常に簡単だからです。

$ make bwa_map INPUT=data/samples/A.fastq

よろしくお願いします。ブノワ

4

2 に答える 2

2

ルール名をターゲットとして指定し、そのルールにワイルドカードが含まれている場合、Snakemake はワイルドカードに使用する値を認識できません。この場合、これは具体的な出力ファイルからのみ決定できます。この出力ファイルは、ダウンストリーム ルール (Snakefile の先頭にある実際の「すべて」のターゲットなど) から取得するか、コマンド ラインで直接指定することによって取得できます。

ただし、Snakefile の先頭に適切なターゲット ルールがある場合は、--until フラグがあり、特定のルールまでのみワークフローを実行できます。

あなたのmakeの例に関して、私はこの機能を認識していません。これに関するドキュメントを教えてもらえますか? Snakemake に似たものも追加するかもしれません。

また、Snakemake の開発版でこの場合のエラー メッセージを改善したことにも注意してください。より有益で、問題を説明するようになりました。

于 2016-11-11T11:04:02.970 に答える
0

ご回答有難うございます。

公式ドキュメント ページへのリンクを提供できません。ただし、非常に人気のあるmake機能について話しているので、今すぐベルが鳴らなくてもご存知だと思います。

このMakefile名前を考えてみましょう/path/to/workflows/variant_calling.make:

FASTQ = foo
GENOME = genome.fa
OUTPUT = some_complicated_output_file_name_$(FASTQ).txt

help:
    @echo 'This is a dummy example'
    @echo ''
    @echo 'Usage: make <command>'
    @echo ''
    @echo 'Available commands:'
    @echo '    help - display this help and exit'
    @echo '    mapping - map a fastq file to a reference genome'

mapping: $(OUTPUT)

$(OUTPUT):
    bwa mem $(GENOME) $(FASTQ) > $@

明らかに、この Makefile を作成してから 1 週間経っても、出力ファイル名を覚えておく方法はありません。ただし、入力するだけで出力ファイルを作成できるため、これは重要ではありません。

$ make -f /path/to/workflows/variant_calling.make mapping FASTQ=bar.fastq

この Makefile には他にも多数のルールを含めることができますが、上記のコマンドを使用してマッピング ステップのみを実行することもできます。


私は、snakemake でまったく同じことができるようにしたいと考えています。これにより、コマンド ラインは次のようになります。

$ snakemake -s `path/to/myworkflow.snakefile` bwa_mem

私は自分自身を明確にしますか?

これが現在不可能であることを確認しますか? もしそうなら、Snakemake でこの機能をすぐに利用できる可能性はありますか?

ありがとう。

ブノワ

于 2016-11-16T10:26:29.953 に答える