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

Support for axial diffusion #1651

Closed
schmitts opened this issue Sep 9, 2021 · 5 comments · Fixed by #1729
Closed

Support for axial diffusion #1651

schmitts opened this issue Sep 9, 2021 · 5 comments · Fixed by #1729

Comments

@schmitts
Copy link
Contributor

schmitts commented Sep 9, 2021

Cf. "Mechanism of signal spreading" in "Biophysics of Biochemical Signaling in Dendritic Spines: Implications in Synaptic Plasticity" by Yasuda (2017) https://doi.org/10.1016/j.bpj.2017.07.029.

"Axial" is along the cable.

@thorstenhater
Copy link
Contributor

thorstenhater commented Sep 10, 2021

Based on discussions with @schmitts and internally, the plan is to implement the following:

Diffusion of the internal concentration Xi of arbitrary, user-specified ion species X according to

Xi' = ß∆Xi

Note that we -- for the time being -- ignore the possibility of ß varying spatially or temporaly, nor do we
allow for active transport. The diffusion parameter ß>=0 is defined by a user-specified constant and the
cross-section of the cable. If ß is finite, diffusion will be enabled and Xi will be defined on the whole cell.
This constant can be set per region and needs a default. Python interface could be similar to this:

decor.set_ion('k', diffusivity=42.0)

decor.paint('(segment 1)', arbor.ion('ca', diffusivity=42.0))

decor.set_ion('na',  diffusivity=0)
decor.paint('()', arbor.ion('na', diffusivity=42.0))

Here we will get

  • potassium with ß_K=42 everywhere and Ki will be defined everywhere.
  • calcium with ß_Ca=0 everywhere except on (segment 1) where ß_Ca=42 and Cai will be defined everywhere.
  • sodium will not be enable by these statements as either ß_Na=0 or the region on which ß_Na>0 is empty.

We implicitly assume here that ionic diffusion is on much larger time-scales than voltage propagation.
Otherwise, the discretisation would have to take into account the faster process. I think that is a sensible
assumption based on physics, but biologists are encouraged to correct me here. Based on essentially the
same argument, we do not plan to feed back currents caused by ionic transport into the cable equation
(just the effect of Xi/Xo on the overall state, if any).

@schmitts Is that sufficient for your plans and are our assumpions biologically sane?

This enables us to (more or less) directly re-use the voltage-solver and thus provide a quick implementation
based on well-tested components.

@schmitts
Copy link
Contributor Author

Thanks, @thorstenhater, for the write-up! No further requirements from our side.

@schmitts
Copy link
Contributor Author

Cf. PR #1729

@akuesters akuesters added this to the v0.7 milestone Nov 24, 2021
@brenthuisman brenthuisman modified the milestones: v0.7, v0.8 Feb 28, 2022
@thorstenhater
Copy link
Contributor

From private communication w/ @schmitts: FIPPA works on an 1d simulation, which could and should be used for validation.

@schmitts
Copy link
Contributor Author

Please find attached the bare-bones diffusion process we would need. In addition to some initial concentration of calcium (or any kind of diffusing element), point mechanisms have to have the possibility to increase the concentration at their respective positions in space.

diffusion_mock.py.gz

thorstenhater added a commit that referenced this issue Jun 21, 2022
# Introduction

Plasticity processes are mediated by signalling ions, eg Ca++, which are generated by 
synapses upon reception of a spike. This adds a quantity `Xd` for any ion `X`
- initialised as `Xi`
- read from and written to by NMODL density and point mechanisms.
- propagates according to a diffusion law `∂_t Xd = ∂_z c X ∂_z Xd + iX/qi`.
- in contrast to `Xi` and `Xo` there's no buffering and the update in mechanisms
  occurs atomically (and at a different time)

More details can be found in the documentation.

For the future there are some low hanging optimisations
- per-ion conductivity for the matrix solver could be disabled if no diffusion is computed
- cable and diffusion solvers store duplicates of the solver state, could be merged

Closes #1651
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants