예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
 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))
예제 #4
0
 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))
예제 #5
0
 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)
예제 #6
0
 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
예제 #7
0
 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
예제 #8
0
def logSum(s):
    f = s[0]
    for i in s[1:]:
        f = Maths.logAdd(f, i)
    return f
예제 #9
0
 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)
예제 #10
0
 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)
예제 #11
0
def bTransition(s, sI, s2, sI2, i, j, t, de, *args):
    s[sI + i] = Maths.logAdd(s[sI + i], s2[sI2 + j] + t + de)
예제 #12
0
 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)
예제 #13
0
def logSum(s):
    f = s[0]
    for i in s[1:]:
        f = Maths.logAdd(f, i)
    return f
예제 #14
0
 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)
예제 #15
0
 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)
예제 #16
0
def bTransition(s, sI,  s2, sI2, i, j, t, de, *args):
    s[sI + i] = Maths.logAdd(s[sI + i], s2[sI2 + j] + t + de)
예제 #17
0
 def bTransition(s, sI, s2, sI2, i, j, t, de, *args):
     s2[i] = Maths.logAdd(s2[i], s[j] + t + de)
예제 #18
0
 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)
예제 #19
0
 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)