Package Bio :: Package Data :: Module CodonTable
[hide private]
[frames] | no frames]

Source Code for Module Bio.Data.CodonTable

  1  # This code is part of the Biopython distribution and governed by its 
  2  # license.  Please see the LICENSE file that should have been included 
  3  # as part of this package. 
  4  """Codon tables based on those from the NCBI. 
  5   
  6  These tables are based on parsing the NCBI file: 
  7  ftp://ftp.ncbi.nih.gov/entrez/misc/data/gc.prt 
  8   
  9  Last updated for Version 3.9 
 10  """ 
 11   
 12  from Bio import Alphabet 
 13  from Bio.Alphabet import IUPAC 
 14  from Bio.Data import IUPACData 
 15   
 16  unambiguous_dna_by_name = {} 
 17  unambiguous_dna_by_id = {} 
 18  unambiguous_rna_by_name = {} 
 19  unambiguous_rna_by_id = {} 
 20  generic_by_name = {} # unambiguous DNA or RNA 
 21  generic_by_id = {} # unambiguous DNA or RNA 
 22   
 23  ambiguous_dna_by_name = {} 
 24  ambiguous_dna_by_id = {} 
 25  ambiguous_rna_by_name = {} 
 26  ambiguous_rna_by_id = {} 
 27  ambiguous_generic_by_name = {} # ambiguous DNA or RNA 
 28  ambiguous_generic_by_id = {} # ambiguous DNA or RNA  
 29   
 30  # standard IUPAC unambiguous codons 
 31  standard_dna_table = None 
 32  standard_rna_table = None 
 33   
 34  # In the future, the back_table could return a statistically 
 35  # appropriate distribution of codons, so do not cache the results of 
 36  # back_table lookups! 
 37   
