1
2
3
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 = {}
21 generic_by_id = {}
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 = {}
28 ambiguous_generic_by_id = {}
29
30
31 standard_dna_table = None
32 standard_rna_table = None
33
34
35
36
37
40
117
128
129
141
142
145
148
149
150
151
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
167
168
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
175
176
178 return getattr(self._codon_table, name)
179
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
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
200 raise KeyError(codon)
201 return possible.keys()
202
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
218
219
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
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[:]
238
239 for ambig_codon in candidates:
240 wanted = True
241
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
248 wanted=False
249
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
262
263
264
265
266
267
268
269
270
271
272
273
274
275
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
302 try:
303 x = self._cache[codon]
304 except KeyError:
305 pass
306 else:
307 if x is TranslationError:
308 raise TranslationError(codon)
309 if x is KeyError:
310 raise KeyError(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
320
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)
328 except TranslationError:
329 self._cache[codon] = TranslationError
330 raise TranslationError(codon)
331 assert len(possible) > 0, "unambiguous codons must code"
332
333
334 if len(possible) == 1:
335 self._cache[codon] = possible[0]
336 return possible[0]
337
338
339
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
352 if len(possible) == 0:
353 self._cache[codon] = TranslationError
354 raise TranslationError(codon)
355
356
357
358
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
373 """Turns codon table data into objects, and stores them in the dictionaries (PRIVATE)."""
374
375
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
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
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
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
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
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
868 assert ambiguous_rna_by_id[n].forward_table["UUN"] == "X"
869
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