Ih tunes oscillations in an In Silico CA3 model (Neymotin et al. 2013)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:151282
" ... We investigated oscillatory control using a multiscale computer model of hippocampal CA3, where each cell class (pyramidal, basket, and oriens-lacunosum moleculare cells), contained type-appropriate isoforms of Ih. Our model demonstrated that modulation of pyramidal and basket Ih allows tuning theta and gamma oscillation frequency and amplitude. Pyramidal Ih also controlled cross-frequency coupling (CFC) and allowed shifting gamma generation towards particular phases of the theta cycle, effected via Ih’s ability to set pyramidal excitability. ..."
Reference:
1 . Neymotin SA, Hilscher MM, Moulin TC, Skolnick Y, Lazarewicz MT, Lytton WW (2013) Ih tunes theta/gamma oscillations and cross-frequency coupling in an in silico CA3 model. PLoS One 8:e76285 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network;
Brain Region(s)/Organism: Hippocampus;
Cell Type(s): Hippocampus CA3 pyramidal GLU cell; Hippocampus CA3 interneuron basket GABA cell; Hippocampus CA3 stratum oriens lacunosum-moleculare interneuron;
Channel(s): I Na,t; I A; I K; I K,leak; I h; I K,Ca; I Sodium; I Potassium;
Gap Junctions:
Receptor(s): GabaA; AMPA; NMDA; Glutamate;
Gene(s): HCN1; HCN2;
Transmitter(s): Gaba; Glutamate;
Simulation Environment: NEURON; Python;
Model Concept(s): Oscillations; Brain Rhythms; Conductance distributions; Multiscale;
Implementer(s): Lazarewicz, Maciej [mlazarew at gmu.edu]; Neymotin, Sam [Samuel.Neymotin at nki.rfmh.org];
Search NeuronDB for information about:  Hippocampus CA3 pyramidal GLU cell; Hippocampus CA3 interneuron basket GABA cell; GabaA; AMPA; NMDA; Glutamate; I Na,t; I A; I K; I K,leak; I h; I K,Ca; I Sodium; I Potassium; Gaba; Glutamate;
/
ca3ihdemo
readme.txt
CA3ih.mod
CA3ika.mod
CA3ikdr.mod
CA3ina.mod
caolmw.mod *
HCN1.mod *
icaolmw.mod *
iholmw.mod *
ihstatic.mod *
kcaolmw.mod *
kdrbwb.mod *
misc.mod *
MyExp2SynBB.mod *
MyExp2SynNMDABB.mod *
nafbwb.mod *
stats.mod *
vecst.mod *
aux_fun.inc *
declist.hoc *
decmat.hoc *
decnqs.hoc *
decvec.hoc *
default.hoc *
drline.hoc *
geom.py
grvec.hoc *
init.hoc
labels.hoc *
local.hoc *
misc.h *
network.py
nqs.hoc *
nrnoc.hoc *
params.py
pyinit.py *
pywrap.hoc
run.py
sim.py
simctrl.hoc *
stats.hoc *
syncode.hoc *
xgetargs.hoc *
                            
: $Id: MyExp2SynNMDABB.mod,v 1.4 2010/12/13 21:28:02 samn Exp $ 
NEURON {
:  THREADSAFE
  POINT_PROCESS MyExp2SynNMDABB
  RANGE tau1, tau2, e, i, iNMDA, s, sNMDA, r, tau1NMDA, tau2NMDA, Vwt, smax, sNMDAmax
  NONSPECIFIC_CURRENT i, iNMDA
}

UNITS {
  (nA) = (nanoamp)
  (mV) = (millivolt)
  (uS) = (microsiemens)
}

PARAMETER {
  tau1     =   0.1 (ms) <1e-9,1e9>
  tau2     =  10 (ms) <1e-9,1e9>	
  tau1NMDA = 15  (ms)
  tau2NMDA = 150 (ms)
  e        = 0	(mV)
  mg       = 1
  r        = 1
  smax     = 1e9 (1)
  sNMDAmax = 1e9 (1)
  
  Vwt   = 0 : weight for inputs coming in from vector
}

ASSIGNED {
  v       (mV)
  i       (nA)
  iNMDA   (nA)
  s       (1)
  sNMDA   (1)
  mgblock (1)
  factor  (1)
  factor2 (1)
	
  etime (ms)
}

STATE {
  A  (1)
  B  (1)
  A2 (1)
  B2 (1)
}

INITIAL {

  LOCAL tp
  
  Vwt = 0 : testing

  if (tau1/tau2 > .9999) {
    tau1 = .9999*tau2
  }
  A = 0
  B = 0	
  tp = (tau1*tau2)/(tau2 - tau1) * log(tau2/tau1)
  factor = -exp(-tp/tau1) + exp(-tp/tau2)
  factor = 1/factor
  
  if (tau1NMDA/tau2NMDA > .9999) {
    tau1NMDA = .9999*tau2NMDA
  }
  A2 = 0
  B2 = 0	
  tp = (tau1NMDA*tau2NMDA)/(tau2NMDA - tau1NMDA) * log(tau2NMDA/tau1NMDA)
  factor2 = -exp(-tp/tau1NMDA) + exp(-tp/tau2NMDA)
  factor2 = 1/factor2  
}

BREAKPOINT {
  SOLVE state METHOD cnexp
  : Jahr Stevens 1990 J. Neurosci
  mgblock = 1.0 / (1.0 + 0.28 * exp(-0.062(/mV) * v) )
  s     = B  - A
  sNMDA = B2 - A2
  if (s    >smax)     {s    =smax    }: saturation
  if (sNMDA>sNMDAmax) {sNMDA=sNMDAmax}: saturation
  i     = s     * (v - e) 
  iNMDA = sNMDA * (v - e) * mgblock
}

DERIVATIVE state {
  A'  = -A/tau1
  B'  = -B/tau2	
  A2' = -A2/tau1NMDA
  B2' = -B2/tau2NMDA
}

NET_RECEIVE(w (uS)) {LOCAL ww
  ww=w
  :printf("NMDA Spike: %g\n", t)
  if(r>=0){ : if r>=0, g = AMPA + NMDA*r
    A  = A  + factor *ww
    B  = B  + factor *ww
    A2 = A2 + factor2*ww*r
    B2 = B2 + factor2*ww*r
  }else{
    if(r>-1000){ : if r>-1, g = NMDA*r  
      A2 = A2 - factor2*ww*r
      B2 = B2 - factor2*ww*r
    }
    : if r<0 and r<>-1, g = 0
  }
}