Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Axial Diffusion #1729

Merged
merged 118 commits into from
Jun 21, 2022
Merged

Conversation

thorstenhater
Copy link
Contributor

@thorstenhater thorstenhater commented Oct 19, 2021

Introduction

Plasticity processes are mediated by signalling ions, eg Ca++, which are generated by
synapses upon reception of a spike. These ions then propagate along the dendrite
by diffusion and are received by other synapses, modifying their weight upon reception.

We introduce a simplified -- as opposed to solving the Nernst-Planck equation -- approach
to model these processes. Concretely, we will introduce a new field, dubbed Xd, to the
NMODL dynamics, with the following properties

  • Xd can be read from and written to by NMODL density and point mechanisms.
    This allows us to model decay, consumption, and sources, as well as interaction with the actual processes.
  • Xd propagates according to a diffusion law ∂_t Xd = ∂_z 1/rX ∂_z Xd + iX/qi along the neuron, where
    the per-species resistivity rX may vary in space (accessible via the paint-interface) but not in time.
  • NOTE: Currently this follows a simplified update model, where Xd is atomically updated during the
    advance_state phase and not like other ionic quantities in two steps (once as a STATE and later effects
    are applied in write_ions / compute_currents.)
    • We could get away with this as there is no precedent in NRN and we can make our own semantics to fit our needs
    • However diverting from the ionic model feels gross.

Update Nov 2021

After the initial exploration and design a number of issues became apparent.

  1. Arbor (and Neuron) model the neuron as a thin cable in the following limit case
  • External and internal concentrations are constant in time; as they are linked to an infinite buffer of the relevant species.
  • Currents iX across the membrane do not contribute to Xi/Xo.
  • Similarly, axial currents to not change Xi.
  • Neither are ions transported by concentration gradients.
  • Therefore, Xi and Xo are reset every dt and we cannot use Xi for our model.
  1. Partial presence of a diffusing species is non-sensical
  • Basically, the matrix solver requires a defined value everywhere
  1. All dynamics are only well-defined in proximity of the membrane, essentially ignoring the interior of the neuron.
  2. Concentration models write to a state variable shadowing Xi

Changes

  • Add paint and default interfaces.

    • Diffusivity is paintable on regions like init_ext_conc
    • ... and can be added as a default via set_ion (Python) or set_default (C++)
    • see python/example/diffusion.py
  • Add per-ion conductivity gX, needed for matrix solver

    • part of the ABI, got bumped to 0.1.1
    • modcc computes and accumulates gX on compute_currents iff iX is written
    • shared_state sets up the backing store
  • Add per-ion diffusion solvers

  • Clean-up

    • Remove redundant arrays
    • Remove matrix.hpp
    • Push matrix_state into shared_state

Open Questions/Issues

  • (How to) disable ion-conductivity if we do not need it?
  • Currently the cable equation and diffusion solvers (1 + 1/diffusing ion) store duplicates of the solver state (eg parent indices), it would be nice to have one copy in total.
  • What to do if diffusivity defaults to a finite value, but is overridden to be zero in a region?

References

Linked Issues

Closes #1651

@thorstenhater thorstenhater marked this pull request as draft October 19, 2021 18:34
@brenthuisman brenthuisman requested review from schmitts and AdhocMan and removed request for bcumming and halfflat May 31, 2022 11:09
@brenthuisman
Copy link
Contributor

bors try

bors bot added a commit that referenced this pull request May 31, 2022
@bors
Copy link

bors bot commented May 31, 2022

try

Build failed:

@thorstenhater
Copy link
Contributor Author

Again an Ault fail state, Mr Bors

Copy link
Contributor

@AdhocMan AdhocMan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've only found a few small issues

@thorstenhater thorstenhater requested a review from AdhocMan June 21, 2022 09:47
Copy link
Contributor

@AdhocMan AdhocMan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good from my side.

@thorstenhater thorstenhater merged commit 4a305b4 into arbor-sim:master Jun 21, 2022
@thorstenhater thorstenhater deleted the feature/axial-diffusion branch June 21, 2022 12:32
@brenthuisman brenthuisman modified the milestones: v0.8, v0.7 Aug 30, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support for axial diffusion
4 participants