1
2
3
4
5
6 """A parser for the NCBI blastpgp version 2.2.5 output format. Currently only supports
7 the '-m 9' option, (table w/ annotations).
8 Returns a BlastTableRec instance
9 """
10
11
12 -class BlastTableEntry(object):
13 - def __init__(self,in_rec):
14 bt_fields = in_rec.split()
15 self.qid = bt_fields[0].split('|')
16 self.sid = bt_fields[1].split('|')
17 self.pid = float(bt_fields[2])
18 self.ali_len = int(bt_fields[3])
19 self.mis = int(bt_fields[4])
20 self.gaps = int(bt_fields[5])
21 self.q_bounds = (int(bt_fields[6]), int(bt_fields[7]))
22 self.s_bounds = (int(bt_fields[8]), int(bt_fields[9]))
23 self.e_value = float(bt_fields[10])
24 self.bit_score = float(bt_fields[11])
25
26
39
40 reader_keywords = {'BLASTP': 'version',
41 'Iteration': 'iteration',
42 'Query': 'query',
43 'Database': 'database',
44 'Fields': 'fields'}
45
46
49 self.handle = handle
50 inline = self.handle.readline()
51
52 while inline and 'BLASTP' not in inline:
53 inline = self.handle.readline()
54 self._lookahead = inline
55 self._n = 0
56 self._in_header = 1
57
59 self.table_record = BlastTableRec()
60 self._n += 1
61 inline = self._lookahead
62 if not inline:
63 return None
64 while inline:
65 if inline[0] == '#':
66 if self._in_header:
67 self._in_header = self._consume_header(inline)
68 else:
69 break
70 else:
71 self._consume_entry(inline)
72 self._in_header = 0
73
74 inline = self.handle.readline()
75 self._lookahead = inline
76 self._in_header = 1
77 return self.table_record
78
79 - def _consume_entry(self, inline):
80 current_entry = BlastTableEntry(inline)
81 self.table_record.add_entry(current_entry)
82
89
96
98 self.table_record.iteration = int(inline.split()[2])
99 return 1
100
102 self.table_record.query = inline.split()[2:]
103 return 1
104
108
111
112 - def _Parse(self, method_name, inline):
113 return getattr(self,method_name)(inline)
114