Skip to content
Snippets Groups Projects
  1. Nov 28, 2022
  2. Oct 25, 2022
    • lukasgd's avatar
      Arbor cable cell exporter and backend support in BluePyOpt (#1959) · da8450ec
      lukasgd authored
      * Support for exporting models with parameters optimized in BluePyOpt to a mixed JSON/ACC-format that can be loaded in Arbor (with faithful axon-replacement modelling)
      * A tutorial and examples on how to run simulations with such models including a neocortical layer-5 pyramidal cell exported from BluePyOpt
      * Support for using Arbor as a backend for single cell optimization in BluePyOpt
  3. Sep 20, 2022
  4. Sep 07, 2022
    • Thorsten Hater's avatar
      Allow editing morphologies (#1957) · 276fee90
      Thorsten Hater authored
      * Add segment tree editing: join and split
      * Add equivalence and equality on trees
      * Apply isometries to trees
      * Add raw loaders to NeuroLucida ASC and SWC that return segment trees instead of morphologies
  5. Aug 23, 2022
  6. Feb 10, 2022
  7. Nov 10, 2021
    • Benjamin Cumming's avatar
      Find morphology location from a coordinate (#1751) · 0e8875a9
      Benjamin Cumming authored
      Extend the `pwlin_place` interface to find the location of a morphology that is closest to a 3d coordinate.
      * extend `arb::pwlin_place` interface
      * python wrapper
      * unit tests
      * documentation
      
      Addresses a feature request by @Helveg that I don't think ever had a ticket assigned to it.
      
      Fixes #1661 and #1108.
  8. Jun 29, 2021
    • thorstenhater's avatar
      Add S-Exp for CV Policies (#1511) · a297ff44
      thorstenhater authored
      1. All s-exp parsing has migrated to `arborio`
      2. CV policies can now be read from string as per #1334. This is needed for the GUI project.
      2. No longer can `arb::locset` and `arb::region` be constructed from mere strings
      2. We have `arborio::literals` to construct `region`s, `locset`s, and `cv_policy`s in the form of `_rg`, `_ls`, and `_cvp`.
      3. The `_lab` suffix now constructs an object that converts to `named` morphologies, rather than a simple string.
      4. Constructors of `region` and `locset` are now properly guarded
      5. Consequently, a lot of missing inheritance from `region_tag` and `locset_tag` was retrofitted.
      
      Closes #1334 
      Closes #1419 
  9. May 26, 2021
  10. Apr 06, 2021
    • Benjamin Cumming's avatar
      Update NEURON-style swc reader (#1475) · 00fd01b6
      Benjamin Cumming authored
      * update and simplify the `load_swc_neuron` reader to match the simplified and more correct interpretation in NEURON 8
      * update the documentation on the interpretation, and add details about how it still differs from the neuromorpho descriptions. 
      * update unit tests to reflect new interpretation
      * add a unit test that reproduces a complex case from the NEURON test suite.
      * remove the `load_swc_allen` C++ and Python calls
      * add links to NeuroMorpho site in the documention
      
      Fixes #1445.
  11. Mar 29, 2021
    • Sam Yates's avatar
      Add optional spherical root for NeuroML. (#1464) · cab5d33d
      Sam Yates authored
      * Adds a `neuroml_options` namespace with enum for use with `neuroml::morphology(...)` and `neuroml::cell_morphology(...)`.
      * Add support for a 'spherical' root segment with option `neuroml_options;:allow_spherical_root`; a zero-length root segment with identical proximal and distal radius will then be converted into an area-equivalent cylinder in the resultant morphology.
      * Amend `place_pwlin::all_at` so that locations on a zero-length segment with different radii at the endpoint will give an mpoint for either end.
      * Add `allow_spherical_root` boolean optional parameter to Python NeuroML morphology methods.
      * Update docs; C++ unit tests.
  12. Mar 19, 2021
    • Sam Yates's avatar
      Rename/hide components to fix ODR violation in arborio. (#1444) · 41952060
      Sam Yates authored
      * Add `nml_` prefix to NeuroML-related classes in arborio.
      * Separate `arborio/xmlwrap` from NeuroML exceptions.
      * Put xmlwrap functionality in its own namespace.
      * Have xmlwrap property access errors returned by util::expected, so that the corresponding NeuroML exceptions are strictly the
      responsibility of the NeuroML parsing code.
      * Rename NeuroML implementation and support sources and headers.
      * Place implementation classes for Neurolucida ASC parsing in an anonymous namespace.
      
      Fixes #1441.
  13. Mar 17, 2021
  14. Feb 05, 2021
  15. Jan 15, 2021
  16. Dec 18, 2020
    • Nora Abi Akar's avatar
      Docs: Python examples (#1279) · 6ebfb3db
      Nora Abi Akar authored
      * Add 2 new examples to `python/examples` and their corresponding tutorials in the docs. 
          1. `single_cell_detailed.py` : a slightly more complex example using `single_cell_model`
          2. `single_cell_detailed_recipe.py`: equivalent to `single_cell_detailed.py` but using a recipe. 
      * Change `load_swc`-> `load_swc_arbor` for consistency.
      * Run Sphinx with specified PYTHON_EXECUTABLE.
      * Set PYTHONPATH env var in doc/CMakeLists.txt, such that it propagates correctly, including locally.
      * Build pyarb BEFORE html such that docs build can import arbor in Github Actions script.
  17. Dec 15, 2020
    • Sam Yates's avatar
      Python API for `place_pwlin`. (#1250) · ff06a4d9
      Sam Yates authored
      Wrap place_pwlin interface to allow querying rich geometry information from cell morphologies.
      
      * Add Python bindings for the `place_pwlin` and `isometry` classes.
      * Add equality test for Python `mpoint`.
      * Add unit tests for new Python interfaces.
      * Split C++ API morphology documentation into its own file.
      * Add C++ API and Python API documentation for `place_pwlin` and `isometry`.
  18. Nov 18, 2020
    • Sam Yates's avatar
      Expose diverse probes in Python API. (#1225) · 1bfe96bc
      Sam Yates authored
      Major changes in Python library and documentation:
      
      * Add global state (immutable after initialization) for the Python module that
        manages the mapping between probe metadata types and the method by which the
        corresponding [sample data can be collected and presented as Python objects.
        This is necessary for decoupling the implementation of the simulation wrapper
        from that of the various cable cell probe types.
      
      * Wrap each of the C++ cable cell probe types with a Python function that
        returns a `probe_info` object.
      
      * Add code for converting and accumulating C++ probe metadata and sample
        data, registered in the module global state against the metadata type info.
      
      * Make the `arbor.simulator` object responsible for recording all spike and
        sample data, with corresponding new methods.
      
      * Use NumPy arrays and structured datatypes for returning spike and
        sample data.
      
      * Place Python schedule proxies under an abstract interface so that consumers
        of the proxies can be made generic over schedule types.
      
      * Add unit tests for the `arbor.simulator` class and its new functionality,
        including distributed spike collection.
      
      * Rework all Python API documentation concerning probes, sampling, and spike
        recording; add information on newly exposed cable cell probe addresses.
      
      * Add new python example `single_cell_recipe.py` which is a generic recipe
        version of `single_cell_model.py`.
      
      * Adjust other code in the wrapper and examples to accommodate these changes.
      
      Minor changes in Python library:
      
      * Add equality tests for `arbor.location` and `arbor.cable` Python classes.
      
      * Use the `py::` namespace shorthand more often in the Python wrapping sources.
      
      * Add an implicit conversion for a pair of numbers to `arbor.cell_member`, so
        that e.g. probe ids can be specified simply as `(gid, index)`.
      
      * Add an implicit conversion from a tuple to `arbor.mpoint` so that a
        morphological point can be specified simply as `(x, y, z, radius)`.
      
      * Modify the interface to `arbor.regular_schedule` so that the overloads
        correspond more closely to the C++ API. In particular,
        `arbor.regular_schedule(dt)` now describes a schedule with times 0, dt, 2*dt,
        etc.
      
      Minor changes in C++ library:
      
      * Change test in FVM lowered cell implementation and exception message for
        `bad_source_description`: assert number of detectors is exactly the number
        of sources promised by the recipe.
      
      * Add comment describing `probe_metadata` object in `sampling.hpp` which
        asserts that the type and value of probe-specific metadata completely
        determines the correct interpretation of sampled data provided to a callback.
  19. Nov 17, 2020
  20. Nov 06, 2020
    • Nora Abi Akar's avatar
      Check trailing data in SWC (#1218) · ff1c06d8
      Nora Abi Akar authored
      * Remove blank line from `ball_and_stick.swc` 
      * Mention that blank lines in SWC files indicate end of data.
      * Check for trailing data after parsing in the python interface.
      * Leave stream in good state if `parse_swc` encounters an empty line indicating end of data.
  21. Nov 05, 2020
    • Nora Abi Akar's avatar
      Modify SWC loaders (#1214) · 594a365f
      Nora Abi Akar authored
      * Rename `as_segment_tree` to `load_swc_arbor`.
      * Remove `swc_mode`: `sort_and_validate_swc` now performs the `relaxed` checks by default, `load_swc_arbor` performs the `strict` checks. 
      * Change `load_swc_xxx` to only accept `swc_data` as an argument
      * Remove default constructor for `swc_data` and enforce validation of SWC records via `sort_and_validate_swc` at construction.
      * Add fixes for docs and unit tests.
  22. Nov 01, 2020
  23. Sep 30, 2020
    • Sam Yates's avatar
      New SWC parser broke `load_swc_allen`. (#1165) · 09e6e1b5
      Sam Yates authored
      * Minor output formatting fix for `swc_record`.
      * Modify the Python `load_swc_allen` implementation to cope with SWC
      record ids not necessarily being contiguous, and with SWC record parent
      ids corresponding to record ids, not 0-based indices.
  24. Sep 28, 2020
    • Sam Yates's avatar
      Rewrite SWC reader code. (#1127) · 11a6ef6d
      Sam Yates authored
      * Simplify scanning of SWC records.
      * `parse_swc` now retains metadata read from SWC comments.
      * `parse_swc` is given two modes, relaxed and strict. Strict mode enforces contiguous record numbering and rejects SWC that looks like it has a single-point soma.
      * Subtype `swc_error` according to error mode.
      * Remove `point` class and corresponding unit tests.
      * Add a RAII stream formatting flag saver, used in SWC record output operator.
      * Replace included 1-point soma SWC example with a regular SWC from NeuroMorpho.
  25. Aug 27, 2020
    • Benjamin Cumming's avatar
      Pydoc (#1122) · 23a24b5a
      Benjamin Cumming authored
      This PR adds a bunch of high-level docs for concepts related to single cell models.
        * morphologies
        * labels (region and locset expressions)
        * mechanisms
        * cable cells
      
      It adds some python scripts to the `doc` path, which are called during documentation building to generate images of cell morphologies, regions and locsets that are generated in a separate script that uses the Arbor Python API.
      
      The docs are not complete: the cable cell and mechanism docs are unfinished, and the tutorial section needs to build on these concepts to give more detailed step by step examples.
  26. Jul 21, 2020
  27. Jul 13, 2020
    • Benjamin Cumming's avatar
      flexible cable-based cable_cell representation (#1083) · 9dc8969c
      Benjamin Cumming authored
      * Remove spherical root/soma from morphology representations and logic.
      * Replace `sample_tree` with `segment_tree`, which represents sample points in pairs and allows the representation of detached branches and cable segments.
      * Remove sample point properties and predicates.
      * Remove `cv_policy_flag::single_root_cv` as somata with a single attached dendrite will have a representation in the morphology of a single branch.
      * Remove `arb::math::{volume/area}_sphere`, which are no longer being used.
      * Remove spherical root special cases from `embed_pwlin` and `place_pwlin` objects.
      * Add textual representation of `mnpos` in morphology exception text.
      * Rename `sample_tree_from_swc` to `segement_tree_from_swc` and remove any special casing for one point somata.
      * Remove `msample` and `mbranch` types.
      * Update unit tests and python wrapper to reflect the changes.
  28. Jun 24, 2020
    • Benjamin Cumming's avatar
      Pycat (#1072) · e0c14f34
      Benjamin Cumming authored
      Update core library:
      * support derivation of named mechanisms in catalogue from a string description of the parent.
      * fix bug in radois_ge region expression that was finding region_lt.
      * fix test for radius_ge region expression
      
      Add support for mechanism, global properties and catalogue shenanigans to python wrapper
  29. May 12, 2020
    • Benjamin Cumming's avatar
      restrict locset (#1033) · 7e9d9bd0
      Benjamin Cumming authored
      Add a `restrict` locset expression type that returns all locations in a locset that are in a specified region.
      
      Also allow region and locset names with hyphens.
      
      Fixes #1031 
      Fixes #1032 
  30. Apr 21, 2020
  31. Feb 11, 2020
    • Benjamin Cumming's avatar
      enable locset names for probe sites in single cell model. (#955) · ec1f7520
      Benjamin Cumming authored
      Use locset names to set probe sites in single cell model.
      
      1. Extend C++ cable_cell interface to provide a concrete list of locations associated with a locset on the cell.
      2. Extend Python single_cell_model to allow placement of probes on locsets.
      3. Remove "debug" output in Python ring example.
      
      The single cell model maintains a trace callback for each probe location, and needs to know the explicit locations before starting the simulation. The first step is required to enumerate and record the locations associated with a locset when attaching probes.
      
      Open issues: 
      
      1. The extension to `cable_cell` won't sufficiently support locsets that rely on random number generators with global seeds (it would require passing additional meta data required to fully instantiate the locset)
      2. Enhancing the probe recipe interface to be able to associate one `probe_id` with all locations in a locset (the number of which is not specified at the time the `probe_id` is created) would support the interface implemented for the `single_cell_model`.
      
      Note: The richer interface on the C++ side will be implemented in time (see #957).
  32. Feb 04, 2020
    • Benjamin Cumming's avatar
      Python Interface (#948) · cfad427a
      Benjamin Cumming authored
      A big update that wraps over 90% of the public C++ API, with enough functionality to let Python users to perform useful modelling.
      
      Key features
      - wrapping of cable cell functionality
        - user-defined explicit compartmentalisation not supported
      - `single_cell_model` abstraction unique to the Python wrapper that simplifies developing and testing single cell models
      - one-dimensional cell builder for Python wrapper that simplfies building cells that 
        - in and of itself limited in scope, but a very useful example of mapping a richer morphology builder onto `sample_tree`s.
      - parsing of region and location expressions from strings
        - implements a generic s-expression parser that we can use for other purposes later
  33. Sep 25, 2019
    • akuesters's avatar
      Python feature probes and samples (#872) · 8e985d40
      akuesters authored
      Adds
      
      * to `recipe.cpp`: 
      `num_probes` and `get_probe` with helper function `cable_probe(kind, id, location)`
      * `sample.cpp`: 
      `sample` type with attributes `time` and `value`; a `sampler` with `samples()` and `clear()` and helper functions `attach_sampler(sim, dt)` for adding all probes as well as `attach_sampler(sim, dt, probe_id)` for adding one probe
      * `morphology.cpp`: 
      `location` as `arb::mlocation` with `branch` and `position` 
      * corresponding docs and example
      * update to new cable cell semantics in c++ validation test
      
      fixes #762