def calculateForwardAlgoLog(initialProbabilities, transitionProbalities, emissionI, emissionD, sequences ): results = [[0,0,0,0]] results[0] = calculateFirstProbabiliesLog(initialProbabilities, emissionI, emissionD, sequences) endLength = len(sequences[0]) for t in range(1, endLength): currentCol = [0,0,0,0] for j in range(4): singleValues = [] emissionValue = generateEmissionValue(t, j, sequences, emissionI, emissionD) for i in range(4): singleValues.append(results[t-1][i] + math.log(transitionProbalities[i][j]) + math.log(emissionValue)) currentCol[j] = sumAllLogProbailities(singleValues) results.append(currentCol) return results;
def calculateBackwardsAlgoLog(transitionProbalities, emissionI, emissionD, sequences ): results = [[math.log(1),math.log(1),math.log(1),math.log(1)]] endLength = len(sequences[0]) for t in range(1, endLength): currentCol = [0,0,0,0] for i in range(4): singleValues = [] for j in range(4): indexInSequence = endLength - t; emissionValue = generateEmissionValue(indexInSequence, j, sequences, emissionI, emissionD) singleValues.append((results[0][j]) + math.log(transitionProbalities[i][j]) + math.log(emissionValue)) finalVal = sumAllLogProbailities(singleValues) if finalVal == float("inf") or finalVal == -float("inf") or finalVal == 0: print singleValues exit(0) currentCol[i] = finalVal results.insert(0,currentCol) return results;
def likelihoodOfSequence(forwardTable): lastIndex = len(forwardTable) - 1 lastCol = forwardTable[lastIndex] probability = sumAllLogProbailities(lastCol) return probability