Exemple #1
0
 def sparseAlignReal(self, stateMachine, points):
     p = points["points"][:]
     gp = points["gapPoints"][:]
     blp = points["blGaps"][:]
     trp = points["trGaps"][:]
     
     pPA = {}
     for i in p:
         pPA[i] = 0
         
     def join(one, two):
         def f(*args):
             two(*args)
             one(*args)
         return f
     
     total = [0]
     def totalGetter(t):
         total[0] = t
         pP.total(t)
         
     
     
     #totalFn, startDiagonal, endDiagonal, interval
     rescale = SparseAlign.Rescale(1, stateMachine.stateNo())
     
     stateMachine.mapEmissions(rescale.rescaleFn)
     
     pPoints = p[:]
     pPoints.sort()
     pPoint = pPoints[len(pPoints)-1]
     bTransition = SparseAlign.BTransitionAndTotalReCalculator(totalGetter, 0, pPoint[0] + pPoint[1], r.randrange(1, 2 + 1.5*(pPoint[0] + pPoint[1])), stateMachine.stateNo())
     pP = SparseAlign.PosteriorProbs(pPA, stateMachine.stateNo())
     fn = stateMachine.getFns(join(pP.bTransition, bTransition.bTransition))
     fn_2 = stateMachine.getFns(bTransition.bTransition)
     fn2 = stateMachine.getFns(SparseAlign.fTransition(stateMachine.stateNo()))
     
     x1 = [0]
     y1 = [0]
     x2 = [0]
     y2 = [0]
     def diagBuilder(i, j):
         x2[0] = i
         y2[0] = j
         
     def diagStart(i, j):
         x1[0] = i
         y1[0] = j
         x2[0] = i
         y2[0] = j
         
     def diagEnd():
         pass
             
     def dFW(diagFn):
         def f(s1, sI, s2, sI2, ):
             return diagFn(s1, sI, s2, sI2, x2[0]-1, y2[0]-1, x1[0], y1[0])
         return f
         
     def fn3(i):
         if i == MATCH:
             return 0
         return Maths.NEG_INFINITY
     startStates = [ fn3(i) for i in stateMachine.getStateTypes() ]
     SparseAlign.sparseAlign(startStates[:],#*stateMachine.stateNo(),
                 p, blp, trp, 
                 startStates[:],#[0]*stateMachine.stateNo(),
                 stateMachine.stateNo(),
                 
                 fn2[(MATCH, GAP)],
                 fn2[(GAP, GAP)],
                 diagStart,
                 diagBuilder,
                 diagEnd,
                 dFW(fn2[(GAP, MATCH)]),
                 dFW(fn2[(MATCH, MATCH)]),
                 
                 fn_2[(MATCH, GAP)],
                 fn_2[(GAP, GAP)],
                 join(diagStart, pP.diagStart),
                 join(diagBuilder, pP.diagBuilder),
                 join(diagEnd, pP.diagEnd),
                 dFW(fn[(GAP, MATCH)]),
                 dFW(fn[(MATCH, MATCH)]), 
                 
                 totalGetter,
                 rescale, 1000000)
     return (total[0], total[0], pPA)