Skip to content

Latest commit

 

History

History
executable file
·
237 lines (111 loc) · 4.3 KB

File metadata and controls

executable file
·
237 lines (111 loc) · 4.3 KB

SectionRef

Note

Much of this functionality is available in Python through :class:`Section` methods in recent versions of NEURON. It is, however, sometimes necessary to use this class to interoperate with legacy code.

Syntax:
sref = h.SectionRef(sec=section)
Description:

SectionRef keeps a pointer/reference to section. If the sec= argument is omitted, the reference is to the currently accessed section.

This class overcomes a HOC limitation where sections were not treated as objects.


.. data:: SectionRef.sec


    Syntax:
        ``sref.sec``


    Description:
        Returns the :class:`Section` the ``SectionRef`` references.

        .. code::

            from neuron import h

            s = h.Section(name="s")
            s2 = h.Section(name="s2")
            sref = h.SectionRef(sec=s2)

            print(sref.sec==s)  # False
            print(sref.sec==s2) # True




.. data:: SectionRef.parent


    Syntax:
        ``sref.parent``


    Description:

        Returns the parent of ``sref.sec``.

    .. warning::

        If there is a chance that a section does not have a parent then
        :meth:`SectionRef.has_parent` should be called first to avoid an execution error.
        Note that the parent is the current parent of sref.sec, not necessarily
        the parent when the SectionRef was created.



.. data:: SectionRef.trueparent


    Syntax:
        ``sref.trueparent``


    Description:
        Returns the trueparent of ``sref.sec``.

        This is normally identical to :meth:`SectionRef.parent` except when the
        parent's :func:`parent_connection` is equal to the parent's
        :func:`section_orientation`.

        If there is a chance that a section does not have a trueparent then
        :meth:`SectionRef.has_trueparent` should be called first to avoid an execution error.



.. data:: SectionRef.child


    Syntax:
        ``sref.child[i]``


    Description:
        Returns the ith child of ``sref.sec``.
        Generally it is used in a context like

        .. code::

            for child in sref.child:
                print(child)

        Note that the children are the current children of sref.sec, not necessarily
        the same as when the SectionRef was created since sections may be
        deleted or re-connected subsequent to the instantiation of the SectionRef.



.. data:: SectionRef.root


    Syntax:
        ``sref.root``


    Description:

        Returns the root of ``sref.sec``.



.. method:: SectionRef.has_parent


    Syntax:
        ``boolean = sref.has_parent()``


    Description:
        Returns ``True`` if sref.sec has a parent and ``False`` if sref.sec is a root section.
        Invoking sref.parent when sref.sec is a root section will print an
        error message and halt execution.

    Note:

        If ``sec`` is a Section, then ``sec.parentseg()`` is either the segment the section is
        attached to or ``None`` if ``sec`` does not have a parent.



.. method:: SectionRef.has_trueparent


    Syntax:
        ``boolean = sref.has_trueparent()``


    Description:
        returns ``True`` if the sref.sec parent node is not the root node and ``False`` otherwise.
        Invoking sref.trueparent when it is the root node will print an
        error message and halt execution.



.. method:: SectionRef.nchild


    Syntax:
        ``num = sref.nchild()``


    Description:
        Return the number of child sections connected to sref.sec as a float.

    .. note::

        To get the number of child sections as an int, use: ``num = len(sref.child)``




.. method:: SectionRef.is_cas


    Syntax:
        ``boolean = sref.is_cas()``


    Description:
        Returns True if this section reference is the currently accessed (default) section, False otherwise.

    .. note::

        An equivalent expression is ``(sref.sec == h.cas())``.




.. method:: SectionRef.exists


    Syntax:
        ``boolean = sref.exists()``


    Description:
        Returns True if the referenced section has not been deleted, False otherwise.

    .. seealso::
        :func:`delete_section`, :func:`section_exists`