def close_enough_old(self, primer, sequence, errors) : err_count = 0 for i,j in zip(sequence, primer) : if not IUPAC.equal(i, j) : err_count += 1 #if len(a) > 10 : # print a, b, err_count return err_count <= errors
def close_enough(self, primer, sequence, diff) : if diff < 0 : return False if (len(primer) == 0) or (len(sequence) == 0) : return True m = IUPAC.equal(sequence[0], primer[0]) return self.close_enough(primer[1:], sequence[1:], diff if m else diff-1) or \ self.close_enough(primer[1:], sequence, diff-1) or \ self.close_enough(primer, sequence[1:], diff-1)
def distance(self, aligned) : leng = float(min(len(aligned[0]), len(aligned[1]))) last_gap = True diff = 0 for c1,c2 in zip(aligned[0], aligned[1]) : if (c1 == '-') and (c2 == '-') : continue gap = '-' in (c1,c2) if last_gap and gap : continue if not IUPAC.equal(c1, c2) : diff += 1 last_gap = gap if last_gap : diff -= 1 return (leng - diff) / leng