Model axon

The basics of how to develop, test, and use models.
Post Reply
hallockk
Posts: 43
Joined: Fri Jul 23, 2010 9:02 am

Model axon

Post by hallockk »

I have a question about a model I'm building. My model is an 1000 micron axon followed by a 10 micron node; the axon has passive cable properties while the node has HH properties, but it doesn't appear that the node is firing regardless of what current I put in (using the ipulse1 PointProcess). Here's the entire .ses file:

{load_file("nrngui.hoc")}
objectvar save_window_, rvp_
objectvar scene_vector_[5]
objectvar ocbox_, ocbox_list_, scene_, scene_list_
{ocbox_list_ = new List() scene_list_ = new List()}
{pwman_place(0,0,0)}

//Begin CellBuild[0]
{
load_file("celbild.hoc", "CellBuild")
}
{ocbox_ = new CellBuild(1)}
{object_push(ocbox_)}
{
version(5.7)
continuous = 1
}
{object_push(topol)}
{
first = 0
slist.remove_all()
sname = "axon"
objref tobj
}
{
tobj = new CellBuildSection("axon",0, 0, tobj, 1) slist.append(tobj)
tobj.position(-117.208,2.29301,60,15) tobj.lx=-32.4675 tobj.ly=-4.52516 tobj.i3d=0
all_init()
}
for i=0, slist.count-1 {slist.object(i).rdses()}
{object_pop()}
{
}
{object_push(subsets)}
{first = 0}
{ tobj = snlist.object(0)}
{consist()}
{object_pop()}
{
}
{object_push(geom)}
{
first = 0
tobj = new GeoSpec(7)
tobj.value = 0.1
bild.subsets.snlist.object(0).geo.append(tobj)
tobj = new GeoSpec(2)
tobj.value = 1000
bild.topol.slist.object(0).geo.append(tobj)
tobj = new GeoSpec(3)
tobj.value = 1
bild.topol.slist.object(0).geo.append(tobj)
tobj = new GeoSpec(6)
tobj.value = 101
bild.topol.slist.object(0).geo.append(tobj)
set_default()
}
{object_pop()}
{
}
{object_push(memb)}
{first=0}
{
tobj = new FakeMechStan(0)
tobj.value = 150
tobj.set_default()
tobj = new MStanWrap(tobj, 0)
bild.subsets.snlist.object(0).ml.append(tobj)
}
{
tobj = new MechanismStandard("pas")
tobj.set("g_pas", 0.001, 0)
tobj.set("e_pas", -70, 0)
tobj = new MStanWrap(tobj, 1)
bild.topol.slist.object(0).ml.append(tobj)
}
{
tobj = new FakeMechStan(1)
tobj.value = 0.0001
tobj.set_default()
tobj = new MStanWrap(tobj, 0)
bild.topol.slist.object(0).ml.append(tobj)
}
{object_pop()}
{
}
{object_push(manage)}
{
first = 0
classname = "Cell"
etop=1 esub=1 egeom=1 emem=1
itop=1 isub=0 igeom=0 imem=0
bild.topol.names_off = 0
bild.topol.circles_off = 0
output_index = 0 output_x = 1
thresh = 10
}
{object_pop()}
{
cexport()
}
{object_pop()}
{
save_window_=ocbox_.gtopol
save_window_.size(-200,200,-150,150)
scene_vector_[2] = save_window_
ocbox_.gtopol = save_window_
save_window_.save_name("ocbox_.gtopol")
}
{
ocbox_.map("CellBuild[0]", 745, 340, 722.16, 387.36)
}
objref ocbox_
//End CellBuild[0]


