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 -class BlastTableEntry(object):
12 - def __init__(self,in_rec):
13 bt_fields = in_rec.split()
14 self.qid = bt_fields[0].split('|')
15 self.sid = bt_fields[1].split('|')
16 self.pid = float(bt_fields[2])
17 self.ali_len = int(bt_fields[3])
18 self.mis = int(bt_fields[4])
19 self.gaps = int(bt_fields[5])
20 self.q_bounds = (int(bt_fields[6]), int(bt_fields[7]))
21 self.s_bounds = (int(bt_fields[8]), int(bt_fields[9]))
22 self.e_value = float(bt_fields[10])
23 self.bit_score = float(bt_fields[11])
24
27 self.program = None
28 self.version = None
29 self.date = None
30 self.iteration = None
31 self.query = None
32 self.database = None
33 self.entries = []
34 - def add_entry(self, entry):
35 self.entries.append(entry)
36
37 reader_keywords = {'BLASTP': 'version',
38 'Iteration': 'iteration',
39 'Query': 'query',
40 'Database': 'database',
41 'Fields': 'fields'}
53 self.table_record = BlastTableRec()
54 self._n += 1
55 inline = self._lookahead
56 if not inline:
57 return None
58 while inline:
59 if inline[0] == '#':
60 if self._in_header:
61 self._in_header = self._consume_header(inline)
62 else:
63 break
64 else:
65 self._consume_entry(inline)
66 self._in_header = 0
67
68 inline = self.handle.readline()
69 self._lookahead = inline
70 self._in_header = 1
71 return self.table_record
72
73 - def _consume_entry(self, inline):
74 current_entry = BlastTableEntry(inline)
75 self.table_record.add_entry(current_entry)
89 self.table_record.iteration = int(inline.split()[2])
90 return 1
92 self.table_record.query = inline.split()[2:]
93 return 1
99 - def _Parse(self, method_name, inline):
100 return getattr(self,method_name)(inline)
101