Sorry that was supposed to be Berend and not Ben
On 15 February 2013 09:28, Jannetta Steyn <[email protected]> wrote: > Hi Ben > > Thank you so much for spending the time to look at my code. I really > appreciate it. > > The unnecessary parameters were artefacts from me working on the model and > putting things in and taking things out. > > The model isn't quite producing what I expect yet, but it is definitely > starting to look more interesting :-) > > I am now getting this error: > > > plot(ode) > Error in is.null(times) : 'times' is missing > > What on earth does it mean because I cant see any 'times' being missing. > To me it seems that all is there?!? > > Kind Regards > Jannetta > > > On 14 February 2013 17:41, Berend Hasselman <[email protected]> wrote: > >> >> Forgot Reply to All. >> >> On 13-02-2013, at 23:30, Jannetta Steyn <[email protected]> wrote: >> >> > Hi All >> > >> > I have been struggling with this model for some time now and I just >> can't >> > get it to work correctly. The messages I get when running the code is: >> > >> > DLSODA- Warning..Internal T (=R1) and H (=R2) are >> > such that in the machine, T + H = T on the next step >> > (H = step size). Solver will continue anyway. >> > In above message, R = >> > [1] 0 0 >> > DINTDY- T (=R1) illegal >> > In above message, R = >> > [1] 0.1 >> > T not in interval TCUR - HU (= R1) to TCUR (=R2) >> > In above message, R = >> > [1] 0 0 >> > DINTDY- T (=R1) illegal >> > In above message, R = >> > [1] 0.2 >> > T not in interval TCUR - HU (= R1) to TCUR (=R2) >> > In above message, R = >> > [1] 0 0 >> > DLSODA- Trouble in DINTDY. ITASK = I1, TOUT = R1 >> > In above message, I = >> > [1] 1 >> > In above message, R = >> > [1] 0.2 >> > Error in lsoda(y, times, func, parms, ...) : >> > illegal input detected before taking any integration steps - see written >> > message >> > >> > >> > >> > I'll first paste the formulae and then I'll paste my code. If anyone can >> > spot something wrong with my implementation it would really make my day. >> > >> > (1) >> > dV/dt = (I_ext - I_int-I_coup)/C >> > I_ext = injected current >> > I_int = Sum of all ion currents >> > I_coup = coupling current (but we're not using it here ) >> > >> > (2) >> > I_i = g_i * m_i^pi * h_i^pi(V-E) >> > i identifies the ion, thus I_K would be Potassium current. >> > >> > (3) >> > dm/dt = (m_inf*V - m)/tau_m >> > >> > (4) >> > dh/dt = (h_inf*V-h)/tau_h >> > >> > (5) >> > The Nernst equation is used to calculate reversal potential for Ca: >> > Eca = 12.2396 * log(13000/Ca2+) >> > >> > (6) >> > d[Ca_2+]/dt = (F*I_Ca - [Ca2+] + C0)/Tau_Ca >> > >> > >> > tau_m, tau_h, m_inf and h_inf are all calculated according to formulae >> > provided in a paper. In my code these are calculated for the different >> > channels into the following variables: >> > >> > CaTminf, CaThinf, CaTtaum, CaTtauh, CaSminf, CaStaum, Napminf, Naphinf, >> > taumna, tauhna, hminf, htaum, Kminf and Ktaum >> > >> > The E (reversal potential) values for all the channels are given, except >> > for CaT and CaS which uses Eca as calculated in (5). >> > >> > Current for Ca is calculated by summing the CaT and CaS currents, hence >> > CaI = gCaT*CaTm^3*CaTh*(v-Eca(v)) + gCaS*CaSm^3(v-ECa(v) >> > >> > >> > Here is the code: >> > >> > library(simecol) >> > ## Hodkin-Huxley model >> > HH_soma <- function(time, init, parms) { >> > with(as.list(c(init, parms)),{ >> > >> > # Na only used in Axon >> > #Naminf <-1/(1+exp(-(v+24.7)/5.29)); >> > #Nataum <- function(v) 1.32 - (1.26/(1+exp(-(v+120)/25))); >> > #Nahinf <-1/(1+exp((v+489)/5.18)); >> > #Natauh <-(0.67/(1+exp(-(v+62.9)/10))) * >> (1.5+(1/(1+exp((v+34.9)/36)))); >> > >> > #PD >> > # mca10 >> > CaTminf <- function(v) 1/(1+exp(-(v+25)/7.2)); >> > # hca10 >> > CaThinf <- function(v) 1/(1+exp(v+36)/7); >> > # taumca1 >> > CaTtaum <- function(v) 55- (49.5/(1+exp(-v+58)/17)); >> > # tauhca1 >> > CaTtauh <- function(v) 350 - (300/(1+exp(-v+50)/16.9)); >> > >> > #mca20 >> > CaSminf <- function(v) 1/(1+exp(-(v+22)/8.5)); >> > #taumca2 >> > CaStaum <- function(v) 16-(13.1/(1+exp(-(v+25.1)/26.4))); >> > >> > >> > # mna0 >> > Napminf <- function(v) 1/(1+exp(-(v+26.8)/8.2)); >> > # hna0 >> > Naphinf <- function(v) 1/(1+exp(-(v+48.5)/5.18)); >> > >> > taumna <- function(v) 19.8-(10.7/(1+exp(-(v+26.5)/8.6))); >> > tauhna <- function(v) 666-(379/(1+exp(-(v+33.6)/11.7))); >> > >> > # mh0 >> > hminf <- function(v) 1/(1+exp(v+70)/6); >> > # taumh >> > htaum <- function(v) 272+(1499/(1+exp(-(v+42.2)/8.73))); >> > >> > Kminf <- function(v) 1/(1+exp(-(v+14.2)/11.8)); >> > Ktaum <- function(v) 7.2-(6.4/(1+exp(-(v+28.3)/19.2))); >> > >> > # Reversal potential of intracellular calcium concentration >> > # Nernst Equation using extracellular concentration of Ca = 13mM >> > # eca >> > ECa <- function(Ca2) 12.2396*log(13000/(Ca2)); >> > #ECa <- function(CaI) 12.2396*log(13000/(CaI)); >> > >> > >> > #Sum of all the Ca >> > # function(v) CaTminf(v) + CaSminf(v); >> > CaI <- gCaT*CaTm^3*CaTh*(v-ECa(CaI)) + gCaS*CaSm^3*(v-ECa(CaI)) >> > >> > #AB >> > #dCa2 <- (((-F*Caminf(v))-Caminf(v) + C0)/TauCa) >> > dCa2 <- (((-F*CaI) - Ca2 + C0)/TauCa) >> > >> > # mk20 >> > KCaminf <- function(v, Ca2) (Ca2/(Ca2+30))*(1/(1+exp(-(v+51)/8))); >> > # taumk >> > KCataum <- function(v) 90.3 - ((75.09/(1+exp(-(v+46)/22.7)))); >> > >> > #AB >> > Aminf <- function(v) 1/(1+exp(-(v+27)/8.7)); >> > Ahinf <- function(v) 1/(1+exp((v+56.9)/4.9)); >> > Ataum <- function(v) 11.6-(10.4/(1+exp(-(v+32.9)/15.2))); >> > Atauh <- function(v) 38.6-(29.2*(1+exp(-(v+38.9)/26.5))); >> > >> > #proc >> > #mp0 >> > procminf <- function(v) 1/(1+exp((v+56.9)/4)); >> > #taump >> > proctaum <- function(v) 0.5; >> > >> > >> > dv <- (-1*(I >> > + CaI >> > + gNap*Napm^3*Naph*(v-ENap) >> > + gh*hm*(v-Eh) >> > + gK*Km^4*(v-EK) >> > + gKCa * KCam^4*(v-EKCa) >> > + gA*Am^4*Ah*(v-EA) >> > + gL*(v-EL)) >> > / C); >> > >> > >> > dCaTm <- (CaTminf(v) - CaTm)/CaTtaum(v); >> > dCaTh <- (CaThinf(v) - CaTh)/CaTtauh(v); >> > >> > dCaSm <- (CaSminf(v) - CaSm)/CaStaum(v); >> > >> > dNapm <- (Napminf(v) - Napm)/taumna(v); >> > dNaph <- (Napminf(v) - Naph)/tauhna(v); >> > >> > dhm <- (hminf(v) - hm)/htaum(v); >> > >> > dKm <- (Kminf(v) - Km)/Ktaum(v); >> > >> > dKCam <- (KCaminf(v, Ca2) - KCam)/KCataum(v); >> > >> > dAm <- (Aminf(v) - Am)/Ataum(v); >> > dAh <- (Ahinf(v) - Ah)/Atauh(v); >> > >> > >> > list(c(dv, >> > dCaTm, dCaTh, >> > dCaSm, >> > dNapm, dNaph, >> > dhm, >> > dKm, >> > dKCam, >> > dCa2, >> > dAm, dAh)) >> > }) >> > } >> > parms = c(gCaT=22.5, gCaS=60, gNap=4.38, gh=0.219, >> > gK=1576.8, gKCa=251.85, gA=39.42, gL=0.105, >> > ENap=50, Ca2=0.52, >> > Eh=-20, EK=-80, EL=-55, EKCa=-80, EA=-80, >> > C=1/12, I=10, F=0.418, TauCa=303, C0=0.5, CaI=0); >> > times = seq(from=0, to=400, by=0.1); >> > init = c(v=-65, CaTm=0.52 , CaTh=0.52, CaSm=0.52, >> > Napm=0.52, Naph=0.52, hm=0.52, Km=0.52, >> > KCam=0.52, Am=0.52, Ah=0.52, ECa=-80); >> > >> > >> > out<-ode(y=init, times=times, func=HH_soma, parms=parms); >> > o<-data.frame(out); >> > plot(o$time, o$v, type='l'); >> > >> >> 1. why are you suing simecol when only deSolve is necessary? >> >> 2. there are some errors in your model. The return list from function >> HH_soma does not correspond with the state variables. >> You return dCa2 but there is no state variable Ca2. ECa is in the >> initial state variable init but there is no dECa derivative in the return >> list of function HH_SOMA. Finally you have set parameter CaI to 0 in the >> parms vector. >> But that parameter is only used in calling function ECa with argument >> CaI, where you are now dividing by 0 and taking the logarithm of the result >> (which is Inf). >> >> So change the return list of function HH_soma to >> >> list(c(dv, >> dCaTm, dCaTh, >> dCaSm, >> dNapm, dNaph, >> dhm, >> dKm, >> dKCam, >> # dCa2, <==== Not needed not in init >> dAm, dAh)) >> >> Change parms into (change CaI to 1; if that is a sensible value if for >> you to decide). >> >> parms = c(gCaT=22.5, gCaS=60, gNap=4.38, gh=0.219, >> gK=1576.8, gKCa=251.85, gA=39.42, gL=0.105, >> ENap=50, Ca2=0.52, >> Eh=-20, EK=-80, EL=-55, EKCa=-80, EA=-80, >> C=1/12, I=10, F=0.418, TauCa=303, C0=0.5, CaI=1) >> >> and change the initial state to (leaving out ECa) >> >> init = c(v=-65, CaTm=0.52 , CaTh=0.52, CaSm=0.52, >> Napm=0.52, Naph=0.52, hm=0.52, Km=0.52, >> KCam=0.52, Am=0.52, Ah=0.52)#, ECa=-80); >> >> >> Finally you don't need to end R expressions with ; (only needed to join >> several expressions on a single line) >> >> I uses library(deSolve) and got an interesting plot. >> >> Berend >> >> ______________________________________________ >> [email protected] mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > > > > -- > > =================================== > Web site: http://www.jannetta.com > Email: [email protected] > =================================== > -- =================================== Web site: http://www.jannetta.com Email: [email protected] =================================== [[alternative HTML version deleted]] ______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.