38 -class TranslationError(Exception):
39 pass
40
41 -class CodonTable:
42 nucleotide_alphabet = Alphabet.generic_nucleotide 43 protein_alphabet = Alphabet.generic_protein 44 45 forward_table = {} # only includes codons which actually code 46 back_table = {} # for back translations 47 start_codons = [] 48 stop_codons = [] 49 # Not always called from derived classes!
50 - def __init__(self, nucleotide_alphabet = nucleotide_alphabet, 51 protein_alphabet = protein_alphabet, 52 forward_table = forward_table, back_table = back_table, 53 start_codons = start_codons, stop_codons = stop_codons):
60
61 - def __str__(self):
62 """Returns a simple text representation of the codon table 63 64 e.g. 65 >>> import Bio.Data.CodonTable 66 >>> print Bio.Data.CodonTable.standard_dna_table 67 >>> print Bio.Data.CodonTable.generic_by_id[1]""" 68 69 if self.id: 70 answer = "Table %i" % self.id 71 else: 72 answer = "Table ID unknown" 73 if self.names: 74 answer += " " + ", ".join(filter(None, self.names)) 75 76 #Use the main four letters (and the conventional ordering) 77 #even for ambiguous tables 78 letters = self.nucleotide_alphabet.letters 79 if isinstance(self.nucleotide_alphabet, Alphabet.DNAAlphabet) \ 80 or (letters is not None and "T" in letters): 81 letters = "TCAG" 82 else: 83 #Should be either RNA or generic nucleotides, 84 #e.g. Bio.Data.CodonTable.generic_by_id[1] 85 letters = "UCAG" 86 87 #Build the table... 88 answer=answer + "\n\n |" + "|".join( \ 89 [" %s " % c2 for c2 in letters] \ 90 ) + "|" 91 answer=answer + "\n--+" \ 92 + "+".join(["---------" for c2 in letters]) + "+--" 93 for c1 in letters: 94 for c3 in letters: 95 line = c1 + " |" 96 for c2 in letters: 97 codon = c1+c2+c3 98 line = line + " %s" % codon 99 if codon in self.stop_codons: 100 line = line + " Stop|" 101 else: 102 try: 103 amino = self.forward_table[codon] 104 except KeyError: 105 amino = "?" 106 except TranslationError: 107 amino = "?" 108 if codon in self.start_codons: 109 line = line + " %s(s)|" % amino 110 else: 111 line = line + " %s |" % amino 112 line = line + " " + c3 113 answer = answer + "\n"+ line 114 answer=answer + "\n--+" \ 115 + "+".join(["---------" for c2 in letters]) + "+--" 116 return answer
117
118 -def make_back_table(table, default_stop_codon):
119 # ONLY RETURNS A SINGLE CODON 120 # Do the sort so changes in the hash implementation won't affect 121 # the result when one amino acid is coded by more than one codon. 122 back_table = {} 123 keys = table.keys() ; keys.sort() 124 for key in keys: 125 back_table[table[key]] = key 126 back_table[None] = default_stop_codon 127 return back_table
128 129
130 -class NCBICodonTable(CodonTable):
131 nucleotide_alphabet = Alphabet.generic_nucleotide 132 protein_alphabet = IUPAC.protein 133
134 - def __init__(self, id, names, table, start_codons, stop_codons):
135 self.id = id 136 self.names = names 137 self.forward_table = table 138 self.back_table = make_back_table(table, stop_codons[0]) 139 self.start_codons = start_codons 140 self.stop_codons = stop_codons
141 142
143 -class NCBICodonTableDNA(NCBICodonTable):
144 nucleotide_alphabet = IUPAC.unambiguous_dna
145
146 -class NCBICodonTableRNA(NCBICodonTable):
147 nucleotide_alphabet = IUPAC.unambiguous_rna
148 149 150 ######### Deal with ambiguous forward translations 151
152 -class AmbiguousCodonTable(CodonTable):
153 - def __init__(self, codon_table, 154 ambiguous_nucleotide_alphabet, 155 ambiguous_nucleotide_values, 156 ambiguous_protein_alphabet, 157 ambiguous_protein_values):
158 CodonTable.__init__(self, 159 ambiguous_nucleotide_alphabet, 160 ambiguous_protein_alphabet, 161 AmbiguousForwardTable(codon_table.forward_table, 162 ambiguous_nucleotide_values, 163 ambiguous_protein_values), 164 codon_table.back_table, 165 166 # These two are WRONG! I need to get the 167 # list of ambiguous codons which code for 168 # the stop codons XXX 169 list_ambiguous_codons(codon_table.start_codons, ambiguous_nucleotide_values), 170 list_ambiguous_codons(codon_table.stop_codons, ambiguous_nucleotide_values) 171 ) 172 self._codon_table = codon_table
173 174 # Be sneaky and forward attribute lookups to the original table. 175 # This lets us get the names, if the original table is an NCBI 176 # table.
177 - def __getattr__(self, name):
178 return getattr(self._codon_table, name)
179
180 -def list_possible_proteins(codon, forward_table, ambiguous_nucleotide_values):
181 c1, c2, c3 = codon 182 x1 = ambiguous_nucleotide_values[c1] 183 x2 = ambiguous_nucleotide_values[c2] 184 x3 = ambiguous_nucleotide_values[c3] 185 possible = {} 186 stops = [] 187 for y1 in x1: 188 for y2 in x2: 189 for y3 in x3: 190 try: 191 possible[forward_table[y1+y2+y3]] = 1 192 except KeyError: 193 # If tripping over a stop codon 194 stops.append(y1+y2+y3) 195 if stops: 196 if possible.keys(): 197 raise TranslationError("ambiguous codon '%s' codes " % codon \ 198 + "for both proteins and stop codons") 199 # This is a true stop codon - tell the caller about it 200 raise KeyError(codon) 201 return possible.keys()
202
203 -def list_ambiguous_codons(codons, ambiguous_nucleotide_values):
204 """Extends a codon list to include all possible ambigous codons. 205 206 e.g. ['TAG', 'TAA'] -> ['TAG', 'TAA', 'TAR'] 207 ['UAG', 'UGA'] -> ['UAG', 'UGA', 'URA'] 208 209 Note that ['TAG', 'TGA'] -> ['TAG', 'TGA'], this does not add 'TRR'. 210 Thus only two more codons are added in the following: 211 212 e.g. ['TGA', 'TAA', 'TAG'] -> ['TGA', 'TAA', 'TAG', 'TRA', 'TAR'] 213 214 Returns a new (longer) list of codon strings. 215 """ 216 217 #Note ambiguous_nucleotide_values['R'] = 'AG' (etc) 218 #This will generate things like 'TRR' from ['TAG', 'TGA'], which 219 #we don't want to include: 220 c1_list = sorted(letter for (letter, meanings) \ 221 in ambiguous_nucleotide_values.iteritems() \ 222 if set([codon[0] for codon in codons]).issuperset(set(meanings))) 223 c2_list = sorted(letter for (letter, meanings) \ 224 in ambiguous_nucleotide_values.iteritems() \ 225 if set([codon[1] for codon in codons]).issuperset(set(meanings))) 226 c3_list = sorted(letter for (letter, meanings) \ 227 in ambiguous_nucleotide_values.iteritems() \ 228 if set([codon[2] for codon in codons]).issuperset(set(meanings))) 229 #candidates is a list (not a set) to preserve the iteration order 230 candidates = [] 231 for c1 in c1_list: 232 for c2 in c2_list: 233 for c3 in c3_list: 234 codon = c1+c2+c3 235 if codon not in candidates and codon not in codons: 236 candidates.append(codon) 237 answer = codons[:] #copy 238 #print "Have %i new candidates" % len(candidates) 239 for ambig_codon in candidates: 240 wanted = True 241 #e.g. 'TRR' -> 'TAA', 'TAG', 'TGA', 'TGG' 242 for codon in [c1+c2+c3 \ 243 for c1 in ambiguous_nucleotide_values[ambig_codon[0]] \ 244 for c2 in ambiguous_nucleotide_values[ambig_codon[1]] \ 245 for c3 in ambiguous_nucleotide_values[ambig_codon[2]]]: 246 if codon not in codons: 247 #This ambiguous codon can code for a non-stop, exclude it! 248 wanted=False 249 #print "Rejecting %s" % ambig_codon 250 continue 251 if wanted: 252 answer.append(ambig_codon) 253 return answer
254 255 assert list_ambiguous_codons(['TGA', 'TAA'],IUPACData.ambiguous_dna_values) == ['TGA', 'TAA', 'TRA'] 256 assert list_ambiguous_codons(['TAG', 'TGA'],IUPACData.ambiguous_dna_values) == ['TAG', 'TGA'] 257 assert list_ambiguous_codons(['TAG', 'TAA'],IUPACData.ambiguous_dna_values) == ['TAG', 'TAA', 'TAR'] 258 assert list_ambiguous_codons(['UAG', 'UAA'],IUPACData.ambiguous_rna_values) == ['UAG', 'UAA', 'UAR'] 259 assert list_ambiguous_codons(['TGA', 'TAA', 'TAG'],IUPACData.ambiguous_dna_values) == ['TGA', 'TAA', 'TAG', 'TAR', 'TRA'] 260 261 # Forward translation is "onto", that is, any given codon always maps 262 # to the same protein, or it doesn't map at all. Thus, I can build 263 # off of an existing table to produce the ambiguous mappings. 264 # 265 # This handles the general case. Perhaps it's overkill? 266 # >>> t = CodonTable.ambiguous_dna_by_id[1] 267 # >>> t.forward_table["AAT"] 268 # 'N' 269 # >>> t.forward_table["GAT"] 270 # 'D' 271 # >>> t.forward_table["RAT"] 272 # 'B' 273 # >>> t.forward_table["YTA"] 274 # 'L' 275
276 -class AmbiguousForwardTable:
277 - def __init__(self, forward_table, ambiguous_nucleotide, ambiguous_protein):
278 self.forward_table = forward_table 279 280 self.ambiguous_nucleotide = ambiguous_nucleotide 281 self.ambiguous_protein = ambiguous_protein 282 283 inverted = {} 284 for name, val in ambiguous_protein.items(): 285 for c in val: 286 x = inverted.get(c, {}) 287 x[name] = 1 288 inverted[c] = x 289 for name, val in inverted.items(): 290 inverted[name] = val.keys() 291 self._inverted = inverted 292 293 self._cache = {}
294
295 - def get(self, codon, failobj = None):
296 try: 297 return self.__getitem__(codon) 298 except KeyError: 299 return failobj
300
301 - def __getitem__(self, codon):
302 try: 303 x = self._cache[codon] 304 except KeyError: 305 pass 306 else: 307 if x is TranslationError: 308 raise TranslationError(codon) # no unique translation 309 if x is KeyError: 310 raise KeyError(codon) # it's a stop codon 311 return x 312 try: 313 x = self.forward_table[codon] 314 self._cache[codon] = x 315 return x 316 except KeyError: 317 pass 318 319 # XXX Need to make part of this into a method which returns 320 # a list of all possible encodings for a codon! 321 try: 322 possible = list_possible_proteins(codon, 323 self.forward_table, 324 self.ambiguous_nucleotide) 325 except KeyError: 326 self._cache[codon] = KeyError 327 raise KeyError(codon) # stop codon 328 except TranslationError: 329 self._cache[codon] = TranslationError 330 raise TranslationError(codon) # does not code 331 assert len(possible) > 0, "unambiguous codons must code" 332 333 # Hah! Only one possible protein, so use it 334 if len(possible) == 1: 335 self._cache[codon] = possible[0] 336 return possible[0] 337 338 # See if there's an ambiguous protein encoding for the multiples. 339 # Find residues which exist in every coding set. 340 ambiguous_possible = {} 341 for amino in possible: 342 for term in self._inverted[amino]: 343 ambiguous_possible[term] = ambiguous_possible.get(term, 0) + 1 344 345 n = len(possible) 346 possible = [] 347 for amino, val in ambiguous_possible.items(): 348 if val == n: 349 possible.append(amino) 350 351 # No amino acid encoding for the results 352 if len(possible) == 0: 353 self._cache[codon] = TranslationError 354 raise TranslationError(codon) # no valid translation 355 356 # All of these are valid, so choose one 357 # To be unique, sort by smallet ambiguity then alphabetically 358 # Can get this if "X" encodes for everything. 359 def _sort(x, y, table = self.ambiguous_protein): 360 a = cmp(len(table[x]), len(table[y])) 361 if a == 0: 362 return cmp(x, y) 363 return a
364 possible.sort(_sort) 365 366 x = possible[0] 367 self._cache[codon] = x 368 return x
369 370
371 -def register_ncbi_table(name, alt_name, id, 372 table, start_codons, stop_codons):
373 """Turns codon table data into objects, and stores them in the dictionaries (PRIVATE).""" 374 #In most cases names are divided by "; ", however there is also 375 #'Bacterial and Plant Plastid' (which used to be just 'Bacterial') 376 names = [x.strip() for x in name.replace(" and ","; ").split("; ")] 377 378 dna = NCBICodonTableDNA(id, names + [alt_name], table, start_codons, 379 stop_codons) 380 381 ambig_dna = AmbiguousCodonTable(dna, 382 IUPAC.ambiguous_dna, 383 IUPACData.ambiguous_dna_values, 384 IUPAC.extended_protein, 385 IUPACData.extended_protein_values) 386 387 # replace all T's with U's for the RNA tables 388 rna_table = {} 389 generic_table = {} 390 for codon, val in table.items(): 391 generic_table[codon] = val 392 codon = codon.replace("T", "U") 393 generic_table[codon] = val 394 rna_table[codon] = val 395 rna_start_codons = [] 396 generic_start_codons = [] 397 for codon in start_codons: 398 generic_start_codons.append(codon) 399 codon = codon.replace("T", "U") 400 generic_start_codons.append(codon) 401 rna_start_codons.append(codon) 402 rna_stop_codons = [] 403 generic_stop_codons = [] 404 for codon in stop_codons: 405 generic_stop_codons.append(codon) 406 codon = codon.replace("T", "U") 407 generic_stop_codons.append(codon) 408 rna_stop_codons.append(codon) 409 410 generic = NCBICodonTable(id, names + [alt_name], generic_table, 411 generic_start_codons, generic_stop_codons) 412 413 #The following isn't very elegant, but seems to work nicely. 414 _merged_values = dict(IUPACData.ambiguous_rna_values.iteritems()) 415 _merged_values["T"] = "U" 416 ambig_generic = AmbiguousCodonTable(generic, 417 Alphabet.NucleotideAlphabet(), 418 _merged_values, 419 IUPAC.extended_protein, 420 IUPACData.extended_protein_values) 421 422 rna = NCBICodonTableRNA(id, names + [alt_name], rna_table, 423 rna_start_codons, rna_stop_codons) 424 425 ambig_rna = AmbiguousCodonTable(rna, 426 IUPAC.ambiguous_rna, 427 IUPACData.ambiguous_rna_values, 428 IUPAC.extended_protein, 429 IUPACData.extended_protein_values) 430 431 if id == 1: 432 global standard_dna_table, standard_rna_table 433 standard_dna_table = dna 434 standard_rna_table = rna 435 436 unambiguous_dna_by_id[id] = dna 437 unambiguous_rna_by_id[id] = rna 438 generic_by_id[id] = generic 439 ambiguous_dna_by_id[id] = ambig_dna 440 ambiguous_rna_by_id[id] = ambig_rna 441 ambiguous_generic_by_id[id] = ambig_generic 442 443 if alt_name is not None: 444 names.append(alt_name) 445 446 for name in names: 447 unambiguous_dna_by_name[name] = dna 448 unambiguous_rna_by_name[name] = rna 449 generic_by_name[name] = generic 450 ambiguous_dna_by_name[name] = ambig_dna 451 ambiguous_rna_by_name[name] = ambig_rna 452 ambiguous_generic_by_name[name] = ambig_generic
453 454 455 ### These tables created from the data file 456 ### ftp://ftp.ncbi.nih.gov/entrez/misc/data/gc.prt 457 ### using the following: 458 ##import re 459 ##for line in open("gc.prt").readlines(): 460 ## if line[:2] == " {": 461 ## names = [] 462 ## id = None 463 ## aa = None 464 ## start = None 465 ## bases = [] 466 ## elif line[:6] == " name": 467 ## names.append(re.search('"([^"]*)"', line).group(1)) 468 ## elif line[:8] == " name": 469 ## names.append(re.search('"(.*)$', line).group(1)) 470 ## elif line == ' Mitochondrial; Mycoplasma; Spiroplasma" ,\n': 471 ## names[-1] = names[-1] + " Mitochondrial; Mycoplasma; Spiroplasma" 472 ## elif line[:4] == " id": 473 ## id = int(re.search('(\d+)', line).group(1)) 474 ## elif line[:10] == " ncbieaa ": 475 ## aa = line[12:12+64] 476 ## elif line[:10] == " sncbieaa": 477 ## start = line[12:12+64] 478 ## elif line[:9] == " -- Base": 479 ## bases.append(line[12:12+64]) 480 ## elif line[:2] == " }": 481 ## assert names != [] and id is not None and aa is not None 482 ## assert start is not None and bases != [] 483 ## if len(names) == 1: 484 ## names.append(None) 485 ## print "register_ncbi_table(name = %s," % repr(names[0]) 486 ## print " alt_name = %s, id = %d," % \ 487 ## (repr(names[1]), id) 488 ## print " table = {" 489 ## s = " " 490 ## for i in range(64): 491 ## if aa[i] != "*": 492 ## t = " '%s%s%s': '%s'," % (bases[0][i], bases[1][i], 493 ## bases[2][i], aa[i]) 494 ## if len(s) + len(t) > 75: 495 ## print s 496 ## s = " " + t 497 ## else: 498 ## s = s + t 499 ## print s, "}," 500 501 ## s = " stop_codons = [" 502 ## for i in range(64): 503 ## if aa[i] == "*": 504 ## t = " '%s%s%s'," % (bases[0][i], bases[1][i], bases[2][i]) 505 ## if len(s) + len(t) > 75: 506 ## print s 507 ## s = " " + t 508 ## else: 509 ## s = s + t 510 ## print s, "]," 511 512 ## s = " start_codons = [" 513 ## for i in range(64): 514 ## if start[i] == "M": 515 ## t = " '%s%s%s'," % (bases[0][i], bases[1][i], bases[2][i]) 516 ## if len(s) + len(t) > 75: 517 ## print s 518 ## s = " " + t 519 ## else: 520 ## s = s + t 521 ## print s, "]" 522 ## print " )" 523 ## elif line[:2] == "--" or line == "\n" or line == "}\n" or \ 524 ## line == 'Genetic-code-table ::= {\n': 525 ## pass 526 ## else: 527 ## raise Exception("Unparsed: " + repr(line)) 528 529 register_ncbi_table(name = 'Standard', 530 alt_name = 'SGC0', id = 1, 531 table = { 532 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 533 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 534 'TGT': 'C', 'TGC': 'C', 'TGG': 'W', 'CTT': 'L', 'CTC': 'L', 535 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 'CCA': 'P', 536 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 'CAG': 'Q', 537 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 'ATT': 'I', 538 'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 'ACT': 'T', 'ACC': 'T', 539 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 'AAA': 'K', 540 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'R', 'AGG': 'R', 541 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 'GCT': 'A', 542 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D', 543 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G', 544 'GGG': 'G', }, 545 stop_codons = [ 'TAA', 'TAG', 'TGA', ], 546 start_codons = [ 'TTG', 'CTG', 'ATG', ] 547 ) 548 register_ncbi_table(name = 'Vertebrate Mitochondrial', 549 alt_name = 'SGC1', id = 2, 550 table = { 551 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 552 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 553 'TGT': 'C', 'TGC': 'C', 'TGA': 'W', 'TGG': 'W', 'CTT': 'L', 554 'CTC': 'L', 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 555 'CCA': 'P', 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 556 'CAG': 'Q', 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 557 'ATT': 'I', 'ATC': 'I', 'ATA': 'M', 'ATG': 'M', 'ACT': 'T', 558 'ACC': 'T', 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 559 'AAA': 'K', 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'GTT': 'V', 560 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 'GCT': 'A', 'GCC': 'A', 561 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D', 'GAA': 'E', 562 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G', 'GGG': 'G', }, 563 stop_codons = [ 'TAA', 'TAG', 'AGA', 'AGG', ], 564 start_codons = [ 'ATT', 'ATC', 'ATA', 'ATG', 'GTG', ] 565 ) 566 register_ncbi_table(name = 'Yeast Mitochondrial', 567 alt_name = 'SGC2', id = 3, 568 table = { 569 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 570 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 571 'TGT': 'C', 'TGC': 'C', 'TGA': 'W', 'TGG': 'W', 'CTT': 'T', 572 'CTC': 'T', 'CTA': 'T', 'CTG': 'T', 'CCT': 'P', 'CCC': 'P', 573 'CCA': 'P', 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 574 'CAG': 'Q', 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 575 'ATT': 'I', 'ATC': 'I', 'ATA': 'M', 'ATG': 'M', 'ACT': 'T', 576 'ACC': 'T', 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 577 'AAA': 'K', 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'R', 578 'AGG': 'R', 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 579 'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 580 'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 581 'GGA': 'G', 'GGG': 'G', }, 582 stop_codons = [ 'TAA', 'TAG', ], 583 start_codons = [ 'ATA', 'ATG', ] 584 ) 585 register_ncbi_table(name = 'Mold Mitochondrial; Protozoan Mitochondrial; Coelenterate Mitochondrial; Mycoplasma; Spiroplasma', 586 alt_name = 'SGC3', id = 4, 587 table = { 588 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 589 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 590 'TGT': 'C', 'TGC': 'C', 'TGA': 'W', 'TGG': 'W', 'CTT': 'L', 591 'CTC': 'L', 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 592 'CCA': 'P', 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 593 'CAG': 'Q', 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 594 'ATT': 'I', 'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 'ACT': 'T', 595 'ACC': 'T', 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 596 'AAA': 'K', 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'R', 597 'AGG': 'R', 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 598 'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 599 'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 600 'GGA': 'G', 'GGG': 'G', }, 601 stop_codons = [ 'TAA', 'TAG', ], 602 start_codons = [ 'TTA', 'TTG', 'CTG', 'ATT', 'ATC', 603 'ATA', 'ATG', 'GTG', ] 604 ) 605 register_ncbi_table(name = 'Invertebrate Mitochondrial', 606 alt_name = 'SGC4', id = 5, 607 table = { 608 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 609 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 610 'TGT': 'C', 'TGC': 'C', 'TGA': 'W', 'TGG': 'W', 'CTT': 'L', 611 'CTC': 'L', 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 612 'CCA': 'P', 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 613 'CAG': 'Q', 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 614 'ATT': 'I', 'ATC': 'I', 'ATA': 'M', 'ATG': 'M', 'ACT': 'T', 615 'ACC': 'T', 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 616 'AAA': 'K', 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'S', 617 'AGG': 'S', 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 618 'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 619 'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 620 'GGA': 'G', 'GGG': 'G', }, 621 stop_codons = [ 'TAA', 'TAG', ], 622 start_codons = [ 'TTG', 'ATT', 'ATC', 'ATA', 'ATG', 623 'GTG', ] 624 ) 625 register_ncbi_table(name = 'Ciliate Nuclear; Dasycladacean Nuclear; Hexamita Nuclear', 626 alt_name = 'SGC5', id = 6, 627 table = { 628 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 629 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 630 'TAA': 'Q', 'TAG': 'Q', 'TGT': 'C', 'TGC': 'C', 'TGG': 'W', 631 'CTT': 'L', 'CTC': 'L', 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 632 'CCC': 'P', 'CCA': 'P', 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 633 'CAA': 'Q', 'CAG': 'Q', 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 634 'CGG': 'R', 'ATT': 'I', 'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 635 'ACT': 'T', 'ACC': 'T', 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 636 'AAC': 'N', 'AAA': 'K', 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 637 'AGA': 'R', 'AGG': 'R', 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 638 'GTG': 'V', 'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 639 'GAT': 'D', 'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 640 'GGC': 'G', 'GGA': 'G', 'GGG': 'G', }, 641 stop_codons = [ 'TGA', ], 642 start_codons = [ 'ATG', ] 643 ) 644 register_ncbi_table(name = 'Echinoderm Mitochondrial; Flatworm Mitochondrial', 645 alt_name = 'SGC8', id = 9, 646 table = { 647 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 648 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 649 'TGT': 'C', 'TGC': 'C', 'TGA': 'W', 'TGG': 'W', 'CTT': 'L', 650 'CTC': 'L', 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 651 'CCA': 'P', 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 652 'CAG': 'Q', 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 653 'ATT': 'I', 'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 'ACT': 'T', 654 'ACC': 'T', 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 655 'AAA': 'N', 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'S', 656 'AGG': 'S', 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 657 'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 658 'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 659 'GGA': 'G', 'GGG': 'G', }, 660 stop_codons = [ 'TAA', 'TAG', ], 661 start_codons = [ 'ATG', 'GTG', ] 662 ) 663 register_ncbi_table(name = 'Euplotid Nuclear', 664 alt_name = 'SGC9', id = 10, 665 table = { 666 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 667 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 668 'TGT': 'C', 'TGC': 'C', 'TGA': 'C', 'TGG': 'W', 'CTT': 'L', 669 'CTC': 'L', 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 670 'CCA': 'P', 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 671 'CAG': 'Q', 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 672 'ATT': 'I', 'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 'ACT': 'T', 673 'ACC': 'T', 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 674 'AAA': 'K', 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'R', 675 'AGG': 'R', 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 676 'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 677 'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 678 'GGA': 'G', 'GGG': 'G', }, 679 stop_codons = [ 'TAA', 'TAG', ], 680 start_codons = [ 'ATG', ] 681 ) 682 register_ncbi_table(name = 'Bacterial and Plant Plastid', 683 alt_name = None, id = 11, 684 table = { 685 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 686 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 687 'TGT': 'C', 'TGC': 'C', 'TGG': 'W', 'CTT': 'L', 'CTC': 'L', 688 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 'CCA': 'P', 689 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 'CAG': 'Q', 690 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 'ATT': 'I', 691 'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 'ACT': 'T', 'ACC': 'T', 692 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 'AAA': 'K', 693 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'R', 'AGG': 'R', 694 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 'GCT': 'A', 695 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D', 696 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G', 697 'GGG': 'G', }, 698 stop_codons = [ 'TAA', 'TAG', 'TGA', ], 699 start_codons = [ 'TTG', 'CTG', 'ATT', 'ATC', 'ATA', 700 'ATG', 'GTG', ] 701 ) 702 register_ncbi_table(name = 'Alternative Yeast Nuclear', 703 alt_name = None, id = 12, 704 table = { 705 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 706 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 707 'TGT': 'C', 'TGC': 'C', 'TGG': 'W', 'CTT': 'L', 'CTC': 'L', 708 'CTA': 'L', 'CTG': 'S', 'CCT': 'P', 'CCC': 'P', 'CCA': 'P', 709 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 'CAG': 'Q', 710 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 'ATT': 'I', 711 'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 'ACT': 'T', 'ACC': 'T', 712 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 'AAA': 'K', 713 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'R', 'AGG': 'R', 714 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 'GCT': 'A', 715 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D', 716 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G', 717 'GGG': 'G', }, 718 stop_codons = [ 'TAA', 'TAG', 'TGA', ], 719 start_codons = [ 'CTG', 'ATG', ] 720 ) 721 register_ncbi_table(name = 'Ascidian Mitochondrial', 722 alt_name = None, id = 13, 723 table = { 724 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 725 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 726 'TGT': 'C', 'TGC': 'C', 'TGA': 'W', 'TGG': 'W', 'CTT': 'L', 727 'CTC': 'L', 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 728 'CCA': 'P', 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 729 'CAG': 'Q', 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 730 'ATT': 'I', 'ATC': 'I', 'ATA': 'M', 'ATG': 'M', 'ACT': 'T', 731 'ACC': 'T', 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 732 'AAA': 'K', 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'G', 733 'AGG': 'G', 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 734 'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 735 'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 736 'GGA': 'G', 'GGG': 'G', }, 737 stop_codons = [ 'TAA', 'TAG', ], 738 start_codons = [ 'TTG', 'ATA', 'ATG', 'GTG', ] 739 ) 740 register_ncbi_table(name = 'Alternative Flatworm Mitochondrial', 741 alt_name = None, id = 14, 742 table = { 743 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 744 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 745 'TAA': 'Y', 'TGT': 'C', 'TGC': 'C', 'TGA': 'W', 'TGG': 'W', 746 'CTT': 'L', 'CTC': 'L', 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 747 'CCC': 'P', 'CCA': 'P', 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 748 'CAA': 'Q', 'CAG': 'Q', 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 749 'CGG': 'R', 'ATT': 'I', 'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 750 'ACT': 'T', 'ACC': 'T', 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 751 'AAC': 'N', 'AAA': 'N', 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 752 'AGA': 'S', 'AGG': 'S', 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 753 'GTG': 'V', 'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 754 'GAT': 'D', 'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 755 'GGC': 'G', 'GGA': 'G', 'GGG': 'G', }, 756 stop_codons = [ 'TAG', ], 757 start_codons = [ 'ATG', ] 758 ) 759 register_ncbi_table(name = 'Blepharisma Macronuclear', 760 alt_name = None, id = 15, 761 table = { 762 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 763 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 764 'TAG': 'Q', 'TGT': 'C', 'TGC': 'C', 'TGG': 'W', 'CTT': 'L', 765 'CTC': 'L', 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 766 'CCA': 'P', 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 767 'CAG': 'Q', 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 768 'ATT': 'I', 'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 'ACT': 'T', 769 'ACC': 'T', 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 770 'AAA': 'K', 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'R', 771 'AGG': 'R', 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 772 'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 773 'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 774 'GGA': 'G', 'GGG': 'G', }, 775 stop_codons = [ 'TAA', 'TGA', ], 776 start_codons = [ 'ATG', ] 777 ) 778 register_ncbi_table(name = 'Chlorophycean Mitochondrial', 779 alt_name = None, id = 16, 780 table = { 781 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 782 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 783 'TAG': 'L', 'TGT': 'C', 'TGC': 'C', 'TGG': 'W', 'CTT': 'L', 784 'CTC': 'L', 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 785 'CCA': 'P', 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 786 'CAG': 'Q', 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 787 'ATT': 'I', 'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 'ACT': 'T', 788 'ACC': 'T', 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 789 'AAA': 'K', 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'R', 790 'AGG': 'R', 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 791 'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 792 'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 793 'GGA': 'G', 'GGG': 'G', }, 794 stop_codons = [ 'TAA', 'TGA', ], 795 start_codons = [ 'ATG', ] 796 ) 797 register_ncbi_table(name = 'Trematode Mitochondrial', 798 alt_name = None, id = 21, 799 table = { 800 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 801 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 802 'TGT': 'C', 'TGC': 'C', 'TGA': 'W', 'TGG': 'W', 'CTT': 'L', 803 'CTC': 'L', 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 804 'CCA': 'P', 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 805 'CAG': 'Q', 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 806 'ATT': 'I', 'ATC': 'I', 'ATA': 'M', 'ATG': 'M', 'ACT': 'T', 807 'ACC': 'T', 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 808 'AAA': 'N', 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'S', 809 'AGG': 'S', 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 810 'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 811 'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 812 'GGA': 'G', 'GGG': 'G', }, 813 stop_codons = [ 'TAA', 'TAG', ], 814 start_codons = [ 'ATG', 'GTG', ] 815 ) 816 register_ncbi_table(name = 'Scenedesmus obliquus Mitochondrial', 817 alt_name = None, id = 22, 818 table = { 819 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'TCT': 'S', 820 'TCC': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 'TAG': 'L', 821 'TGT': 'C', 'TGC': 'C', 'TGG': 'W', 'CTT': 'L', 'CTC': 'L', 822 'CTA': 'L', 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 'CCA': 'P', 823 'CCG': 'P', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 'CAG': 'Q', 824 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 'ATT': 'I', 825 'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 'ACT': 'T', 'ACC': 'T', 826 'ACA': 'T', 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 'AAA': 'K', 827 'AAG': 'K', 'AGT': 'S', 'AGC': 'S', 'AGA': 'R', 'AGG': 'R', 828 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 'GCT': 'A', 829 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D', 830 'GAA': 'E', 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G', 831 'GGG': 'G', }, 832 stop_codons = [ 'TCA', 'TAA', 'TGA', ], 833 start_codons = [ 'ATG', ] 834 ) 835 register_ncbi_table(name = 'Thraustochytrium Mitochondrial', 836 alt_name = None, id = 23, 837 table = { 838 'TTT': 'F', 'TTC': 'F', 'TTG': 'L', 'TCT': 'S', 'TCC': 'S', 839 'TCA': 'S', 'TCG': 'S', 'TAT': 'Y', 'TAC': 'Y', 'TGT': 'C', 840 'TGC': 'C', 'TGG': 'W', 'CTT': 'L', 'CTC': 'L', 'CTA': 'L', 841 'CTG': 'L', 'CCT': 'P', 'CCC': 'P', 'CCA': 'P', 'CCG': 'P', 842 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 'CAG': 'Q', 'CGT': 'R', 843 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 'ATT': 'I', 'ATC': 'I', 844 'ATA': 'I', 'ATG': 'M', 'ACT': 'T', 'ACC': 'T', 'ACA': 'T', 845 'ACG': 'T', 'AAT': 'N', 'AAC': 'N', 'AAA': 'K', 'AAG': 'K', 846 'AGT': 'S', 'AGC': 'S', 'AGA': 'R', 'AGG': 'R', 'GTT': 'V', 847 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 'GCT': 'A', 'GCC': 'A', 848 'GCA': 'A', 'GCG': 'A', 'GAT': 'D', 'GAC': 'D', 'GAA': 'E', 849 'GAG': 'E', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G', 'GGG': 'G', }, 850 stop_codons = [ 'TTA', 'TAA', 'TAG', 'TGA', ], 851 start_codons = [ 'ATT', 'ATG', 'GTG', ] 852 ) 853 854 855 856 #Basic sanity test, 857 for key, val in generic_by_name.items(): 858 assert key in ambiguous_generic_by_name[key].names 859 for key, val in generic_by_id.items(): 860 assert ambiguous_generic_by_id[key].id == key 861 del key, val 862 863 for n in ambiguous_generic_by_id.keys(): 864 assert ambiguous_rna_by_id[n].forward_table["GUU"] == "V" 865 assert ambiguous_rna_by_id[n].forward_table["GUN"] == "V" 866 if n != 23 : 867 #For table 23, UUN = F, L or stop. 868 assert ambiguous_rna_by_id[n].forward_table["UUN"] == "X" #F or L 869 #R = A or G, so URR = UAA or UGA / TRA = TAA or TGA = stop codons 870 if "UAA" in unambiguous_rna_by_id[n].stop_codons \ 871 and "UGA" in unambiguous_rna_by_id[n].stop_codons: 872 try: 873 print ambiguous_dna_by_id[n].forward_table["TRA"] 874 assert False, "Should be a stop only" 875 except KeyError: 876 pass 877 assert "URA" in ambiguous_generic_by_id[n].stop_codons 878 assert "URA" in ambiguous_rna_by_id[n].stop_codons 879 assert "TRA" in ambiguous_generic_by_id[n].stop_codons 880 assert "TRA" in ambiguous_dna_by_id[n].stop_codons 881 del n 882 assert ambiguous_generic_by_id[1] == ambiguous_generic_by_name["Standard"] 883 assert ambiguous_generic_by_id[4] == ambiguous_generic_by_name["SGC3"] 884 assert ambiguous_generic_by_id[11] == ambiguous_generic_by_name["Bacterial"] 885 assert ambiguous_generic_by_id[11] == ambiguous_generic_by_name["Plant Plastid"] 886 assert ambiguous_generic_by_id[15] == ambiguous_generic_by_name['Blepharisma Macronuclear'] 887 assert generic_by_id[1] == generic_by_name["Standard"] 888 assert generic_by_id[4] == generic_by_name["SGC3"] 889 assert generic_by_id[11] == generic_by_name["Bacterial"] 890 assert generic_by_id[11] == generic_by_name["Plant Plastid"] 891 assert generic_by_id[15] == generic_by_name['Blepharisma Macronuclear'] 892