Package Bio :: Package Blast :: Module ParseBlastTable
[hide private]
[frames] | no frames]

Source Code for Module Bio.Blast.ParseBlastTable

  1  # Copyright 2003 Iddo Friedberg. All rights reserved. 
  2  # This code is part of the Biopython distribution and governed by its 
  3  # license.  Please see the LICENSE file that should have been included 
  4  # as part of this package. 
  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:
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
25 -class BlastTableRec:
26 - def __init__(self):
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'}
42 -class BlastTableReader:
43 - def __init__(self, handle):
44 self.handle = handle 45 inline = self.handle.readline() 46 # zip forward to start of record 47 while inline and inline.find('BLASTP') == -1: 48 inline = self.handle.readline() 49 self._lookahead = inline 50 self._n = 0 51 self._in_header = 1
52 - def next(self):
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)
76 - def _consume_header(self, inline):
77 for keyword in reader_keywords: 78 if inline.find(keyword) > -1: 79 in_header = self._Parse('_parse_%s' % reader_keywords[keyword],inline) 80 break 81 return in_header
82 - def _parse_version(self, inline):
83 program, version, date = inline.split()[1:] 84 self.table_record.program = program 85 self.table_record.version = version 86 self.table_record.date = date 87 return 1
88 - def _parse_iteration(self, inline):
89 self.table_record.iteration = int(inline.split()[2]) 90 return 1
91 - def _parse_query(self, inline):
92 self.table_record.query = inline.split()[2:] 93 return 1
94 - def _parse_database(self, inline):
95 self.table_record.database = inline.split()[2] 96 return 1
97 - def _parse_fields(self, inline):
98 return 0
99 - def _Parse(self, method_name, inline):
100 return getattr(self,method_name)(inline)
101