From my last post answer (Thanks Ted) I now understand how to enter a prerecorded set of spike times into my model.
I was wondering what the best "standard" way to perform my simulation is:
I loaded up the L5 pyramidal model by Mainen from ModelDB and want to inject it with 5000 correlated spike trains. Is the best way to do this:
1) to load up the L5 model into CellBuilder
2) using CellBuilder to create some form of template of the Cell, save to a hoc file.
3) procede as the FAQ shows and inject the prerecorded spike trains into the dendrites?
Thanks!
L5 pyramidal model simulations
-
- Site Admin
- Posts: 6303
- Joined: Wed May 18, 2005 4:50 pm
- Location: Yale University School of Medicine
- Contact:
Re: L5 pyramidal model simulations
Presumably you got patdemo.zip, which contains the code for this paper:I loaded up the L5 pyramidal model by Mainen from ModelDB
Mainen ZF, Sejnowski TJ (1996) Influence of dendritic structure on firing pattern
in model neocortical neurons. Nature 382:363-6.
What's not so clear is the meaning of "loaded up the L5 pyramidal model."
Did you just get the basic morphology of the cell by executing j4a.hoc? Or did you try
to capture what the authors actually used in their simulations? i.e. the model specification
that exists in the computer after you run mosinit.hoc, and click on the "L5 Pyramid"
button. The former omits the axon (axon hillock, initial segment, nodes and internodes),
has no biophysical properties other than default cm and Ra, and has not been "adjusted
for the presence of spines." And neither the former, nor the latter, uses nseg values that
satisfy the d_lambda = 0.1 criterion for spatial accuracy throughout the entire model
(this probably doesn't affect the qualitative results reported in that paper, but it could
have untoward consequences for simulations that involve synaptic inputs distributed
over the dendritic tree).
So tell me which of these two interpretations is correct, and I'll try to give you a useful
answer to your question.
Re: L5 pyramidal model simulations
I used the latter method, ie. I selected "L5 pyramid" and then went into CellBuilder to create the template...
However now that I have been playing around with patdemo, I think I can just adjust some methods and make it work for my simulations without an explicit cell template. ie. I believe I could just update demofig1.hoc for the L5 case, and add the injection of the spike trains from the input files.
I was also wondering about the following, if I want to inject the values of file called "serie0" into dend1[0], should I make the source of the netcon a NULLObject and the target the ExpSyn I attached to dend1[0]. Because surely the source is now generated via netcon.event calls? The problem is if I make the source nil I get an error messaging saying source cannot be resolved and the netcon is not created. For more info this is some of the code:
load_3dcell("cells/j4a.hoc")
input=new File()
input.ropen("serie0")
vector = new Vector(100)
vector.scanf(input)
dend1[0] NetConSynapse = new ExpSyn(0)
objref nc, nil
nc = new NetCon(nil, NetConSynapse, 0, 0, 0.6)
nc.delay = 0
nc fih = new FInitializeHandler("loadqueue()")
error: attempt to evaluate a non-variable nil
Thanks for all your help,
Steve
However now that I have been playing around with patdemo, I think I can just adjust some methods and make it work for my simulations without an explicit cell template. ie. I believe I could just update demofig1.hoc for the L5 case, and add the injection of the spike trains from the input files.
I was also wondering about the following, if I want to inject the values of file called "serie0" into dend1[0], should I make the source of the netcon a NULLObject and the target the ExpSyn I attached to dend1[0]. Because surely the source is now generated via netcon.event calls? The problem is if I make the source nil I get an error messaging saying source cannot be resolved and the netcon is not created. For more info this is some of the code:
load_3dcell("cells/j4a.hoc")
input=new File()
input.ropen("serie0")
vector = new Vector(100)
vector.scanf(input)
dend1[0] NetConSynapse = new ExpSyn(0)
objref nc, nil
nc = new NetCon(nil, NetConSynapse, 0, 0, 0.6)
nc.delay = 0
nc fih = new FInitializeHandler("loadqueue()")
error: attempt to evaluate a non-variable nil
Thanks for all your help,
Steve
-
- Site Admin
- Posts: 6303
- Joined: Wed May 18, 2005 4:50 pm
- Location: Yale University School of Medicine
- Contact:
Re: L5 pyramidal model simulations
This is a nontrivial issue. Mainen & Sejnowski's code takes spine surface area intosteve wrote:I used the latter method, ie. I selected "L5 pyramid" and then went into CellBuilder to create the template...
account by fiddling section lengths and diameters (the "folding factor" approach used
by Jack et al (1989) and Major (1994))--i.e. they actually increase surface area
without affecting "electrotonic length" of each section--see proc add_spines() in
demofig1.hoc. The result is a model whose dimensions differ from the original
morphometric data. My personal preference is to leave cell dimensions unaltered,
but to change cm and channel densities instead. Either approach is perfectly
acceptable as long as you remember what's going on.
A very good way to proceed, if you want to use exactly the same model L5 cell asHowever now that I have been playing around with patdemo, I think I can just adjust some methods and make it work for my simulations without an explicit cell template. ie. I believe I could just update demofig1.hoc for the L5 case, and add the injection of the spike trains from the input files.
M&S did.
However, if you are concerned about spatial accuracy, you may want to specify nseg
with the the d_lambda method, instead of using the artibrary method employed in the
original code. For example, the original code used nseg=5 for the myelinated internodes,
but the d_lambda method indicates that nseg=1 is adequate. However, the original
code produced a model with a total of 479 segments, whereas using the default
d_lambda rule gives a total of 1054 segments. So in some places, the original code
chops space far too finely, and in others (probably dendrites, which is where all the
interesting synaptic processing is happening) it is too coarse.
This works:I was also wondering about the following, if I want to inject the values of file called "serie0" into dend1[0], should I make the source of the netcon a NULLObject and the target the ExpSyn I attached to dend1[0]. Because surely the source is now generated via netcon.event calls? The problem is if I make the source nil I get an error messaging saying source cannot be resolved and the netcon is not created.
Code: Select all
load_file("nrngui.hoc")
create soma
access soma
diam = 10
L = 100/diam/PI
insert pas
objref syn
syn = new ExpSyn(0.5)
objref nc, nil
nc = new NetCon(nil, syn)
nc.weight = 0.001
objref syntimes
syntimes = new Vector(2)
syntimes.x[0] = 2
syntimes.x[1] = PI
objref fih
fih = new FInitializeHandler("loadqueue()")
proc loadqueue() { local ii
for ii=0,syntimes.size()-1 nc.event(syntimes.x[ii])
}
you are using. In this case, please let me know what version it is, and which OS you
are using. Then update to the latest standard distribution or alpha release for your OS.