//Begin PointProcessManager
{
load_file("pointman.hoc")
}
{
axon ocbox_ = new PointProcessManager(0)
}
{object_push(ocbox_)}
{
mt.select("Ipulse1") i = mt.selected()
ms = new MechanismStandard("Ipulse1")
ms.set("del", 0, 0)
ms.set("ton", 1, 0)
ms.set("toff", 49, 0)
ms.set("num", 100, 0)
ms.set("amp", 1000, 0)
mt.select("Ipulse1") i = mt.selected() maction(i)
hoc_ac_ = 0
sec.sec move() d1.flip_to(0)
}
{object_pop() doNotify()}
{
ocbox_ = ocbox_.v1
ocbox_.map("PointProcessManager", 134, 228, 213.84, 336.24)
}
objref ocbox_
//End PointProcessManager

{
save_window_ = new Graph(0)
save_window_.size(0,500,-80,40)
scene_vector_[4] = save_window_
{save_window_.view(0, -80, 500, 120, 998, 165, 299.52, 199.38)}
graphList[0].append(save_window_)
save_window_.save_name("graphList[0].")
save_window_.addexpr("axon.v( 1 )", 3, 1, 0.804808, 0.860277, 2)
}
{
xpanel("RunControl", 0)
v_init = -65
xvalue("Init","v_init", 1,"stdinit()", 1, 1 )
xbutton("Init & Run","run()")
xbutton("Stop","stoprun=1")
runStopAt = 5
xvalue("Continue til","runStopAt", 1,"{continuerun(runStopAt) stoprun=1}", 1, 1 )
runStopIn = 1
xvalue("Continue for","runStopIn", 1,"{continuerun(t + runStopIn) stoprun=1}", 1, 1 )
xbutton("Single Step","steprun()")
t = 500
xvalue("t","t", 2 )
tstop = 500
xvalue("Tstop","tstop", 1,"tstop_changed()", 0, 1 )
dt = 0.025
xvalue("dt","dt", 1,"setdt()", 0, 1 )
steps_per_ms = 40
xvalue("Points plotted/ms","steps_per_ms", 1,"setdt()", 0, 1 )
screen_update_invl = 0.05
xvalue("Scrn update invl","screen_update_invl", 1,"", 0, 1 )
realtime = 0.76
xvalue("Real Time","realtime", 0,"", 0, 1 )
xpanel(405,163)
}
objectvar scene_vector_[1]
{doNotify()}
ted
Site Admin
Posts: 5795
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Model axon

Post by ted »

The ses file contains a specification of only one section, called "axon", which is passive. The model has no active membrane.

Suggestions:
1. Before trying to make a model that spikes once every 50 ms over the course of 500 ms, start by making it spike just once in 10 ms. Reduce Tstop to 10 so you can see the spike waveform.
2. Don't apply the first stimulus at t=0. It's too easy to miss initialization problems. Always allow 1 ms so you can be sure there is a stable baseline (assuming the model cell is not spontaneously active).
3. After you are satisfied that everything works properly over the first 10 ms, then increase Tstop to whatever you like.

I see that you had to manually override the value of axon.nseg that was chosen by the d_lambda rule; that was necessitated by the fact that the model axon's membrane time constant is only 0.1 ms, so that the membrane is almost purely resistive at 100 Hz. The formula we have been using to calculate lambda_f ignores membrane ionic conductance, which is fine except for cases where membrane time constant is very short (e.g myelinated internodes).
hallockk
Posts: 43
Joined: Fri Jul 23, 2010 9:02 am

Re: Model axon

Post by hallockk »

Thanks! Doing it one pulse at a time let me fix the problems.

Do you have any recommended capacitance and conductance values for myelinated axons?
ted
Site Admin
Posts: 5795
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Model axon

Post by ted »

hallockk wrote:Do you have any recommended capacitance and conductance values for myelinated axons?
Suggest you glean that from published models, of which there are many starting with Waxman and his collaborators in the 1970s. You may find some relevant papers in NEURON's Bibliography
http://www.neuron.yale.edu/neuron/stati ... ednrn.html
or even in ModelDB
http://senselab.med.yale.edu/modeldb/
Post Reply