def _align_pairwise(s1, s2, mprobs, psub, TM, local, return_alignment=True, return_score=False, **kw): """Generic alignment with any substitution model and indel model""" [p1, p2] = [make_likelihood_tree_leaf(seq) for seq in [s1, s2]] [p1, p2] = [pairwise.AlignableSeq(leaf) for leaf in [p1, p2]] pair = pairwise.Pair(p1, p2) EP = pair.make_simple_emission_probs(mprobs, [psub]) hmm = EP.make_pair_HMM(TM) vpath = hmm.get_viterbi_path(local=local, **kw) score = vpath.get_score() if return_alignment: alignment = vpath.get_alignment() if return_score: return (alignment, score) else: return alignment else: return score
def Edge(seq1, seq2, length, bin_data, switch=1.0, bprobs=None): # one sequence pair in, potentialy, a tree bins = len(bin_data) pair = pairwise.Pair(seq1, seq2) EP = pair.make_reversible_emission_probs([(bin.mprobs, bin.Qd) for bin in bin_data], length) tms = [bin.indel.calc_transition_matrix(length) for bin in bin_data] if bins == 1: TM = tms[0] else: assert bprobs R = SiteClassTransitionMatrix(switch, bprobs) TM = R.nestTransitionMatricies(tms) assert min(TM.Matrix.flat) >= 0, bin_data return EP.make_pair_HMM(TM)