def sites_count_dict(codon_transitions=codon_weighting(empirical_mutations())): """Count sites for each codon, weighted by a mutation distribution.""" codons = [] for a in 'ATCG': for b in 'ATCG': for c in 'ATCG': codons.append(a + b + c) d = dict() for codon in codons: a = 0 s = 0 for i in range(len(codon)): bases = list('ATCG') bases.remove(codon[i]) aa = sequtil.translate_orf(codon) for base in bases: new_codon = list(codon) new_codon[i] = base new_codon = "".join(new_codon) new_aa = sequtil.translate_orf(new_codon) if new_aa == aa: s += 3 * codon_transitions[(codon, new_codon)] else: a += 3 * codon_transitions[(codon, new_codon)] d[codon] = (a, s) return d
def sites_count_dict(codon_transitions=codon_weighting(empirical_mutations())): """Count sites for each codon, weighted by a mutation distribution.""" codons = [] for a in 'ATCG': for b in 'ATCG': for c in 'ATCG': codons.append(a + b + c) d = dict() for codon in codons: a = 0 s = 0 for i in range(len(codon)): bases = list('ATCG') bases.remove(codon[i]) aa = sequtil.translate_orf(codon) for base in bases: new_codon = list(codon) new_codon[i] = base new_codon = "".join(new_codon) new_aa = sequtil.translate_orf(new_codon) if new_aa == aa: s += 3 * codon_transitions[(codon, new_codon)] else: a += 3 * codon_transitions[(codon, new_codon)] d[codon] = (a,s) return d
def is_nonsyn(snp): 'test whether snp is non-synonymous, assuming frame 0 CDS annotation' geneSNP = snp.geneSNP ipos = geneSNP.start % 3 codonStart = geneSNP.start - ipos codon = str(geneSNP.path.sequence[codonStart:codonStart + 3]) b = snp.alt # substitution letter if geneSNP.sequence.orientation < 0: # must complement b = rcDict[b.upper()] codonAlt = codon[:ipos] + b + codon[ipos + 1:] snp.aaRef = sequtil.translate_orf(codon) snp.aaAlt = sequtil.translate_orf(codonAlt) return snp.aaRef != snp.aaAlt
def test_simple_translate(self): db = self.db assert sequtil.translate_orf(str(db['methionine'])) == 'M' assert sequtil.translate_orf(str(db['flim'])) == 'FLIM'