2014-10-11 32 views
1

我正在嘗試Biopython模塊的​​方法。在短序列上使用它很簡單,直接給出一個對齊矩陣。不過,我真的需要在更大的序列上運行它(平均長度爲2000 nucleatides (or) characters)。但是我一直在遇到Out of Memory錯誤。我看了一下,發現this上一個問題。Biopython全局對齊:內存不足

  1. 我試圖用一個64-bit蟒蛇,因爲我的個人電腦有4gb RAM:因爲它們鏈接到this相同的網站,不能訪問now.Apart從此我嘗試了這些步驟中提供的答案是不是有幫助。
  2. ssh編輯了一個16gb內存的小學校服務器,並試圖運行。它在接近4小時後仍然運行。

由於它是一個小腳本,我不確定如何修改它。任何幫助將不勝感激。

我的腳本:

import os 
from Bio import pairwise2 
from Bio.pairwise2 import format_alignment 

file_list = [] 

file_list = [each for each in os.listdir(os.getcwd()) if each.endswith(".dna")] 

align_file = open("seq_align.aln","w") 

seq_list = [] 

for each_file in file_list: 
    f_o = open(each_file,"r") 
    seq_list.append(f_o.read()) 

for a in pairwise2.align.globalmx(seq_list[0],seq_list[1]): 
    align_file.write(format_alignment(*a)) 

align_file.close() 
+0

你有多少'.dna'文件? – 2014-10-12 04:42:04

+0

有100個文件夾,每個文件夾有1-10個'.dna'文件。我現在只有1個文件夾,現在有2個文件 – Beginner 2014-10-12 05:15:39

+0

每個文件有多行,或只有一個很長的行? – 2014-10-12 05:16:44

回答

2

所以學校服務器終於完成了任務。我意識到,對於每個對齊,有1000個矩陣被構建和計算。方法align.globalxx具有變量MAX_ALIGNMENT,其默認設置爲1000。改變它通過monkey patching力量真的改變任何東西。該文件說,該方法嘗試所有可能的路線(是1000),但在我的情況下,所有的矩陣具有相同的比對分數(以及我嘗試的少數測試序列)。最後,文檔中的一小段評論指出,如果您只需要1分,則使用可選參數one_alignment_only,該參數僅接受boolean值。我所做的只是這樣:

for a in pairwise2.align.globalmx(seq_list[0],seq_list[1],one_alignment_only=True): 
    align_file.write(format_alignment(*a)) 

這大大減少了時間。然而,我的電腦仍然崩潰,所以我認爲這是一項非常耗時的內存任務,需要更多RAM(小型服務器上的16gb)。所以應該考慮一種更有效的方法來讀取矩陣中的序列。