CA3 Network Model of Epileptic Activity (Sanjay et. al, 2015)

 Download zip file 
Help downloading and running models
Accession:186768
This computational study investigates how a CA3 neuronal network consisting of pyramidal cells, basket cells and OLM interneurons becomes epileptic when dendritic inhibition to pyramidal cells is impaired due to the dysfunction of OLM interneurons. After standardizing the baseline activity (theta-modulated gamma oscillations), systematic changes are made in the connectivities between the neurons, as a result of step-wise impairment of dendritic inhibition.
Reference:
1 . Sanjay M, Neymotin SA, Krothapalli SB (2015) Impaired dendritic inhibition leads to epileptic activity in a computer model of CA3. Hippocampus 25:1336-50 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Realistic Network; Extracellular;
Brain Region(s)/Organism:
Cell Type(s): Hippocampus CA3 pyramidal GLU cell; Hippocampus CA3 interneuron basket GABA cell; Hippocampus CA3 stratum oriens lacunosum-moleculare interneuron;
Channel(s):
Gap Junctions:
Receptor(s): GabaA; AMPA; NMDA;
Gene(s): HCN1; HCN2;
Transmitter(s):
Simulation Environment: NEURON; Python;
Model Concept(s): Activity Patterns; Oscillations; Pathophysiology; Epilepsy; Brain Rhythms;
Implementer(s): Neymotin, Sam [Samuel.Neymotin at nki.rfmh.org]; Sanjay, M [msanjaycmc at gmail.com];
Search NeuronDB for information about:  Hippocampus CA3 pyramidal GLU cell; Hippocampus CA3 interneuron basket GABA cell; GabaA; AMPA; NMDA;
/
SanjayEtAl2015
readme.html
CA1ih.mod *
CA1ika.mod *
CA1ikdr.mod *
CA1ina.mod *
caolmw.mod *
capr.mod *
icaolmw.mod *
icapr.mod *
iholmkop.mod *
iholmw.mod *
ihpyrkop.mod *
kahppr.mod *
kaolmkop.mod *
kapyrkop.mod *
kcaolmw.mod *
kcpr.mod *
kdrbwb.mod *
kdrolmkop.mod *
kdrpr.mod *
kdrpyrkop.mod *
misc.mod *
MyExp2Syn.mod *
MyExp2SynAlpha.mod *
MyExp2SynBB.mod *
MyExp2SynNMDA.mod *
MyExp2SynNMDABB.mod *
nafbwb.mod *
nafolmkop.mod *
nafpr.mod *
nafpyrkop.mod *
stats.mod
vecst.mod *
wrap.mod *
aux_fun.inc *
declist.hoc *
decmat.hoc *
decnqs.hoc *
decvec.hoc *
default.hoc *
drline.hoc *
Epileptic Activity.png
geom.hoc *
geom.py *
grvec.hoc *
init.hoc *
labels.hoc *
local.hoc *
misc.h *
mosinit.py
network.py *
networkmsj.py
nqs.hoc *
nqs_utils.hoc *
nrnoc.hoc *
params.py
pyinit.py *
run.py
simctrl.hoc *
stats.hoc *
syncode.hoc *
xgetargs.hoc *
xtmp
                            
// $Id: xgetargs.hoc,v 1.20 2008/05/11 17:19:11 billl Exp $

xgahfl=0
load_file("decvec.hoc")
strdef mesg
objref xgabxl,xgabxo

