2014-10-11 2 views
1

Im пытается использовать метод global alignment из модуля Biopython. Использование его на коротких последовательностях легко и сразу дает матрицу выравнивания. Однако мне действительно нужно запускать его на больших последовательностях, которые у меня есть (средняя длина 2000 nucleatides (or) characters). Однако я продолжаю сталкиваться с ошибкой Out of Memory. Я посмотрел на SO и нашел this предыдущий вопрос. Ответы, не полезно, поскольку они ссылаются на this же сайт, который не могу получить доступ now.Apart от этого я попытался следующие шаги:Biopython Global Alignment: Out of Memory

  1. Я попытался с помощью 64-bit питона, так как мой персональный компьютер имеет 4gb RAM.
  2. ssh ed для небольшого школьного сервера с 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' файлов? –

+0

Имеется 100 папок. Каждая папка имеет от 1 до 10 файлов .dna'. Я пытаюсь это только в 1 папке, которая имеет 2 файла – Beginner

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

Это значительно сократило время. Однако мой компьютер по-прежнему разбился, поэтому я полагаю, что это очень важная задача для работы с памятью и требует гораздо больше RAM (на небольшом сервере). Поэтому, наверное, следует подумать о более эффективном способе чтения последовательностей в матрице.

 Смежные вопросы

  • Нет связанных вопросов^_^