Action potential initiation in the olfactory mitral cell (Shen et al 1999)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:3342
Mitral cell model with standard parameters for the paper: Shen, G.Y., Chen, W. R., Midtgaard, J., Shepherd, G.M., and Hines, M.L. (1999) Computational Analysis of Action Potential Initiation in Mitral Cell Soma and Dendrites Based on Dual Patch Recordings. Journal of Neurophysiology 82:3006. Contact Michael.Hines@yale.edu if you have any questions about the implementation of the model.
Reference:
1 . Shen GY, Chen WR, Midtgaard J, Shepherd GM, Hines ML (1999) Computational analysis of action potential initiation in mitral cell soma and dendrites based on dual patch recordings. J Neurophysiol 82:3006-20 [PubMed]
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): Olfactory bulb main mitral GLU cell; Myelinated neuron;
Channel(s): I Na,t; I K; I Sodium; I Potassium;
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON;
Model Concept(s): Action Potential Initiation; Dendritic Action Potentials; Parameter Fitting; Active Dendrites; Olfaction;
Implementer(s): Hines, Michael [Michael.Hines at Yale.edu];
Search NeuronDB for information about:  Olfactory bulb main mitral GLU cell; I Na,t; I K; I Sodium; I Potassium;
seamp1 = 0.4
seamp2 = 0.8
peamp1 = 0.5
peamp2 = 0.8
peamp3 = 0.68
onset = 1
dura = 10.05

objref pestim, sestim, ccc

se.electrode sestim = new IClamp(.5)
pe.electrode pestim = new IClamp(.5)

proc protocol() {
	if (attached == 0) { //protocol 0
		sestim.del = onset
		sestim.dur = dura
		sestim.amp = seamp1
		pestim.del = 0
		pestim.dur = 0
		pestim.amp = 0
	}else if (attached == 1) {
		sestim.del = 0
		sestim.dur = 0
		sestim.amp = 0
		pestim.del = onset
		pestim.dur = dura
		pestim.amp = peamp1
	} else if (attached == 3) {
		sestim.del = onset
		sestim.dur = dura
		sestim.amp = seamp2
		pestim.del = 0
		pestim.dur = 0
		pestim.amp = 0
	}else if (attached == 4) {
		sestim.del = 0
		sestim.dur = 0
		sestim.amp = 0
		pestim.del = onset
		pestim.dur = dura
		pestim.amp = peamp2
	}
}

strdef tstr
objref g[6], rf
for i=0, 5 { if (i==0 || i==1 || i==3 || i==4) {
	g[i] = new Graph(0)
	g[i].size(0,15,-80,40)
	if (i==0 || i==3) {
	g[i].addexpr("se.electrode.v( 0.5 )-sestim.i*(se.electrode.Ra+2.2)", 2, 1, 0.541214, 1.04377, 2)
	g[i].addexpr("pe.electrode.v( 0.5 )", 1, 1, 0.541214, 1.05815, 2)
	} else {
	g[i].addexpr("se.electrode.v( 0.5 )", 2, 1, 0.541214, 1.04377, 2)
	g[i].addexpr("pe.electrode.v( 0.5 )-pestim.i*(pe.electrode.Ra+2.5)", 1, 1, 0.541214, 1.05815, 2)
	}
	sprint(tstr, "g[%d]", i)
	g[i].label(0.469649, 0.0718849, tstr, 2, 1, 0, 0, 1)
    } else {
        preamp3 = preamp3
    }
}
{g[0].view(0, -80, 15, 120, 811, 75, 300.48, 200.32)}
{g[1].view(0, -80, 15, 120, 811, 348, 300.48, 200.32)}
{g[3].view(0, -80, 15, 120, 463,  75, 300.48, 200.32)}
{g[4].view(0, -80, 15, 120, 463, 348, 300.48, 200.32)}

{g[0].save_name("g[0]")}
{g[1].save_name("g[1]")}
{g[3].save_name("g[3]")}
{g[4].save_name("g[4]")}

attached = -1

proc g_attach() { local i //arg is graph index
	if (attached >= 0) {
		i = graphList[0].index(g[attached])
		graphList[0].remove(i)
	}	
	attached = $1
	if (attached >= 0) {
		graphList[0].append(g[attached])
	}
	protocol()
}

proc pan_attach() {
	xpanel("Attach Graph to Run")
	xradiobutton("none", "g_attach(-1)")
	xradiobutton("g[0]: soma weak", "g_attach(0)")
	xradiobutton("g[1]: primary weak", "g_attach(1)")
	xradiobutton("g[3]: soma strong", "g_attach(3)")
	xradiobutton("g[4]: primary strong", "g_attach(4)")
	xvalue("Onset of Stimulus", "onset", 1, "protocol()")
	xvalue("Duration of Stimulus", "dura", 1, "protocol()")
	xvalue("Soma weak current stimulus", "seamp1", 1, "protocol()")
	xvalue("Priden weak current stimulus", "peamp1", 1, "protocol()")
//	xvalue("Soma hyperpolarization current", "hyper", 1, "protocol()")
	xvalue("Soma strong current stimulus", "seamp2", 1, "protocol()")
	xvalue("Priden strong current stimulus1", "peamp2", 1, "protocol()")
//	xvalue("Priden strong current stimulus2", "peamp3", 1, "protocol()")
	xpanel()
}

pan_attach()

objref vt[6], vs[6], vd[6], m, f
strdef fname

proc rdata() {local i // $s1 is filename $2 is g index, $3 is the trace num
	i = $2        // $4 is the voltage shift of the trace pair
	fname = $s1
	f = new File()
	f.ropen(fname)
	m = new Matrix()
	m.scanf(f)
	f.close()
	ntrace = (m.ncol-1)/2
	if (ntrace > 1) {
		sprint(tstr, "%s has more than one trace pair", fname)
	}
	vt[i] = m.getcol(0)
	vs[i] = m.getcol(ntrace+$3)
	vd[i] = m.getcol($3)
	vs[i].add($4)
	vd[i].add($5)
	vs[i].plot(g[i], vt[i], 2, 5)
	vd[i].plot(g[i], vt[i], 1,5)
	sprint(tstr, "file=%s", fname)
	g[i].label(0.1, 0.85, tstr, 2, 1, 0, 0, 1)        
}
func baseline() {local i // $s1 is filename
	fname = $s1
	f = new File()
	f.ropen(fname)
	m = new Matrix()
	m.scanf(f)
	return m.x[0][1]
}

rdata("data/3459.dat", 0,2,-20, -19.7)
rdata("data/3327.dat", 1,1,-19.5, -20)
rdata("data/3459.dat", 3,1,-20, -20)
rdata("data/3327.dat", 4,2, -20, -21)

//Initializes the starting resting potential to the hyperpolarized initials
proc init() {local dtsav, i
        finitialize(v_init)
        fcurrent()
        forsec sad for(x) if (x>=0 && x<=1) {
		e_pas(x) = (ina(x) + ik(x) + g_pas(x)*v_init)/g_pas(x)
	} 
        t = -200
        dtsav = dt
        dt = 10
        for i = 0, 19 {
        	fadvance()
        }
        dt = dtsav
        t = 0
	fcurrent()
}
g_attach(0)

Loading data, please wait...