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)