2017-08-09 51 views
0

スネークメークファイルにこのルールがあります。起動時に、入力ファイルはyamlファイルにあるすべての入力から読み込まれます。私は、bwaの各プロセスに1つのユニットキーを設定することを期待しています。 ここにルールとYamlファイル(完全ではない)とドライランの結果があります。 スネークメイクアライメントコマンドのyaml解釈を理解してください

rule bwa_mem: 
    input: 
     dt=expand("trim/{sample}/",sample=config['units']), 
     forward_paired=expand("trim/{sample}/{sample}_forward_paired.fq.gz",sample=config['units']), 
     reverse_paired=expand("trim/{sample}/{sample}_reverse_paired.fq.gz",sample=config['units']), 
     forward_unpaired=expand("trim/{sample}/{sample}_forward_unpaired.fq.gz",sample=config['units']), 
     reverse_unpaired=expand("trim/{sample}/{sample}_reverse_unpaired.fq.gz",sample=config['units']), 

    output: 
     temp("mapped_reads/sam/{unit}.sam") 
    params: 
     genome= config["reference"]['genome_fasta'] 
    log: 
     "mapped_reads/log/{unit}_bwa_mem.log" 
    benchmark: 
     "benchmarks/bwa/mem/{unit}.txt" 
    threads: 8 
    shell: 
     '/illumina/software/PROG2/bwa-0.7.15/bwa mem '\ 
       '-t {threads} {params.genome} {input.forward_paired} {input.reverse_paired} {input.forward_unpaired} {input.reverse_unpaired} 2> {log} > {output}' 

そして、このYAMLファイルの設定:

'samples': 
    '432': 
    - '432_L001' 
    - '432_L002' 
    '433': 
    - '433_L002' 
    - '433_L001' 
    '434': 
    - '434_L001' 
    - '434_L002' 
    '435': 
    - '435_L002' 
    - '435_L001' 
.... 
'units': 
    '432_L001': 
    - '/illumina/runs/FASTQ/RAW/432_CGATGT_L001_R1_001.fastq.gz' 
    - '/illumina/runs/FASTQ/RAW/432_CGATGT_L001_R2_001.fastq.gz' 
    '432_L002': 
    - '/illumina/runs/FASTQ/RAW/432_CGATGT_L002_R1_001.fastq.gz' 
    - '/illumina/runs/FASTQ/RAW/432_CGATGT_L002_R2_001.fastq.gz' 
    '433_L001': 
    - '/illumina/runs/FASTQ/RAW/433_CAGATC_L001_R1_001.fastq.gz' 
    - '/illumina/runs/FASTQ/RAW/433_CAGATC_L001_R2_001.fastq.gz' 
    '433_L002': 
    - '/illumina/runs/FASTQ/RAW/433_CAGATC_L002_R1_001.fastq.gz' 
    - '/illumina/runs/FASTQ/RAW/433_CAGATC_L002_R2_001.fastq.gz' 
    '434_L001': 
    - '/illumina/runs/FASTQ/RAW/434_GTGAAA_L001_R1_001.fastq.gz' 
    - '/illumina/runs/FASTQ/RAW/434_GTGAAA_L001_R2_001.fastq.gz' 
    '434_L002': 
    - '/illumina/runs/FASTQ/RAW/434_GTGAAA_L002_R1_001.fastq.gz' 
    - '/illumina/runs/FASTQ/RAW/434_GTGAAA_L002_R2_001.fastq.gz' 
    '435_L001': 
    - '/illumina/runs/FASTQ/RAW/435_ACAGTG_L001_R1_001.fastq.gz' 
    - '/illumina/runs/FASTQ/RAW/435_ACAGTG_L001_R2_001.fastq.gz' 

私は彼がコマンドは、すべての入力ファイルを報告し、これは単位上の任意の要素について

rule bwa_mem: 
    input: trim/432_L001/432_L001_reverse_unpaired.fq.gz, trim/432_L002/4 
32_L002_reverse_unpaired.fq.gz, trim/433_L001/433_L001_reverse_unpaired.f 
q.gz, trim/433_L002/433_L002_reverse_unpaired.fq.gz, trim/434_L001/434_L0 
01_reverse_unpaired.fq.gz, trim/434_L002/434_L002_reverse_unpaired.fq.gz, 
trim/435_L001/435_L001_reverse_unpaired.fq.gz, trim/435_L002/435_L002_re 
verse_unpaired.fq.gz, trim/436_L001/436_L001_reverse_unpaired.fq.gz, trim 
/436_L002/436_L002_reverse_unpaired.fq.gz, trim/437_L001/437_L001_reverse 
_unpaired.fq.gz, trim/437_L002/437_L002_reverse_unpaired.fq.gz, trim/438_ 
L003/438_L003_reverse_unpaired.fq.gz, trim/438_L004/438_L004_reverse_unpa 
ired.fq.gz, trim/lane1_L001/lane1_L 
001_reverse_paired.fq.gz, trim/lane2_L002/lane2_L002_reverse_paired.fq.gz 
, trim/lane8_L008/ 
    output: mapped_reads/sam/441_L004.sam 
    log: mapped_reads/log/441_L004_bwa_mem.log 
    jobid: 208 
    benchmark: benchmarks/bwa/mem/441_L004.txt 
    wildcards: unit=441_L004 

をもたらしたBWA実行しようとします..どこで私は間違いをしたのですか?

+0

BWAは、ワイルドカードを使用して、代わりに{}のサンプルを評価する必要があります。 {サンプル}の評価は、ここでは表示されない「すべての」ルールで行う必要があります。また、サンプルとユニットの3次ネストも考慮してください。サンプルの第2レベルは、第1レベルの単位に相当します。私はこれを単純に拡張パターンと組み合わせることができると思います。現在のシステムでは、チェックサンプル[X] [Y] == units [X]を必要としますが、参照の形式は1つだけです。これはもはや必要ありません。 – TBoyarski

答えて

2

ここでは、拡張機能を使用して、ルールの入力ファイルとしてこれらのファイルをすべて定義することができます。つまり、ここで集約を実行します。ここで本当に必要なのは、特定のサンプルの入力ファイルのセットだけを持つことです。入力ファイルにexpand関数を使用しないだけで、これを達成できます。ここでそれを使用する理由はありません。

私は強く、また質問のまさにこの種のカバー全体公式Snakemakeチュートリアル、通過することをお勧め:http://snakemake.readthedocs.io/en/stable/tutorial/tutorial.html

+1

私はこのアドバイスを追加します:あなたのワークフローでできるだけ遅く 'expand'を使用してください。実際には、私がこれまでに書いたワークフローでは、ほとんどの「拡張」が「すべて」のトップルールにある傾向があります。あなたのマイレージは異なる場合があります。 – bli

関連する問題