pop_section · push_section

Section and Segment Selection

Dot notation for properties

Since sections share property names eg. a length called L it is always necessary to specify which section is being discussed; this is done using dot notation, e.g.

dendrite[2].L = dendrite[1].L + dendrite[0].L
axon.v = soma.v
axon.nseg *= 3

This notation is necessary when one needs to refer to more than one section within a single statement.

sec= for functions

Many NEURON functions refer to a specific Section. In recent versions of NEURON, most of these either are available as section methods or take a section or segment directly. For older code or for the remaining exceptions, the active section may be specified using a sec= keyword argument.

For example:

my_iclamp = h.IClamp(0.25, sec=soma)   # better to use h.IClamp(soma(0.25)) though
num_pts_3d = h.n3d(sec=apical)         # could get the same value as an int via apical.n3d()

Default section

If no sec= keyword argument is specified, the functions will use NEURON’s default Section (sometimes called the currently accessed section), which can be identified via h.cas(). The default Section is controlled by a stack; it is initially the first Section created but entries may be pushed onto or popped off of the stack by the following commands. Use this only as a last resort.

Take the currently accessed section off the section stack. This can only be used after a function which pushes a section on the section stack such as point_process.getloc().


from neuron import h

soma = h.Section(name='soma')
apical = h.Section(name='apical')
stims = [h.IClamp(soma(i / 4.)) for i in range(5)] + [h.IClamp(apical(0.5))]
for stim in stims:
    x = stim.get_loc()
    print("location of %s is %s(%g)" % (stim, h.secname(), x))

(Note: in this example as nseg=1, the current clamps will either be at position 0, 0.5, or 1.)

(Note: a more Pythonic way to get the location of the point-process stim is to use seg = stim.get_segment(), but this is shown as an example of using h.pop_section().)





This function, along with h.pop_section() should only be used as a last resort. It will place a specified section on the top of the section stack, becoming the current section to which all operations apply. It is probably always better to use SectionRef or SectionList .

Push the section identified by the number returned by h.this_section(), etc. which you desire to be the currently accessed section. Any section pushed must have a corresponding h.pop_section() later or else the section stack will be corrupted. The number is not guaranteed to be the same across separate invocations of NEURON.
Push the section identified by the name obtained from sectionname(strdef). Note: at this time the implementation iterates over all sections to find the proper one; so do not use in loops.


from neuron import h

soma = h.Section(name='soma')
apical = h.Section(name='apical')

# get a number to allow pushing by number
soma_id = h.this_section(sec=soma)

# push by name

# push by number

# RuntimeError -- no such section

See also