# Copyright 2013 by Zheng Ruan (zruan1991@gmail.com). # All rights reserved. # This code is part of the Biopython distribution and governed by its # license. Please see the LICENSE file that should have been included # as part of this package. """Code for Codon Alphabet. CodonAlphabet class is inherited from Alphabet class. It is an alphabet for CodonSeq class. """ import copy try: from itertools import izip except ImportError: izip = zip from Bio.Alphabet import IUPAC, Gapped, HasStopCodon, Alphabet from Bio.Data.CodonTable import generic_by_id default_codon_table = copy.deepcopy(generic_by_id[1]) class CodonAlphabet(Alphabet): """Generic Codon Alphabet with a size of three.""" size = 3 letters = None name = "" def __repr__(self): return "%s(%s)" % (self.__class__.__name__, self.names[0]) def get_codon_alphabet(codon_table, gap_char="-"): """Construct a CodonAlphabet from a given codon table.""" letters = list(codon_table.forward_table.keys()) letters.extend(codon_table.stop_codons) letters.extend(codon_table.start_codons) if gap_char: letters.append(gap_char * 3) generic_codon_alphabet = CodonAlphabet() generic_codon_alphabet.letters = letters generic_codon_alphabet.gap_char = "-" generic_codon_alphabet.names = codon_table.names return generic_codon_alphabet default_codon_alphabet = get_codon_alphabet(default_codon_table) def compare_codon_alphabet(codon_alphabet_1, codon_alphabet_2): """Compare two codon alphabet. Return True is they have the same letter and gap_char, Otherwise return False. """ for codon_alphabet in [codon_alphabet_1, codon_alphabet_2]: if not isinstance(codon_alphabet, CodonAlphabet): raise TypeError("Only CodonAlphabet object accepted." "{} is provided.".format(object(codon_alphabet))) return (set(codon_alphabet_1.letters) == set(codon_alphabet_2.letters) and codon_alphabet_1.gap_char == codon_alphabet_2.gap_char) if __name__ == "__main__": from Bio._utils import run_doctest run_doctest()