[R] An extended Hodgkin-Huxley model that doesn't want to work.

Berend Hasselman bhh at xs4all.nl
Fri Feb 15 11:32:58 CET 2013


On 15-02-2013, at 11:22, Jannetta Steyn <jannetta at henning.org> wrote:

> Hi Berend
> 
> This is the code. Pretty much just changed to what you suggested which is
> CaI=1, removing the unnecessary variables and using deSolve:
> 
> rm(list = ls())
> library(deSolve)
> ## Hodkin-Huxley model
> HH_soma <-  function(times, 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,
>           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=6.5, F=0.418, TauCa=303, C0=0.5, CaI=1);
> time = seq(from=0, to=1000, 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);
> 
> 
> out<-ode(y=init, times=time, func=HH_soma, parms=parms);
> plot(ode)
> o<-data.frame(out);
> plot(o$time, o$v, type='l');


You are not doing what I told you to do.

You should plot the result of ode not ode itself (that's the function).
So do

plot(out)

and you will get the plots.

Berend



More information about the R-help mailing list