Ограничение количества обращений в поиске Biopython NCBIWWW

#python #biopython #ncbi

#python #biopython #ncbi

Вопрос:

Я работаю над попыткой автоматизировать некоторые поисковые запросы. Мне нужно получить только три первых результата из результатов BLAST, однако параметр hitlist_size , похоже, не ограничивает мои поиски только тремя результатами. Независимо от того, какой размер я указываю, я все равно получаю> 3 обращений для большинства образцов (в других я получаю три, хотя я не уверен, что это просто совпадение). У кого-нибудь есть какое-либо представление об этом?

 import Bio
from Bio import SeqIO
from Bio.Blast import NCBIWWW
from Bio.Blast import NCBIXML
fasta_string = open("FASTA_Files/48_50.fasta").read()
result_handle = NCBIWWW.qblast("blastn", "nt", fasta_string,hitlist_size=3)
    with open("XML_Files/48_50.xml", "w") as save_to:
        save_to.write(result_handle.read())
        result_handle.close()
  

Следующая последовательность FASTA выдает ожидаемое количество 46 обращений, но превышает ожидаемое количество обращений для 47 :

 >46
NNNNNNNNNNGNNNNNNTGCAGTCGNANNNNNNNNNNNNNNNNNAGCTTGCTGCTTCGCTGACGAGTGGCGGACGGGTGA
GTAATGTCTGGGAAACTGCCTGATGGAGGGGGATAACTACTGGAAACGGTGGCTAATACCGCATAACGTCGCAAGACCAA
AGAGGGGGACCTTCGGGCCTCTTGCCATCAGATGTGCCCAGATGGGATTAGCTTGTTGGTGAGGTAACGGCTCACCAAGG
CGACGATCCCTAGCTGGTCTGAGAGGATGACCAGCCACACTGGAACTGAGACACGGTCCAGACTCCTACGGGAGGCAGCA
GTGGGGAATATTGCACAATGGGCGCAAGCCTGATGCAGCCATGCCGCGTGTATGAAGAAGGCCTTCGGGTTGTAAAGTAC
TTTCAGCGGGGAGGAAGGNGTTGTGGTTAATAACCGCAGCAATTGACGTTACCCGCANAANAAGCACCGGCTAACTCCGT
GCCAGCAGCCGCGGTAATACGGAGGGTGCANGCGTTAATCGNAATTACTGGNCGTAAAGCGCACGCAGGCGGTCTGTCAA
GTCTGATGTGAAATCCCCGGGCTCAACCTGGNAACTGCATTCNAAACTGGCAGGCTTGAGTCTTGNAGANGGGGGGTAGA
ATTCCAGGTGTANCGNTGAAATGCGTANAGATCTGGANGNAATACCGGTGGCNAANGCGGCCCCCTGGACAAAGACTGAC
GCTCANGTGCGAAAGCGTGGNGGAGCAAANAGGATTAGATACCCTGGTAGNCCNNCGCCNNANACGATGTCTACNTGGNA
GGNTTGTGNCCTTGAGGCGTGNCTNNCCNGNAGCTNAACGCGTTTAAGTANANCNNCCTGGGGCGAGCNACGGGCNGCNN
GGNTNAAAACNNNNNNTGNNNTTNNACGGGNGNNCCCCGCANNANCCGGCTGNNAGCATGNTGGATTNAANTTCGATNNN
NNCGCGAAGAANCCNNANNNNNGNNNNNNNANNNNNNNNNNAANNNTNNNNNANANNNNNNNNNNNNNNNGNNNNCTNNN
AGNANNGNNNCTGCATGGNNNNCNNNCNNGNTCNNGNNNNNNNNNNNNNGNNNNNNNNCCNNNANNNNNNNNNNNNTNAT
CNNNNNNNNNNNNNTNNNNNNNNNNNNNAGNNNNNNNNCNNNNNNNNNNANNTNNNAANN
>47
NNNNNNNNNNNNNNNNNNNNNNNNGNNNNNCGGGTNNCCNNNNGCTGGNTGNNNTGCTGACGAGTGGCGGACGGGTGAGT
AATGTCTGGGAAACTGCCTGAAGGGGGGGGATTCCTACTGGCCAGGGTGGCTAATACCGGGTAACGTCGNNNGANCAAAG
AGGGGGACCTTCGGGCCTCTTGCCATCACATGTGCCCGGATGGGATTAGCTTGTTGGTGAGGTAACGGCTCACCAAGGCG
ACGATCCCTAGCTGGTCTGAGAGGATGACCAGCCNCACTGGAACTGAGACACGGTCCCGACTCCTACGGGAGGCANCAGT
GGGGAATATTGCTCTTGGGCGCAAGCCTGATGCAGCCATGCCGCGGGTATGAGGAAGGCCTTCGGTTTGTAAAGTACTTT
CTCCGGGGAGGAAGGNGTNGTGGTGAATAACCGCTACANTTGANNCTNCCCGCNNAANAACCACCNGNTAACTCCNTGCN
NNNNGCCGCGGTAATACGGANGGTGCAAGNGTTAATCGNANTTACTGNNTGTTGAGCGCACGNNGGCGGCCTGTCNNNTC
TNATGTGAGATCCCCGGGCTCNCCCTGNNACCTGCATTCGNNNNNTGNNANGCTNGANTCTTGNNNNGNNGNGGNAGNAA
TTCCNNGTGTNNCGNNGAAATGCNNANAGATCTGNANANANNACNGGNGNCCAANGNNGNCCCCTGNTCTCNGACTGACG
CNNGAGTGCTGAANNGTGNAGAGCGNACAGGATTANANNNCCNGNTAGNCCGNCNCCNCACACCNATGTCTACATGNGAG
GNTNNNGNNNNNTGNGGCNNNNCNNTCCNNNAGCTNANGNNGTTNAANTANATCNNNCTNNNNCNNGCNNGGGGNCANNA
NGGGNNNAAANNTNNNNATNAATNTGACGGANNNNNCNNNNNNNNCNNNNNNANCATGNGGATTNANNNTNNNTNNNNNC
NNNNNANAACCNNANNNNNNNNNNNNNNTNNNNNNNANNNTNNNNNNNTNNNNNNGNNNNCNNNNNNNNACTNNNNNNNC
NNNNNNNNCANNGNNNNNNNNNNNANGNTNNNNNTGNNNNAANNNTGNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNTN
NNNNNNTNNNNNNNTNNNNTNNNNNNNNNNNNNNNNNNNNNNNTNNNNNNNNTCNNNNNN
  

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

