def tumorSizeCalcExp(sequence, mRate, size, reachMaxRes): days = len(sequence) k = 1 growthRates = np.full(size, .5) resistances = main.expResAssign(size, 1.001, 0, reachMaxRes) popArr = main.calcPopDistribution(int(size), .01) mutationRatesUp, mutationRatesDown = main.detMutationRate(mRate, size) resultArr = odeint( main.calculateChange, popArr, np.arange(0, days, 1), (growthRates, mutationRatesUp, mutationRatesDown, k, resistances, main.periodicDrugDay(sequence, days), np.zeros(popArr.size))) return np.sum(resultArr)
def costOfResFunction(sequence, mRate, size, maxResSwitchNumb, n): days = len(sequence) k = 1 resistances = main.expResAssign(size, n, 0, maxResSwitchNumb) popArr = main.calcPopDistribution(int(size), 1) mutationRatesUp, mutationRatesDown = main.detMutationRate(mRate, size) growthRate = main.costOfRes(.25, resistances) resultArr = odeint( main.calculateChange, popArr, np.arange(0, days, 1), (growthRate, mutationRatesUp, mutationRatesDown, k, resistances, main.periodicDrugDay(sequence, days), np.zeros(popArr.size))) return np.sum(resultArr)
def tumorSizeCalcLinear(sequence, mRate, size): days = len(sequence) k = 1 growthRates = np.full(size, .5) resistances = main.assignResistance(size, [0, 1]) popArr = main.calcPopDistribution(int(size), .01) mutationRatesUp, mutationRatesDown = main.detMutationRate( mRate, size, True, False) resultArr = odeint( main.calculateChange, popArr, np.arange(0, days, 1), (growthRates, mutationRatesUp, mutationRatesDown, k, resistances, main.periodicDrugDay(sequence, days), np.zeros(popArr.size))) return np.sum(resultArr[50, :])
def varyParametersPop(initialMutRate, endMutRate, maxSize, k, drugWeeks, timesteps, initPopSize): xs = np.arange(initialMutRate, endMutRate, .01) ys = range(2, maxSize + 1) resultsArr = np.zeros((len(ys), len(xs))) for x, mRate in enumerate(xs): for y, size in enumerate(ys): mutationRateUp, mutationRateDown = main.detMutationRate( mRate * size, size) popArr = main.calcPopDistribution(size, initPopSize) resistances = main.assignResistance(size, [0, 1]) change = np.zeros(size) growthRates = np.full(size, 1) results = odeint(main.calculateChange, popArr, timesteps, (growthRates, mutationRateUp, mutationRateDown, k, resistances, drugWeeks, change)) resultsArr[y, x] = np.sum(results[:][-1]) return resultsArr, xs, ys
def objectiveFun(sequence): days = 10 size = 5 k = 1 mRate = .05 growthRates = np.full(size, .5) popArr = main.calcPopDistribution(size, .01) resistances = main.expResAssign(size, 2, 0, size - 1) mutationRatesUp, mutationRatesDown = main.detMutationRate( mRate, size, True, False) resultArr = odeint( main.calculateChange, popArr, np.arange(0, days, 1), (growthRates, mutationRatesUp, mutationRatesDown, k, resistances, main.periodicDrugDay(sequence, days), np.zeros(popArr.size))) weightAns = 0 for i in range(0, len(resistances)): for j in range(0, len(resultArr)): weightAns = weightAns + (resistances[i] * resultArr[j][i]) return weightAns
def nextSimulation(initialPop, mRate, k, tolerance, size, days, sequence): popArr = main.calcPopDistribution(size, initialPop) resistanceArr = main.assignResistance(size, [0, 1]) growthRates = np.full(size, 1) mutationRatesUp, mutationRatesDown = main.detMutationRate(mRate, size) results = odeint( main.calculateChange, popArr, np.arange(0, 100, 1), (growthRates, mutationRatesUp, mutationRatesDown, k, resistanceArr, main.periodicDrugDay(sequence, days), np.zeros(size))) totalPops = np.sum(results, axis=0) sumPop = np.sum(totalPops) mean, standardDev = main.getMeanAndStandardDeviation(popArr) info.append([sumPop, mean, standardDev]) # For next iteration (essentially a recursion) tolerance = tolerance - 1 if tolerance > 0: nextSimulation(initialPop, mRate, k, tolerance, size + 1, days, sequence) return info