O-LM interneuron model (Lawrence et al. 2006)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:102288
Exploring the kinetics and distribution of the muscarinic potassium channel, IM, in 2 O-LM interneuron morphologies. Modulation of the ion channel by drugs such as XE991 (antagonist) and retigabine (agonist) are simulated in the models to examine the role of IM in spiking properties.
Reference:
1 . Lawrence JJ, Saraga F, Churchill JF, Statland JM, Travis KE, Skinner FK, McBain CJ (2006) Somatodendritic Kv7/KCNQ/M channels control interspike interval in hippocampal interneurons. J Neurosci 26:12325-38 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell;
Brain Region(s)/Organism:
Cell Type(s): Hippocampus CA1 interneuron oriens alveus GABA cell;
Channel(s): I L high threshold; I N; I T low threshold; I A; I K; I K,leak; I M; I h; I K,Ca;
Gap Junctions:
Receptor(s): Muscarinic;
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Ion Channel Kinetics; Oscillations; Detailed Neuronal Models; Action Potentials;
Implementer(s):
Search NeuronDB for information about:  Hippocampus CA1 interneuron oriens alveus GABA cell; Muscarinic; I L high threshold; I N; I T low threshold; I A; I K; I K,leak; I M; I h; I K,Ca;
/
RichyandStarfish
readme.html
cad.mod *
ICaL.mod *
ICaT.mod *
Ih.mod
IKa.mod *
IKCa.mod *
Ikdrf.mod *
Ikdrfaxon.mod *
Ikdrs.mod *
Ikdrsaxon.mod *
Ikleakaxon.mod *
Ikleaksd.mod *
IMminret.mod *
IMmintau.mod *
Ipassaxon.mod *
Ipasssd.mod *
Naaxon.mod *
Nadend.mod *
Nasoma.mod *
SIN.mod *
fig9.hoc
initactiveproxRichy.hoc
initactiveproxStarfish.hoc
initactivesdRichy.hoc
initactivesdStarfish.hoc
initsomaRichy.hoc
initsomaStarfish.hoc
mosinit.hoc
Richytrunctest2.hoc
screenshot.jpg
Starfishtrunc.hoc
                            
load_file("initactivesdRichy.hoc")
cvode_active(1) // use variable time step

// close the fig 9 button window
if (PWManager[0].count>1) { // if this file run directly do nothing
  PWManager[0].close(1)
}

objref OuterVBox, InnerHBox[3],A1, B1, C1
objref A2, B2, C2
objref A3, B3, C3
objref vvec, tvec
vvec = new Vector()
tvec = new Vector()

vvec.record(&soma[0].v(0.5))
tvec.record(&t)

proc fig9() {
OuterVBox = new VBox()
OuterVBox.intercept(1)
  InnerHBox[0] = new HBox()
  InnerHBox[0].intercept(1)

    fig9A1()

    fig9B1()

    fig9C1()

  InnerHBox[0].intercept(0)
  InnerHBox[0].map()
  InnerHBox[1] = new HBox()
  InnerHBox[1].intercept(1)

    fig9A2()

    fig9B2()

    fig9C2()

  InnerHBox[1].intercept(0)
  InnerHBox[1].map()
  InnerHBox[2] = new HBox()
  InnerHBox[2].intercept(1)

    fig9A3()

    fig9B3()

    fig9C3()

  InnerHBox[2].intercept(0)
  InnerHBox[2].map()
OuterVBox.intercept(0)
OuterVBox.map()
}

// sine wave current_step_on/_off

objref sin_current_clamp_vec, sin_current_clamp_tvec

sin_current_clamp_vec = new Vector()
sin_current_clamp_tvec = new Vector()
sin_current_clamp_tvec.indgen(0,1999,5)
sin_current_clamp_vec.indgen(0,PI*20-PI/20,PI/20)
sin_current_clamp_vec.apply("sin").mul(0.010) // -10 to 10 pA
// to see on a graph: sin_current_clamp_vec.line(Graph[2],sin_current_clamp_tvec)

objref current_clamp

proc sin_current_step_on() {
    current_step_on()
    current_clamp.del = 0
    current_clamp.dur=2000
    tstop = 2000
    sin_current_clamp_vec.play(&current_clamp.amp,sin_current_clamp_tvec)
}

proc sin_current_step_off() {
    sin_current_clamp_vec.play_remove()
    current_clamp.amp=0
}

// current_step_on/_off

proc current_step_on() {
    soma[0] current_clamp = new IClamp(0.5)
    current_clamp.del=466
    current_clamp.dur=1000
    current_clamp.amp=0.015 // 15 pA in nA
}

proc current_step_off() {
    current_clamp.amp=0.0 // nA
}

// the following two functions switches between using IM and IMminret

