Я работаю над попыткой автоматизировать некоторые поиски BLAST. Мне нужно выбрать только три лучших результата из результатов 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
Конечно! Не могли бы вы также поделиться своей последовательностью Fasta, чтобы я мог посмотреть?
@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
О, я вижу! Что ж, если вы ищете выравнивания, возможно, вам следует использовать параметр alignments=3
вместо hitlist_size
, как определено здесь: biopython.org/DIST/docs/api/Bio.Blast.NCBIWWW-module.html
@Cnluzon Как вы думаете, вы могли бы быстро определить мировоззрение и список попаданий? Я не совсем вижу их разницу.
Я не уверен на 100%, потому что не вижу больше информации в документации, но я предполагаю, что одному попаданию может соответствовать более одного выравнивания, и это будет причиной того, что вы получите больше, чем указанное количество элементов. в ваших списках, потому что вы получаете доступ к rec.alignments
.
Проблема заключается в том, что удар отличается от выравнивание. удар — это совпадение последовательности в базе данных, тогда как выравнивание — фактическое положение нуклеотидов. Это могло произойти несколько раз для одной и той же последовательности в базе данных.
В случае, если вы попытались, 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 выравнивания за одно попадание. Вы можете указать и то, и другое, если хотите контролировать количество попаданий и количество выравниваний.
Ваше решение решило мою проблему. Мне нужно было указать как hitlist_size = 3
, так и alignments=1
, чтобы получить первые три совпадения и первую запись <HSP> в моем XML-файле.
Рад слышать! :)
Добро пожаловать в StackOverflow! Можете ли вы привести воспроизводимый пример этого (например, некоторую последовательность fasta, которая дает более> 3 совпадений?) Я пытаюсь решить ту же проблему, но, похоже, получаю правильное количество совпадений (под
<Hit>
)