In [2]:
import math

In [8]:
class boston:
K = 0.22
a1 = 0.02
a2 = 0.022
U0 = 1.

@classmethod
def activity(cls, t):
#p(t) = K U0 (e−α1t − e−α2t).
#         where U0 is the subcutaneous-drug impulse dose in units (U), K is a constant, in dl−1, associated with the amplitude
#         of the impulse response of p(t), and α1 and α2 are positive constants in min−1 (or s−1, depending on t). The latter
#         three constants can all be identified from values of the peak absorption time, the peak absorption concentration, and
#         the overall time of action associated with the pharmacokinetics of insulin, which depends on the the type of insulin
#         used.
return cls.K*cls.U0*(math.exp(-cls.a1*t) - math.exp(-cls.a2*t))

@classmethod
def activityRolling(cls, ts):
now = len(ts)
s = 0
for t in range(0, len(ts)):
s += ts[t]*cls.activity(now-t)
return s

@classmethod
def iob(cls, t):
return ((cls.K*cls.U0)/(cls.a1*cls.a2))*(cls.a2*math.exp(-cls.a1*t) - cls.a1*math.exp(-cls.a2*t))

def printc(arr):
for a in arr:
print '\t%s,' % a

In [6]:
r = range(0,240, 5)

act = [boston.activity(t) for t in r]
iob = [boston.iob(t) for t in r]

In [10]:
printc(act)

	0.0,
0.00198072220267,
0.00356663012541,
0.00481678719495,
0.00578239748955,
0.00650778685307,
0.00703126635251,
0.00738589180564,
0.00760013153584,
0.00769845311808,
0.00770183864414,
0.007628236939,
0.0074929601882,
0.00730903157386,
0.00708748975322,
0.00683765533609,
0.00656736391775,
0.00628316969227,
0.00599052320035,
0.00569392634914,
0.00539706747234,
0.00510293887253,
0.00481393899865,
0.00453196115612,
0.00425847042127,
0.00399457023178,
0.00374105994875,
0.00349848452972,
0.00326717731476,
0.00304729680581,
0.00283885821266,
0.00264176044389,
0.0024558091383,
0.00228073625832,
0.00211621670238,
0.00196188233647,
0.00181733379425,
0.00168215035183,
0.00155589814368,
0.00143813695266,
0.00132842577685,
0.00122632734971,
0.00113141176704,
0.00104325935394,
0.000961462887324,
0.000885629274022,
0.000815380770979,
0.000750355822145,