Package Bio :: Package KEGG :: Package Enzyme
[hide private]
[frames] | no frames]

Source Code for Package Bio.KEGG.Enzyme

  1  # Copyright 2001 by Tarjei Mikkelsen.  All rights reserved. 
  2  # Copyright 2007 by Michiel de Hoon.  All rights reserved. 
  3  # This code is part of the Biopython distribution and governed by its 
  4  # license.  Please see the LICENSE file that should have been included 
  5  # as part of this package. 
  6   
  7  """ 
  8  This module provides code to work with the KEGG Enzyme database. 
  9   
 10   
 11  Classes: 
 12  Record               -- Holds the information from a KEGG Enzyme record. 
 13  """ 
 14   
 15  from Bio.KEGG import _write_kegg 
 16  from Bio.KEGG import _wrap_kegg 
 17   
 18   
 19  # Set up line wrapping rules (see Bio.KEGG._wrap_kegg) 
 20  rxn_wrap = [0, "", 
 21              (" + ","",1,1), 
 22              (" = ","",1,1), 
 23              (" ","$",1,1), 
 24              ("-","$",1,1)] 
 25  name_wrap = [0, "", 
 26               (" ","$",1,1), 
 27               ("-","$",1,1)] 
 28  id_wrap = lambda indent : [indent, "", 
 29                             (" ","",1,0)] 
 30  struct_wrap = lambda indent : [indent, "", 
 31                                 ("  ","",1,1)] 
 32   
