Использование Biopython для получения сведений о неизвестной последовательности с помощью BLAST

Я использую Biopython в первый раз. У меня есть данные о последовательности неизвестных организмов, и я пытаюсь использовать BLAST, чтобы определить, от какого организма они, скорее всего, произошли. Для этого я написал следующую функцию:

def find_organism(file):
    """
    Receives a fasta file with a single seq, and uses BLAST to find
    from which organism it was taken.
    """
    # get seq from fasta file
    seqRecord = SeqIO.read(file,"fasta")
    # run BLAST
    blastResult = NCBIWWW.qblast("blastn", "nt", seqRecord.seq)
    # get first hit
    blastRecord = NCBIXML.read(blastResult)
    firstHit = blastRecord.alignments[0]
    # get hit's gi number
    title = firstHit.title
    gi = title.split("|")[1]
    # search NCBI for the gi number
    ncbiResult = Entrez.efetch(db="nucleotide", id=gi, rettype="gb", retmode="text")
    ncbiResultSeqRec = SeqIO.read(ncbiResult,"gb")
    # get organism
    annotatDict = ncbiResultSeqRec.annotations
    return(annotatDict['organism'])

Он работает нормально, но для извлечения организма для каждого вида требуется около 2 минут, что мне кажется очень медленным. Я просто думаю, мог бы я сделать лучше. Я знаю, что могу создать локальную копию NCBI для повышения производительности, и я могу это сделать. Тем не менее, я подозреваю, что сначала запрашивать BLAST, а затем брать идентификатор и использовать его для запроса Entrez — это не выход. Есть ли у вас другие предложения по улучшению?
Спасибо!


person soungalo    schedule 18.08.2014    source источник


Ответы (1)


Вы можете получить организм с помощью:

[...]
blastResult = NCBIWWW.qblast("blastn", "nt", seqRecord.seq)
blastRecord = NCBIXML.read(blastResult)

first_organism = blastRecord.descriptions[0]

Это спасло бы по крайней мере запрос fetch. В любом случае, "взрыв" может занять слишком много времени, и если вы планируете массово запрашивать NCBI, вас забанят.

person xbello    schedule 18.08.2014
comment
Не работает. Это просто возвращает заголовок всей последовательности, а не организм. Спасибо за совет в любом случае. - person soungalo; 19.08.2014
comment
Разве в описании нет организма? В моих тестах не было! Я думаю, это зависит от запроса. Можете ли вы предоставить образец последовательности для выполнения запросов? - person xbello; 19.08.2014
comment
Я запрашиваю эту последовательность: - person soungalo; 20.08.2014
comment
Я балуюсь, и кажется, что служба qblast замедляется в NCBI. Тот же запрос, который занимает 5 секунд с использованием веб-интерфейса, занимает 5-10 минут с использованием API qblast (без Biopython, просто с использованием команды Put, как рекомендуется). Если вас больше всего беспокоит скорость, кажется, что вы можете либо а) сделать это локально, либо б) взломать веб-форму. - person xbello; 20.08.2014