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   
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
27 -class BlastTableRec(object):
28 - def __init__(self):
29 self.program = None 30 self.version = None 31 self.date = None 32 self.iteration = None 33 self.query = None 34 self.database = None 35 self.entries = []
36
37 - def add_entry(self, entry):
38 self.entries.append(entry)
39 40 reader_keywords = {'BLASTP': 'version', 41 'Iteration': 'iteration', 42 'Query': 'query', 43 'Database': 'database', 44 'Fields': 'fields'} 45 46
47 -class BlastTableReader(object):
48 - def __init__(self, handle):
49 self.handle = handle 50 inline = self.handle.readline() 51 # zip forward to start of record 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
58 - def next(self):
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
83 - def _consume_header(self, inline):
84 for keyword in reader_keywords: 85 if keyword in inline: 86 in_header = self._Parse('_parse_%s' % reader_keywords[keyword],inline) 87 break 88 return in_header
89
90 - def _parse_version(self, inline):
91 program, version, date = inline.split()[1:] 92 self.table_record.program = program 93 self.table_record.version = version 94 self.table_record.date = date 95 return 1
96
97 - def _parse_iteration(self, inline):
98 self.table_record.iteration = int(inline.split()[2]) 99 return 1
100
101 - def _parse_query(self, inline):
102 self.table_record.query = inline.split()[2:] 103 return 1
104
105 - def _parse_database(self, inline):
106 self.table_record.database = inline.split()[2] 107 return 1
108
109 - def _parse_fields(self, inline):
110 return 0
111
112 - def _Parse(self, method_name, inline):
113 return getattr(self,method_name)(inline)
114