proc xe991_on() {
    forall {
        if (ismembrane("IM")) {
	    gbar_IM=0
            gbar_IMminret = 0.0
	}
    }
}
proc xe991_off() {
    forall {
        if (ismembrane("IM")) {
	    gbar_IM=0.000075
            gbar_IMminret = 0
	}
    }
}
proc switch_to_IMminret() {
    forall {
        if (ismembrane("IM")) {
	    gbar_IM=0
            gbar_IMminret = 0.000075
	}
    }
}

proc switch_to_IM() {
    forall {
        if (ismembrane("IM")) {
	    gbar_IMminret=0
            gbar_IM = 0.000075
	}
    }
}

proc fig9A1() {
    print "calculating fig 9 A1"
    tstop=4000
    init()
    run()
    A1 = new Graph()
    vvec.line(A1,tvec)
    // A1.exec_menu("View = plot")
    A1.view_size(0,-tstop*0.10,tstop*1.1,-90-15,60+15)
}
proc fig9B1() {
    print "calculating fig 9 B1"
    current_step_on()
    tstop=4000
    init()
    run()
    B1 = new Graph()
    vvec.line(B1,tvec)
    // B1.exec_menu("View = plot")
    B1.view_size(0,-tstop*0.10,tstop*1.1,-90-15,60+15)
    current_step_off()
}
proc fig9C1() {
    print "calculating fig 9 C1"
    sin_current_step_on()
    tstop=2000
    init()
    run()
    C1 = new Graph()
    vvec.line(C1,tvec)
    // C1.exec_menu("View = plot")
    C1.view_size(0,-tstop*0.10,tstop*1.1,-90-15,60+15)
    sin_current_step_off()
}

proc fig9A2() {
    print "calculating fig 9A2"
    xe991_on()
    tstop=4000
    init()
    run()
    A2 = new Graph()
    vvec.line(A2,tvec)
    // A2.exec_menu("View = plot")
    A2.view_size(0,-tstop*0.10,tstop*1.1,-90-15,60+15)
    xe991_off()
}

proc fig9B2() {
    print "calculating fig 9B2"
    xe991_on()
    current_step_on()
    tstop=4000
    init()
    run()
    B2 = new Graph()
    vvec.line(B2,tvec)
    // B2.exec_menu("View = plot")
    B2.view_size(0,-tstop*0.10,tstop*1.1,-90-15,60+15)
    xe991_off()
    current_step_off()
}

proc fig9C2() {
    print "calculating fig 9C2"
    xe991_on()
    sin_current_step_on()
    tstop=2000
    init()
    run()
    C2 = new Graph()
    vvec.line(C2,tvec)
    // C2.exec_menu("View = plot")
    C2.view_size(0,-tstop*0.10,tstop*1.1,-90-15,60+15)
    xe991_off()
    sin_current_step_off()
}
proc fig9A3() {
    print "calculating fig 9 A3"
    switch_to_IMminret()
    tstop=4000
    init()
    run()
    A3 = new Graph()
    vvec.line(A3,tvec)
    // A3.exec_menu("View = plot")
    A3.view_size(0,-tstop*0.10,tstop*1.1,-90-15,60+15)
    switch_to_IM()
}

proc fig9B3() {
    print "calculating fig 9 B3"
    switch_to_IMminret()
    current_step_on()
    tstop=4000
    init()
    run()
    B3 = new Graph()
    vvec.line(B3,tvec)
    // B3.exec_menu("View = plot")
    B3.view_size(0,-tstop*0.10,tstop*1.1,-90-15,60+15)
    switch_to_IM()
    current_step_off()
}

proc fig9C3() {
    print "calculating fig 9 C3"
    switch_to_IMminret()
    sin_current_step_on()
    tstop=2000
    init()
    run()
    C3 = new Graph()
    vvec.line(C3,tvec)
    // C3.exec_menu("View = plot")
    C3.view_size(0,-tstop*0.10,tstop*1.1,-90-15,60+15)
    switch_to_IM()
    sin_current_step_off()
}

// CntrlBox has fig buttons and run cntrl in it
objref CntrlBox
CntrlBox=new HBox()
CntrlBox.intercept(1)
// bring up a run control
nrncontrolmenu()

tstop=4000

xpanel("Lawrence et al. 2006")
xlabel("                                       ")
xbutton("Create Fig 9 A1","fig9A1()")
xbutton("Create Fig 9 B1","fig9B1()")
xbutton("Create Fig 9 C1","fig9C1()")
xlabel("")
xbutton("Create Fig 9 A2","fig9A2()")
xbutton("Create Fig 9 B2","fig9B2()")
xbutton("Create Fig 9 C2","fig9C2()")
xlabel("")
xbutton("Create Fig 9 A3","fig9A3()")
xbutton("Create Fig 9 B3","fig9B3()")
xbutton("Create Fig 9 C3","fig9C3()")
xlabel("")
xbutton("Create all of Fig 9","fig9()")
xlabel("")
xpanel()

CntrlBox.intercept(0)
CntrlBox.map()