33 -class Record:
34 """Holds info from a KEGG Enzyme record. 35 36 Members: 37 entry The EC number (withou the 'EC '). 38 name A list of the enzyme names. 39 classname A list of the classification terms. 40 sysname The systematic name of the enzyme. 41 reaction A list of the reaction description strings. 42 substrate A list of the substrates. 43 product A list of the products. 44 inhibitor A list of the inhibitors. 45 cofactor A list of the cofactors. 46 effector A list of the effectors. 47 comment A list of the comment strings. 48 pathway A list of 3-tuples: (database, id, pathway) 49 genes A list of 2-tuples: (organism, list of gene ids) 50 disease A list of 3-tuples: (database, id, disease) 51 structures A list of 2-tuples: (database, list of struct ids) 52 dblinks A list of 2-tuples: (database, list of db ids) 53 """
54 - def __init__(self):
55 """__init___(self) 56 57 Create a new Record. 58 """ 59 self.entry = "" 60 self.name = [] 61 self.classname = [] 62 self.sysname = [] 63 self.reaction = [] 64 self.substrate = [] 65 self.product = [] 66 self.inhibitor = [] 67 self.cofactor = [] 68 self.effector = [] 69 self.comment = [] 70 self.pathway = [] 71 self.genes = [] 72 self.disease = [] 73 self.structures = [] 74 self.dblinks = []
75 - def __str__(self):
76 """__str__(self) 77 78 Returns a string representation of this Record. 79 """ 80 return self._entry() + \ 81 self._name() + \ 82 self._classname() + \ 83 self._sysname() + \ 84 self._reaction() + \ 85 self._substrate() + \ 86 self._product() + \ 87 self._inhibitor() + \ 88 self._cofactor() + \ 89 self._effector() + \ 90 self._comment() + \ 91 self._pathway() + \ 92 self._genes() + \ 93 self._disease() + \ 94 self._structures() + \ 95 self._dblinks() + \ 96 "///"
97 - def _entry(self):
98 return _write_kegg("ENTRY", 99 ["EC " + self.entry])
100 - def _name(self):
101 return _write_kegg("NAME", 102 map(lambda l: 103 _wrap_kegg(l, wrap_rule = name_wrap), 104 self.name))
105 - def _classname(self):
106 return _write_kegg("CLASS", 107 self.classname)
108 - def _sysname(self):
109 return _write_kegg("SYSNAME", 110 [_wrap_kegg(l, wrap_rule = name_wrap) \ 111 for l in self.sysname])
112 - def _reaction(self):
113 return _write_kegg("REACTION", 114 [_wrap_kegg(l, wrap_rule = rxn_wrap) \ 115 for l in self.reaction])
116 - def _substrate(self):
117 return _write_kegg("SUBSTRATE", 118 [_wrap_kegg(l, wrap_rule = name_wrap) \ 119 for l in self.substrate])
120 - def _product(self):
121 return _write_kegg("PRODUCT", 122 [_wrap_kegg(l, wrap_rule = name_wrap) \ 123 for l in self.product])
124 - def _inhibitor(self):
125 return _write_kegg("INHIBITOR", 126 [_wrap_kegg(l, wrap_rule = name_wrap) \ 127 for l in self.inhibitor])
128 - def _cofactor(self):
129 return _write_kegg("COFACTOR", 130 [_wrap_kegg(l, wrap_rule = name_wrap) \ 131 for l in self.cofactor])
132 - def _effector(self):
133 return _write_kegg("EFFECTOR", 134 [_wrap_kegg(l, wrap_rule = name_wrap) \ 135 for l in self.effector])
136 - def _comment(self):
137 return _write_kegg("COMMENT", 138 [_wrap_kegg(l, wrap_rule = id_wrap(0)) \ 139 for l in self.comment])
140 - def _pathway(self):
141 s = [] 142 for entry in self.pathway: 143 s.append(entry[0] + ": " + entry[1] + " " + entry[2]) 144 return _write_kegg("PATHWAY", 145 [_wrap_kegg(l, wrap_rule = id_wrap(16)) \ 146 for l in s])
147 - def _genes(self):
148 s = [] 149 for entry in self.genes: 150 s.append(entry[0] + ": " + " ".join(entry[1])) 151 return _write_kegg("GENES", 152 [_wrap_kegg(l, wrap_rule = id_wrap(5)) \ 153 for l in s])
154 - def _disease(self):
155 s = [] 156 for entry in self.disease: 157 s.append(entry[0] + ": " + entry[1] + " " + entry[2]) 158 return _write_kegg("DISEASE", 159 [_wrap_kegg(l, wrap_rule = id_wrap(13)) \ 160 for l in s])
161 - def _structures(self):
162 s = [] 163 for entry in self.structures: 164 s.append(entry[0] + ": " + " ".join(entry[1]) + " ") 165 return _write_kegg("STRUCTURES", 166 [_wrap_kegg(l, wrap_rule = struct_wrap(5)) \ 167 for l in s])
177 178 179
180 -def parse(handle):
181 record = Record() 182 for line in handle: 183 if line[:3]=="///": 184 yield record 185 record = Record() 186 continue 187 if line[:12]!=" ": 188 keyword = line[:12] 189 data = line[12:].strip() 190 if keyword=="ENTRY ": 191 words = data.split() 192 record.entry = words[1] 193 elif keyword=="CLASS ": 194 record.classname.append(data) 195 elif keyword=="COFACTOR ": 196 record.cofactor.append(data) 197 elif keyword=="COMMENT ": 198 record.comment.append(data) 199 elif keyword=="DBLINKS ": 200 if ":" in data: 201 key, values = data.split(":") 202 values = values.split() 203 row = (key, values) 204 record.dblinks.append(row) 205 else: 206 row = record.dblinks[-1] 207 key, values = row 208 values.extend(data.split()) 209 row = key, values 210 record.dblinks[-1] = row 211 elif keyword=="DISEASE ": 212 if ":" in data: 213 database, data = data.split(":") 214 number, name = data.split(None, 1) 215 row = (database, number, name) 216 record.disease.append(row) 217 else: 218 row = record.disease[-1] 219 database, number, name = row 220 name = name + " " + data 221 row = database, number, name 222 record.disease[-1] = row 223 elif keyword=="EFFECTOR ": 224 record.effector.append(data.strip(";")) 225 elif keyword=="GENES ": 226 if data[3:5]==': ': 227 key, values = data.split(":") 228 values = [value.split("(")[0] for value in values.split()] 229 row = (key, values) 230 record.genes.append(row) 231 else: 232 row = record.genes[-1] 233 key, values = row 234 for value in data.split(): 235 value = value.split("(")[0] 236 values.append(value) 237 row = key, values 238 record.genes[-1] = row 239 elif keyword=="INHIBITOR ": 240 record.inhibitor.append(data.strip(";")) 241 elif keyword=="NAME ": 242 record.name.append(data.strip(";")) 243 elif keyword=="PATHWAY ": 244 if data[:5]=='PATH:': 245 path, map, name = data.split(None,2) 246 pathway = (path[:-1], map, name) 247 record.pathway.append(pathway) 248 else: 249 pathway = record.pathway[-1] 250 path, map, name = pathway 251 name = name + " " + data 252 pathway = path, map, name 253 record.pathway[-1] = pathway 254 elif keyword=="PRODUCT ": 255 record.product.append(data.strip(";")) 256 elif keyword=="REACTION ": 257 record.reaction.append(data.strip(";")) 258 elif keyword=="STRUCTURES ": 259 if data[:4]=='PDB:': 260 database = data[:3] 261 accessions = data[4:].split() 262 row = (database, accessions) 263 record.structures.append(row) 264 else: 265 row = record.structures[-1] 266 database, accessions = row 267 accessions.extend(data.split()) 268 row = (database, accessions) 269 record.structures[-1] = row 270 elif keyword=="SUBSTRATE ": 271 record.substrate.append(data.strip(";")) 272 elif keyword=="SYSNAME ": 273 record.sysname.append(data.strip(";"))
274