2017-06-09 35 views
2

我計劃我的生物信息學管道進入snakemake因爲我目前的管道是多個腳本越來越難追的集合。在教程和文檔的基礎上,snakemake似乎是流水線管理非常明確和有趣的選擇。但是,我不熟悉Python,因爲我主要是使用bash和R工作,所以snakemake似乎有點難以學習:我現在面臨以下問題。MissinOutputException在snakemake

我有兩個文件,sampleA_L001_R1_001.fastq.gz和sampleA_L001_R2_001.fastq.gz,wchich被放置到同一個目錄sampleA。我想通過使用cat命令來合併這些文件。這實際上是一個測試運行:在實際情況下,我會爲每個樣本使用八個單獨的FASTQ文件,這些文件應以類似的方式合併。非常簡單的工作,但我的代碼有問題。

snakemake --latency-wait 20 --snakefile /home/users/me/bin/snakefile.txt 

rule mergeFastq: 
    input: 
     reads1='sampleA/sampleA_L001_R1_001.fastq.gz', 
     reads2='sampleA/sampleA_L001_R2_001.fastq.gz' 
    output: 
     reads1='sampleA/sampleA_R1.fastq.gz', 
     reads2='sampleA/sampleA_R2.fastq.gz' 
    message: 
     'Merging FASTQ files...' 
    shell: 
     'cat {input.reads1} > {output.reads1}' 
     'cat {input.reads2} > {output.reads2}' 

------------------------------------------------------------- 

Provided cores: 1 
Rules claiming more threads will be scaled down. 
Job counts: 
    count jobs 
    1 mergeFastq 
    1 

Job 0: Merging FASTQ files... 

Waiting at most 20 seconds for missing files. 
Error in job mergeFastq while creating output files sampleA_R1.fastq.gz, sampleA_R2.fastq.gz. 
MissingOutputException in line 5 of /home/users/me/bin/snakefile.txt: 
Missing files after 20 seconds: 
sampleA_R1.fastq.gz 
This might be due to filesystem latency. If that is the case, consider to increase the wait time with --latency-wait. 
Removing output files of failed job mergeFastq since they might be corrupted: sampleA_R2.fastq.gz 
Will exit after finishing currently running jobs. 
Exiting because a job execution failed. Look above for error message. 

正如你所看到的,我已經嘗試過--latency-wait選項沒有任何成功。你有什麼想法可能是我的問題的根源?文件路徑是正確的,文件本身沒有損壞,並確定。我也遇到了與通配符類似的問題,所以在snakemake基礎知識中一定有一些我不明白的地方。

+0

在告訴你,國家'input.reads1'代表一個單獨的文件,所以你的'cat'命令達簡單地使它的一個副本。這是你想用8個文件列表(可能通過使用通配符)替換嗎?然後你將不得不添加一個頂部的「全部」規則作爲輸入「mergeFastq」的輸出。 (也許這是什麼原因導致你@ rioulen的答案的評論報告錯誤。) – bli

+0

你是正確的 - 我wan't具有8個檔集列表替換這些單個文件。我添加了「全部」規則,現在我的腳本正常工作。感謝您的建議! – Jokhe

回答

2

的問題是在Shell語句,它被連接成一個命令,它生成一個文件「sampleA/sampleA_R1.fastq.gzcat」,這就是爲什麼snakemake沒有找到正確的輸出。例如,您可以使用以下語法:

rule mergeFastq: 
    input: 
     reads1='sampleA/sampleA_L001_R1_001.fastq.gz', 
     reads2='sampleA/sampleA_L001_R2_001.fastq.gz' 
    output: 
     reads1='sampleA/sampleA_R1.fastq.gz', 
     reads2='sampleA/sampleA_R2.fastq.gz' 
    message: 
     'Merging FASTQ files...' 
    shell:""" 
     cat {input.reads1} > {output.reads1} 
     cat {input.reads2} > {output.reads2} 
    """ 

不需要選項latency-wait。

+0

感謝您的幫助,尤其是對於與shell連接有關的說明。我試過你的語法,但它仍然對我產生錯誤。語法的輸出是:'WorkflowError。目標規則可能不包含通配符。請指定具體文件或沒有通配符的規則。 ' – Jokhe

+0

@Jokhe關於新的錯誤,你應該張貼其他問題,您的更新snakefile。 – bli