Самый быстрый способ выполнить поиск с использованием нескольких файлов FASTA в удаленной базе данных

#python #biopython #fasta #blast

Вопрос:

У меня есть файл с несколькими FASTA, содержащий ~125 последовательностей белков. Мне нужно выполнить поиск BLASTP по удаленной базе данных nr. Я попытался использовать NcbiblastpCommandline, но проблема в том, что он принимает только файлы в качестве входных данных. Поскольку в моем файле огромное количество последовательностей, я получаю эту ошибку

ОШИБКА: На сервере произошла ошибка [blastsrv4.REAL]:Ошибка: Превышен лимит использования процессора, в результате чего SIGXCPU (24).

Хранение каждой последовательности из файла multi-FASTA в отдельный файл за один раз работает, но затем поиск BLAST становится чрезвычайно медленным (в среднем~10 минут/запрос по сравнению с ~1 минутой/запросом на сайте NCBI).

 blastp_results = []
from Bio.Blast.Applications import NcbiblastpCommandline
from Bio import SeqIO
record_iterator = SeqIO.parse("AmpB_DEPs.fasta", "fasta")

for record in record_iterator:
    entry = str(">"   i.description   "n"   i.seq)
    f1 = open("test.txt", "w")
    f1.write(entry)
    f1.close()
    f2 = open("test.txt", "r")
    blastp_cline = NcbiblastpCommandline(query = 'test.txt', db = 'nr -remote', evalue = 0.05, outfmt = '7 sseqid evalue qcovs pident')
    res = blastp_cline()
    blastp_results.append(res)
    f2.close()
 

Я также пробовал использовать NCBIWWW.qblast, но, похоже, он не предоставляет информацию о покрытии запросов в выходных данных, что важно для моего исследования.

Может ли кто-нибудь предложить способ решения этой проблемы без ущерба для пространства поиска или параметров BLAST по умолчанию? Предложения по реализации BLAST на других языках, таких как PERL, R и т.д. также был бы признателен.

Комментарии:

1. Вы можете найти это полезным: biostars.org/p/493953