//* xgetargs()
// xgetargs(panel_name,command,arg1[,arg2,...],defaults) // existing or new params -- flag 2
//   may have no named params in this case since just set with call to command
//   eg xgetargs("New","redo","do this","do that","1,2")
// xgetargs(panel_name,command,"a1,a2,..") // existing params -- flag 1
// xgetargs(panel_name,command,strlist)
// xgetargs(1,...) // dismiss after setting
// xgetargs(list,...) // list of helper functions returned by xgetclrfunc()
// eg xgetargs("Random session","newrand","# of patts","patt size  ","overlap   ","5,33,7")
// optional 1st arg flag=1 means to remove panel after command is called
// Union contains: o[0]=VBox, o[1]=argv, [o[2]=param name list] o[3]=orig update
//                 o[4]=helper functions
//                 x[0]=#args, x[1]=flag, x[2]=dismiss x[3-5] reserved for future use
//                 s=panel/button name,t=quit call,u=varlable,v=scratch
obfunc xgetargs () { local i,j,args,flag,dismiss,na localobj o,argv,vb,l,st,xo
  if (!isassigned(xgabxl)) xgabxl=new List()
  st=new String2()
  na=numarg()  
  dismiss=0 i=1 
  xgabxl.append(o=new Union())
  if (argtype(i)==0) { dismiss=$1 i+=1 }
  if (argtype(i)==1) {xo=$oi i+=1} else xo=xgetclrfunc()
  o.os(4,"funcs",xo) // list of helper functions
  o.xs(2,"dismiss",dismiss) // dismiss=1 means dismiss at end
  o.os(1,"argv",argv=new Vector(na))
  argv.resize(0)
  o.os(0,"vb",vb=new VBox())
  sprint(o.t,"xgaqt(%s)",o)
  vb.dismiss_action(o.t)
  o.s=$si i+=1 o.t=$si i+=1
  vb.intercept(1)
  xpanel(o.s)
  xvarlabel(o.u)
  sprint(o.v,"xgetexec(%s)",o)
  xbutton(o.s,o.v)
  excu("xgetbuttn",o.o[4],o)
  if (i==na) { // this should be a list of existing params
    o.xs(1,"flag",flag=1) // flag -- variables have names
    o.os(2,"plist",l=new List()) // list of param names
    if (argtype(i)==2) {
      split_interp=1
      split($si,l) // list of strings
      split($si,argv) // list of values
    } else if (argtype(i)==1) {
      for ltr(xo,$oi) {
        l.append(xo)
        argv.append(str2num(xo.s))
      }
    } else { printf("xgetargs ERRA\n") xpanel() return o=nil}
    args=argv.size
    if (args==0) { // create them
      for ltr(xo,l) {
        sprint(st.s,"%s=1",xo.s) execute(st.s)
        args=l.count argv.resize(args) argv.fill(1)
      }
    } else if (args!=l.count) {printf("xgetargs ERRB %d %d\n",args,l.count) xpanel() return o=nil}
    o.os(3,"orig",argv.c)   // save original values
    o.xs(0,"nargs",args)
    excu("xgetlabl",o.o[4],o)
    for j=0,args-1 {
      sprint(o.v,"%s.x[%d]",argv,j)
      sprint(st.s,"xgetchg(%s,%d)",o,j)
      xvalue(l.o(j).t, o.v, 1, st.s, 1)
    }
  } else {
    j=i i=na
    if (strm($si,"^[a-z]")) { // a named variable; should all be name vars
      o.xs(1,"flag",flag=3) // flag -- variables have names and routine is called with args
      split_interp=1
      split($si,argv)
      o.os(2,"plist",l=new List()) // list of param names
      split($si,l) // list of strings
    } else {
      split_interp=0
      split($si,argv)
      o.xs(1,"flag",flag=2) // flag -- variables may have no names; are just args to a function
    }
    i=j // restore i
    o.xs(0,"nargs",args=argv.size)
    if (args!=na-i) { printf("xgetargs ERRC: mismatch %d %d\n",args,na-i) xpanel() return o=nil }
    o.os(3,"orig",argv.c)   // save original values
    for j=0,args-1 {
      sprint(o.v,"%s.x[%d]",argv,j)
      sprint(st.s,"xgetchg(%s,%d)",o,j)
      xvalue($si,o.v,1,st.s,1)
      if (flag==3) l.o(j).t=$si
      i+=1
    }
  }
  o.u=o.s // start with this label
  // xbutton("Help (2 clicks)","xgah()")
  xpanel()
  vb.intercept(0)
  vb.full_request(1)
  vb.map(o.s)
  xgabxo=o // global for current xgab object
  return o
}

//* xgah() should provide help -- doesn't
proc xgah () { 
  if (xgahfl==1) {
    continue_dialog("Press help button first, then elsewhere for button-specific help")
    xgahfl=0
  } else xgahfl=1
}

//* xgetclrfunc() -- set up the callbacks as empty functions
obfunc xgetclrfunc () { local flag localobj st,xo,o
  flag=0
  if (numarg()==1) if (isobj($o1,"List")) flag=1
  if (flag) { // just clear the functions
    for ltr(xo,$o1) xo.t="" // clear
    return $o1
  } else { // create
    st=new String() o=new List()
    for scase(st,"xgetchg2","xgetexec2","xgaqt2","xgetlabl","xgetbuttn") {
      o.append(new String2(st.s)) }
    if (numarg()==1) $o1=o
    return o
  }
}

//* xgetchg() done after a value is changed
proc xgetchg () { local i localobj o
  o=$o1 i=$2
print "A",o,i,o.o[4]
  if (excu("xgetchg2",o.o[4],o,i)) return
  sprint(o.u,"Press '%s' button for effect",o.s)
}

//* xgetexec() done when the 'make changes' button is pressed
proc xgetexec () { local i,args,dismiss,flag localobj o,l,av,vb,xo
  o=$o1
  if (excu("xgetexec2",o.o[4],o)) return
  args=o.x flag=o.x[1] dismiss=o.x[2] av=o.o[1] vb=o.o
  if (flag==1 || flag==3) {
    l=o.o[2]
    if (args!=l.count || args!=av.size) {
      printf("xgetexec() ERRA %d,%d,%d\n",args,l.count,av.size) return
    }
    for ltr(xo,l,&i) {
      sprint(o.v,"%s=%g",xo.s,av.x[i])
      execute(o.v)
    }
    if (flag==1) { // call the routine -- else will call below
      if (strm(o.t,"[(]")) o.v=o.t else sprint(o.v,"%s(%s)",o.t,o) // no args passed to function
    }
  }
  if (flag==2 || flag==3) {
    sprint(o.v,"%s(",o.t)
    for i=0,args-2 sprint(o.v,"%s%g,",o.v,av.x[i])
    sprint(o.v,"%s%g)",o.v,av.x[i]) 
  }
  execute(o.v)
  o.u="Changes submitted"
  if (dismiss) { xgaqt(o) // get rid of the box
  } else { o.o[3].copy(o.o[1]) } // new set of origs
}
  
//* xgaqt() called when the panel is dismissed
proc xgaqt () { local x localobj av,vb,o
  o=$o1 
  if (excu("xgaqt2",o.o[4],o)) return
  av=o.o[1] vb=o.o
  vb.unmap()
  if ((x=xgabxl.index(o))!=-1) xgabxl.remove(x)
  if (xgabxo==o) xgabxo=nil
}

Loading data, please wait...