def fTransition(s, sI, s2, sI2, i, j, t, de, x2, y2, x1, y1): l = s[i] + t + de s2[j] = Maths.logAdd(s2[j], l) l += bMatrix[x1][y1][j] - total #print x1, x2, "boo" if x2 >= x1: raise IndexError() for k in xrange(0, x1-x2): pPA[(x1-k, y1-k)] = Maths.logAdd(pPA[(x1-k, y1-k)], l)
def bTransition(self, s, sI, s2, sI2, i, j, t, de, x1, y1, x2, y2): sD = x1 + y1 k = s2[sI2 + j] + t + de for m in xrange(len(self.__list)-1, -1, -1): l = self.__list[m] if sD < l[0]: if x2 + y2 < l[0]: self.__list.pop() #print "new total ", l[1] self.__totalFn(l[1]) else: l[1] = Maths.logAdd(l[1], s[sI + i + self.__stateNo] + k) else: break s[sI + i] = Maths.logAdd(s[sI + i], k)
def addNewScale(self, states, adP, ad): scale = Maths.NEG_INFINITY for i in xrange(adP.yS(ad), adP.yS(ad + 1)): s = adP.e[i] scale = Maths.logAdd(scale, \ logSum(states[s+self.__stateNo:s+2*self.__stateNo])) i = (adP.yS(ad + 1) - adP.yS(ad)) * self.__stateNo if i is 0: i = 1 i = Maths.log(i) if scale is Maths.NEG_INFINITY: scale = i #print "________________________________________scale ", i, scale, int(scale - i) #scale = i self.__list.append(self.__list[-1] + int(scale - i))
def addNewScale(self, states, adP, ad): scale = Maths.NEG_INFINITY for i in xrange(adP.yS(ad), adP.yS(ad+1)): s = adP.e[i] scale = Maths.logAdd(scale, \ logSum(states[s+self.__stateNo:s+2*self.__stateNo])) i = (adP.yS(ad+1) - adP.yS(ad))*self.__stateNo if i is 0: i = 1 i = Maths.log(i) if scale is Maths.NEG_INFINITY: scale = i #print "________________________________________scale ", i, scale, int(scale - i) #scale = i self.__list.append(self.__list[-1] + int(scale - i))
def bTransition(self, s, sI, s2, sI2, i, j, t, de, x1, y1, x2, y2): sD = x1 + y1 k = s2[sI2 + j] + t + de for m in xrange(len(self.__list) - 1, -1, -1): l = self.__list[m] if sD < l[0]: if x2 + y2 < l[0]: self.__list.pop() #print "new total ", l[1] self.__totalFn(l[1]) else: l[1] = Maths.logAdd(l[1], s[sI + i + self.__stateNo] + k) else: break s[sI + i] = Maths.logAdd(s[sI + i], k)
def diagEnd(self): if self.__current != 100: self.__pa.append(self.__current) j = 0.0 self.__pa.reverse() for i in self.__pa: j += Maths.exp(i) self.__pairs[(self.__x, \ self.__y)] += j self.__x += 1 self.__y += 1
def logSum(s): f = s[0] for i in s[1:]: f = Maths.logAdd(f, i) return f
def bTransition(self, s, sI, s2, sI2, i, j, t, de, *args): self.__current = \ Maths.logAdd(self.__current, s2[sI2 + j] + t + de + s[sI + self.__stateNo + i] - self.__total)
def fTransition2(s, sI, s2, sI2, i, j, t, de, x2, y2, x1, y1): l = s[i] + t + de s2[j] = Maths.logAdd(s2[j], l)
def bTransition(s, sI, s2, sI2, i, j, t, de, *args): s[sI + i] = Maths.logAdd(s[sI + i], s2[sI2 + j] + t + de)
def fTransition(s, sI, s2, sI2, i, j, t, de, *args): s2[sI2 + j + stateNo] = Maths.logAdd(s2[sI2 + j + stateNo], s[sI + i + stateNo] + t + de)
def bTransition(s, sI, s2, sI2, i, j, t, de, *args): s2[i] = Maths.logAdd(s2[i], s[j] + t + de)
def gap_de(self, x1, x2, y2): i = x2 - x1 return Maths.logAdd( GAP_OPEN + i * self.COMBINED - GAP_EXTEND + GAP_CLOSE, JUNK_OPEN + i * self.COMBINED2 - JUNK_EXTEND + JUNK_CLOSE)
def gap_de(self, x1, x2, y2): i = x2 - x1 return Maths.logAdd(GAP_OPEN + i*self.COMBINED - GAP_EXTEND + GAP_CLOSE, JUNK_OPEN + i*self.COMBINED2 - JUNK_EXTEND + JUNK_CLOSE)