Как я могу преобразовать выходные данные qblast XML в NCBI BLAST -outfmt 17?

Я начал свой проект с автономного NCBI BLAST и использовал параметр -outfmt 17. Для моей цели это форматирование чрезвычайно полезно. Однако мне пришлось перейти на Biopython, и теперь я использую qblast для согласования своих последовательностей с базой данных NCBI NT. Можно ли сохранить/преобразовать qblast XML в формат, сравнимый с автономным форматом NCBI BLAST -outfmt 17?

Большое спасибо за Вашу помощь!

Привет, Филипп


person Philipp    schedule 10.08.2016    source источник


Ответы (1)


Я предполагаю, что вы имели в виду -outfmt 7 и вам нужен вывод со столбцами.

from Bio.Blast import NCBIWWW, NCBIXML

# This is the BLASTN query which returns an XML handler in a StringIO
r = NCBIWWW.qblast(
    "blastn",
    "nr",
    "ACGGGGTCTCGAAAAAAGGAGAATGGGATGAGAAGGATATATGGGTAGTGTCATTTTTTAACTTGCAGAT" +
    "TTCATCCTAGTCTTCCAGTTATCGTTTCCTAGCACTCCATGTTCCCAAGATAGTGTCACCACCCCAAGGA" +
    "CTCTCTCTCATTTTCTTTGCCTGGGCCCTCTTTCTACTGAGGAGTCGTGGCCTTCCATCAGTAGAAGCCG",
    expect=1E-5)

# Now we read that XML extracting the info

for record in NCBIXML.parse(r):
    for alignment in record.alignments:
        for hsp in alignment.hsps:
            cols = "{}\t" * 10
            print(cols.format(hsp.positives / hsp.align_length,
                              hsp.align_length,
                              hsp.align_length - hsp.positives,
                              hsp.gaps,
                              hsp.query_start,
                              hsp.query_end,
                              hsp.sbjct_start,
                              hsp.sbjct_end,
                              hsp.expect,
                              hsp.score))

Выводит что-то вроде:

1   210 0   0   1   210 89250   89459   8.73028e-102    420.0   
0   206 19  2   5   210 46259   46462   5.16461e-73 314.0   
1   210 0   0   1   210 68822   69031   8.73028e-102    420.0   
0   206 19  2   5   210 25825   26028   5.16461e-73 314.0   
1   210 0   0   1   210 65887   66096   8.73028e-102    420.0   
...
person xbello    schedule 11.08.2016
comment
На самом деле я имел в виду -outfmt 17 :) Но в любом случае ваш ответ очень полезен. Я попытаюсь закодировать парсер для своих нужд. Я новичок в кодировании, поэтому это может занять некоторое время, но, надеюсь, это сработает. Благодарю вас! - person Philipp; 11.08.2016
comment
Мой BLAST имеет outfmt только до 11. Если вы предоставите образец вывода, я обновлю свой ответ. Если вы считаете, что мой ответ работает на ваш вопрос, вы должны принять его. - person xbello; 12.08.2016
comment
Не знаю почему, но у меня есть еще несколько вариантов outfmt. Вот как выглядит вывод outfmt 17: KC262216.1 0 Query_1 1 255 8199H713M10H * 0 0 * * AS:i:713 EV:f:0 NM:i:0 PI:f:100.00 BS:f:1317.78 В любом случае я адаптировал ваш код выше для передачи данных в формат, который я могу использовать. Это не outfmt 17, а еще один шаг вперед в обработке моих данных. В очередной раз благодарим за помощь - person Philipp; 12.08.2016