Biopython Global Alignment:Out of Memory

时间:2014-10-11 23:44:49

标签: python biopython

我正在尝试global alignment模块中的Biopython方法。在短序列上使用它很容易,并且可以直接给出对齐矩阵。但是我真的需要在更大的序列上运行它(平均长度为2000 nucleatides (or) characters)。但是我一直遇到Out of Memory错误。我查看了SO并找到了this之前的问题。提供的答案没有帮助,因为它们链接到现在无法访问的this相同网站。除此之外,我尝试了以下步骤:

  1. 我尝试使用64-bit python,因为我的个人计算机有4gb个RAM。
  2. ssh加入了一个16gb内存较小的学校服务器,并尝试在其上运行。它在接近4个小时后仍在运行。
  3. 由于它是一个小脚本,我不确定如何修改它。非常感谢您的帮助。

    我的剧本:

    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()
    

1 个答案:

答案 0 :(得分:2)

所以学校服务器终于完成了任务。我意识到,对于每个比对,构建和计算了1000个矩阵。 align.globalxx方法有一个变量MAX_ALIGNMENT,默认设置为1000。通过monkey patching dint更改它确实改变了任何东西。文档说,该方法尝试所有可能的对齐(是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))

这大大减少了时间。但是我的PC仍然崩溃所以我认为这是一项内存密集型任务,需要更多RAM16gb在小型服务器上)。因此,应该考虑一种更有效的方法来读取矩阵中的序列。