2014-10-11 26 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)。所以应该考虑一种更有效的方法来读取矩阵中的序列。