STATE {
A (uS) : rising component
B (uS) : fast decyaing component
C (uS) : slow decyaing component
tmax (ms) : point at which function is maximal
}
NONLINEAR peak {
~ 1/taurise*exp(-tmax/taurise)-afast/taufast*exp(-tmax/taufast)-aslow/tauslow*exp(-tmax/tauslow) = 0
}
INITIAL {
taurise = q10^(-(celsius-T_exp)/10(degC))*taurise_exp
taufast = q10^(-(celsius-T_exp)/10(degC))*taufast_exp
tauslow = q10^(-(celsius-T_exp)/10(degC))*tauslow_exp
aslow = 1 - afast
: Estimate time of peak
tmax = log(taufast/taurise)/(1/taurise-1/taufast)
: normfac = -exp(-tmax/taurise)+afast*exp(-tmax/taufast)+aslow*exp(-tmax/tauslow)
: printf("tmax: %g, normfac: %g\n", tmax, normfac)
: Find time of peak and normfac numerically
: (seem to be quite similar to estimate, so maybe this is a waste of time!)
SOLVE peak
normfac = -exp(-tmax/taurise)+afast*exp(-tmax/taufast)+aslow*exp(-tmax/tauslow)
: printf("tauslow: %g, tmax: %g, normfac: %g\n", tauslow, tmax, normfac)
total = 0
A = 0
B = 0
C = 0
}
DERIVATIVE state {
A' = -A/taurise
B' = -B/taufast
C' = -C/tauslow
}
NET_RECEIVE(weight (uS)) {
LOCAL normweight
normweight = weight/normfac
state_discontinuity(A, A + normweight)
state_discontinuity(B, B + normweight*afast)
state_discontinuity(C, C + normweight*aslow)
total = total+normweight
}
|