Codon Tables
A suite of codon tables to be used. We've included tables from python_codon_tables below for reference.
codon_table_to_codon_map(codon_table, deterministic=True)
This is a convenience function that takes a codon map as defined by the dictionaries above and returns a backtranslation callable that takes an AA SeqLike and returns a NT SeqLike.
By default, the SeqLike back_translate() method takes kwargs. In this simple case, we do not. The codon_table and deterministic flag are baked into the returned callable and can't be changed after definition.
:param codon_table: A nested dictionary that has keys being AAs and values codon-probabilty pairs :param deterministic: if True we return the first codon and disregard the rest. :returns: A callable that takes and returns a SeqLike
Source code in seqlike/codon_tables.py
def codon_table_to_codon_map(codon_table: dict, deterministic: bool = True) -> Callable[[SeqLike], SeqLike]:
"""This is a convenience function that takes a codon map as defined by the
dictionaries above and returns a backtranslation callable that
takes an AA SeqLike and returns a NT SeqLike.
By default, the SeqLike back_translate() method takes kwargs. In
this simple case, we do not. The codon_table and deterministic
flag are baked into the returned callable and can't be changed
after definition.
:param codon_table: A nested dictionary that has keys being AAs
and values codon-probabilty pairs
:param deterministic: if True we return the first codon and disregard the rest.
:returns: A callable that takes and returns a SeqLike
"""
def backtranslator(seq):
if seq._type != "AA":
raise TypeError("Sequence must be an AA SeqLike!")
seq_str = seq.to_str()
nt = ""
for aa in seq_str:
codons, probs = zip(*codon_table[aa].items())
# we normalize the probabilities
# most tables are near 1.0, but issues with precision exist
sum_prob = sum(probs)
probs = [p / sum_prob for p in probs]
if deterministic:
nt += codons[0]
else:
nt += np.random.choice(codons, p=probs)
new_seqlike = SeqLike(
nt,
id=seq.id,
name=seq.name,
description=seq.description,
annotations=seq.annotations,
dbxrefs=seq.dbxrefs,
seq_type="dna",
codon_map=seq.codon_map,
)
new_seqlike._aa_record = deepcopy(seq._aa_record)
return new_seqlike
return backtranslator
sort_codon_table_by_frequency(codon_table)
This is a convenience function sorts the individual codons by frequency,
which is useful for obtaining a top codon codon map using the deterministic
flag in codon_table_to_codon_map()
:param codon_table: A nested dictionary that has keys being AAs and values codon-probabilty pairs :returns: a new nestted dictionary
Source code in seqlike/codon_tables.py
def sort_codon_table_by_frequency(codon_table: dict) -> dict:
"""This is a convenience function sorts the individual codons by frequency,
which is useful for obtaining a top codon codon map using the deterministic
flag in `codon_table_to_codon_map()`
:param codon_table: A nested dictionary that has keys being AAs
and values codon-probabilty pairs
:returns: a new nestted dictionary
"""
new_codon_table = dict()
for letter, codon_frequencies in codon_table.items():
new_codon_table[letter] = dict(sorted(codon_frequencies.items(), key=lambda x: x[1], reverse=True))
return new_codon_table