1. Добро пожаловать в StackOverflow! Можете ли вы предоставить воспроизводимый пример этого (т. Е. некоторую последовательность fasta, которая производит более> 3 обращений?) Я пытаюсь решить ту же проблему, но, похоже, получаю нужное количество обращений (ниже <Hit> )

2. Конечно! Не могли бы вы также поделиться своей последовательностью fasta, чтобы я мог посмотреть?

3.@cnluzon Обновите это: я думаю, что моя проблема связана с моим синтаксическим анализом XML. Я нахожусь в процессе выяснения того, что я сделал не так, но я думаю, что это как-то связано с моим for вызовом цикла alignment.hsps и циклом вокруг них, в отличие от моих обращений. from Bio.Blast import NCBIXML with open("XML_Files/46_47.xml") as result_handle: blast_records = NCBIXML.parse(result_handle) x = 0 for rec in blast_records: for alignment in rec.alignments: for hsp in alignment.hsps: #print(rec.query)#DNA ID

4. О, я вижу! Что ж, если вы ищете выравнивания, возможно, вам следует использовать параметр alignments=3 вместо hitlist_size того, как определено здесь: biopython.org/DIST/docs/api/Bio.Blast.NCBIWWW-module.html

5. @Cnluzon Как вы думаете, вы могли бы быстро определить выравнивания по сравнению со списком попаданий? Я не совсем понимаю их разницу.

Ответ №1:

Проблема заключается в том, что попадание — это нечто иное, чем выравнивание. Совпадение — это совпадение последовательности в базе данных, тогда как выравнивание — это фактическое положение нуклеотидов. Это может произойти несколько раз для одной и той же последовательности в базе данных.

В случае, который вы пробовали, xml, который это сохраняет, действительно содержит три элемента <Hit> , но последнее полученное вами обращение содержит семь <Hsp> записей, которые, похоже, являются тем, что вы повторяете в цикле:

 for rec in blast_records:
    for alignment in rec.alignments:
        for hsp in alignment.hsps:
            print(rec.query) #DNA ID
  

alignments=3 Я думаю, что указание вместо обращений даст вам максимум 3 выравнивания за попадание. Вы можете указать оба, если хотите контролировать количество обращений и количество выравниваний.

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

1. Ваше решение решило мою проблему. Мне нужно было указать оба hitlist_size = 3 , а также alignments=1 для получения первых трех обращений и первой записи <HSP> в моем XML-файле.

2. Рад слышать! 🙂