2016-11-18 114 views
2

我想運行bcl2fastq從bcl格式生成fastq文件。snakemake:如何處理可變數量的規則輸出

根據測序建立相對於測序模式,有多少指標被使用,它可以產生兩種READ1,讀取2,指數1或READ1,讀取2,索引1,索引2等

我想什麼做的是,把讀出輸出數字信息在config.yaml文件爲這樣:

readids: ['I1','I2','R1','R2'] 

,讓規則弄清楚它是如何自動讀取多輸出(fastq.gz文件)產生。

如何編寫輸出節來實現它?

下面是我所擁有的,它每次只能從這個規則輸出一個文件。所以它實際上運行這個規則4次,每次對於I1,I2,R1和R2,這不是我想要的。如何解決它在45行?在行45,{readid}應該是I1,I2,R1,R2之一。

39 rule bcl2fastq:                                     
40  input: 
41   "/data/MiniSeq/test" 
42  params: 
43   prefix="0_fastq" 
44  output: 
45   "0_fastq/{runid}_S0_L001_{readid}_001.fastq.gz" 
46  log: 
47   "0_fastq/bcl2fastq_log.txt" 
48  shell: 
49   """ 
50   bcl2fastq -R {input} -o {params.prefix} --create-fastq-for-index-reads --barcode-mismatches 1 --use-bases-mask {config[bcl2mask]} --minimum-trimmed 
    -read-length 1 --mask-short-adapter-reads 1 --no-bgzf-compression &> {log} 
52   
53   """ 

回答

5

你正在尋找,基本上填補了給定的變量,返回的輸出文件的列表expand() function。你只需要小心逃避通配符應該「生存的格式」(使用雙大括號):你的情況

所以

output: 
     expand("0_fastq/{{runid}}_S0_L001_{readid}_001.fastq.gz", readid=config['readids']) 

這將取代readid在配置給定的值['readids ']並保持runid wilcard。

Andreas

+3

感謝您的回答。我錯過了文檔中的雙花括號使用。這是一個重要的觀點,也許最好再添加幾句話來更好地解釋它的用法。 – olala