getting voltage along a SectionList

Managing anatomically complex model cells with the CellBuilder. Importing morphometric data with NEURON's Import3D tool or Robert Cannon's CVAPP. Where to find detailed morphometric data.
Post Reply
nomura

getting voltage along a SectionList

Post by nomura »

Dear all,

I defined a SectionList as follows, for example,
objref dend1
proc subset_dend1() {
objref dend1
dend1 = new SectionList()
dend[0] dend1.append()
dend[1] dend1.append()
dend[3] dend1.append()
dend[5] dend1.append()
}.
Under the assumption that they are connected in line, I'd like to know the membrane voltages along dend1 at regular intervals.
The following pseudo code satisfies my demand.
for (x = 0;x<=1;x+=0.1) {dend1.v(x)}
Is there a equivalent build-in function or simple solution?
ted
Site Admin
Posts: 6289
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Reply to: getting voltage along a SectionList

Post by ted »

The best way to do this
I'd like to know the membrane voltages along dend1 at regular intervals
depends on the meaning of "along dend 1 at regular intervals."
Does it mean regular intervals in space, in time, or both?
If it means "regular intervals in time," will the simulations use fixed dt or variable time steps?
Also, if it means "regular intervals in space" the sections of interest must have lengths that
are integer multiples of some fundamental length.
nomura

Reply to: getting voltage along a SectionList

Post by nomura »

Thank you for your reply.
ted wrote:The best way to do this depends on the meaning of "along dend 1 at regular intervals."
Does it mean regular intervals in space, in time, or both?
If it means "regular intervals in time," will the simulations use fixed dt or variable time steps?
Also, if it means "regular intervals in space" the sections of interest must have lengths that
are integer multiples of some fundamental length.
I used "along dend1 at regular intervals" for meaning "regular intervals in space".
I am grateful if a mechanism, for example a MultiSection class,
similar to the following code would be involved in NEURON.

Code: Select all

create dend[2]
connect dend[1](0), dend[0](1)
dend[0] {pt3dclear()
    pt3dadd(0,0,0,1)
    pt3dadd(5,0,0,1)
}
dend[1] {pt3dclear()
    pt3dadd(0,0,0,1)
    pt3dadd(15,0,0,1)
}
objref dend1
dend1 = new MultiSection() // a dummy class
dend[0] append.dend1
dend[1] append.dend1

dend1.v(0.5) // means dend[1].v(1/3)
objref stim
dend1 stim = new IClamp(0.75) // means dend[1] stim = new IClam(2/3)
The MultiSection class would treat two sections as if they were a single section.
Does NEURON provide a easy way to handle thie matter?
ted
Site Admin
Posts: 6289
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Reply to: getting voltage along a SectionList

Post by ted »

The MultiSection class would treat two sections as if they were a single section.
Does NEURON provide a easy way to handle thie matter?
Sure--don't break them apart in the first place.

Code: Select all

create dend
dend {pt3dclear()
    pt3dadd(0,0,0,1)
    pt3dadd(5,0,0,1)
    pt3dadd(20,0,0,1)
}
There are only two reasons to break this into two sections.
1. If the two sections are to have different Ra. Unlike cm and ion channel densities, Ra is not
a "range variable"--it must have the same same value along the entire length of a section.
2. If something else, e.g. a point process or another section, must be attached to the junction
between dend1 and dend2. Connections can only be made to the 0 and 1 ends of a section,
or to its internal nodes. Internal nodes are located at (i+0.5)/nseg where i = 0..nseg-1,
where nseg is an integer > 0, so for complete freedom in attaching a point process to a
particular location it is sometimes necessary to break a section into two pieces. This also
prevents changing nseg from having the side-effect of moving a point process to a new
location (which would happen if the nseg change destroys the node to which the point
process was attached).
For the same reason it is best to connect sections only at their 0 or 1 nodes. Also, it
should be noted that

Code: Select all

create parent, child
parent L = 100
connect child(0), parent(0.5)
is not the same as

Code: Select all

create par0, par1, child
par0 L = 50
par1 L = 50
connect par1(0), par0(1)
connect child(0), par0(1)
The former attaches the 0 end of child straight to the internal node of parent, where all
of the membrane properties are lumped together. The latter separates the 0 end of child
from the internal nodes of par0 and par1 by the lumped axial resistances that lie between
the internal nodes of those sections and their nodes at 1 and 0, respectively.
So there's another reason not to connect a section to an internal node of its parent.

If joining the sections is not an acceptable option, then if you absolutely must have
uniform spacing of the points at which v is sampled, you can use the fact that NEURON's
solutions are second order accurate in space. This means that, given the values of v
computed at locations x0, x1, x2 . . . you can simply use linear interpolation between any
adjacent pair to find second order accurate values at intermediate positions.
Last edited by ted on Wed Aug 15, 2007 4:22 pm, edited 1 time in total.
nomura

Reply to: getting voltage along a SectionList

Post by nomura »

Thank you for your prompt reply.
ted wrote:
If joining the sections is not an acceptable option, then if you absolutely must have
uniform spacing of the points at which v is sampled, you can use the fact that NEURON's
solutions are second order accurate in space.
This would be my option, because models I've handled have complicated structures.
It seems that I'd have a difficulty with calculating the coordinates along the dendrites.
Thank you again for your reply.
ted
Site Admin
Posts: 6289
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Reply to: getting voltage along a SectionList

Post by ted »

nomura wrote:
ted wrote:
if you absolutely must have
uniform spacing of the points at which v is sampled, you can use the fact that NEURON's
solutions are second order accurate in space.
This would be my option, because models I've handled have complicated structures.
It seems that I'd have a difficulty with calculating the coordinates along the dendrites.
How can calculating the coordinates of points separated by uniform path intervals along
dendrites, and then having to record and postprocess simulation results by linear interpolation
be easier than calculating the locations of the nodes at which the solutions are actually
computed? The latter is actually quite straightforward*, and it only needs to be done one
time--after spatial discretization is complete. The same effort is required to calculate
coordinates of locations at uniform path distances throughout a model, and on top of
that you have to do linear interpolation after each simulation run. Seems like more work
to me. Also requires twice as much data storage.

*--to see how, get
http://www.neuron.yale.edu/ftp/ted/neur ... nd_rec.zip
This contains complete working implementations of extracellular stimulation and
recording of a neuron. The actual locations of internal nodes are computed from the 3D
specification of the cell by proc grindaway(), which is in interpxyz.hoc
Post Reply