Glutamate in the synaptic cleft

Extending NEURON to handle reaction-diffusion problems.

Moderators: hines, wwlytton, ramcdougal

Post Reply
srmainz
Posts: 1
Joined: Fri Feb 05, 2021 6:22 pm

Glutamate in the synaptic cleft

Post by srmainz »

Good morning everybody,

I have a couple of questions about diffusion of molecules in the extracellular spaces. I deeply looked into the forum trying to find something that could have helped me, but I was unsuccessful.

I would like to model glutamate diffusion in the synaptic cleft, with the aim to investigate the spillover effect on a specific (custom) model of AMPA receptor (9-state kinetics) where desensitization is altered.
My system is as follow:
A presynaptic (single compartment) cell, upon stimulation (NetStim), releases glutamate (release.mod from most of Destexhe models), which will then be pumped out in the extracellular space (pump.mod) and can diffuse (RxD) until it reaches the postsynaptic (single compartment) cell. Therefore AMPA receptors (custom AMPA.mod) will be activated depending on the concentration of glutamate they "see".

I have been able to solve most of the issues I run into, but few questions remain.

1) My main question is about the space where my molecules can diffuse. I set an extracellular space which includes the "points" where the release of glutamate occurs and where my AMPA receptor sit.
If glutamate is diffused in the cleft, will the molecules see the pre- and postsynaptic cell membrane "as obstacles" and then bounce? Or does the diffusion occur in the entire extracellular space I set, no matter what else is there?
I know that I can set volume_fraction and tortuosity values in order to have a kind of control on the diffusion, but as far as I understood, this doesn't allow me to select exactly which region of the extracellular space (I mean in terms of x,y,z coordinates) my molecules are not allowed "to go" to.

2) Following the first question, a possible work around would be, as far as I understood, to set the diffusion_coefficient as a function of coordinates (anisotropic diffusion). But so far the anisotropic diffusion in the extracellular space seems to be not supported yet. I tried the K+ diffusion example, and the anisotropic diffusion didn't work. Is there a way to work around this issue?

I hope my questions are clear. Thank a lot in advance!

Cheers
adamjhn
Posts: 54
Joined: Tue Apr 18, 2017 10:05 am

Re: Glutamate in the synaptic cleft

Post by adamjhn »

Thanks, you are right, the extracellular space was designed to be used at a macroscopic scale. The average volume that would be excluded in brain tissue is used to give the `volume_fraction` (typically 0.2) where substances are free to diffusion rather than excluding any particular voxel.

However it is possible to exclude given voxels using inhomogeneous diffusion, by setting the tortuosity to `inf` so diffusion into or out of that voxel is zero. The tortuosity can be a function of the x,y,z location or a numpy array the size of the ECS.

Here is an example of extracellular diffusion in a box with an excluded cylinder in the center;

Code: Select all

from neuron import h, rxd
from neuron.units import μm, ms, mM, mV
from matplotlib import pyplot
from math import inf
h.load_file('stdrun.hoc')
 
 
def exclude(x, y, z, diam, value_outside, value_inside=inf):
    """ Function returns value_outside if the (x,y,z) point is outside the
        diameter otherwise value_inside (defaults to inf)
    """
    
    if x**2 + y**2 <= diam**2:
        return value_inside
    return value_outside
 
 
# create the extracellular space with inhomogenous diffusion by defining 
# the tortuosity using a function of the x,y,z location
ecs = rxd.Extracellular(xlo=-55 * μm, ylo=-55 * μm, zlo=-5 * μm, xhi=55 * μm,
                        yhi=55 * μm, zhi=5 * μm, dx=5 * μm, volume_fraction=1.0,
                        tortuosity=lambda x,y,z: exclude(x, y, z, 20 * μm, 1.0))
 
# create a species
# here just to demonstrate diffusion, the bottom of the space initially has 
# 1 mM and the rest is empty
sp = rxd.Species(ecs, name='sp', d=5.0  * μm**2/ms,
                 initial=lambda nd: 1.0 * mM if nd.y3d < -15 * μm  else 0 * mM)
 
 
# initialize
h.finitialize(-70 * mV)
 
# plot the initialal conditions (a slice taken at z=0)
pyplot.figure(figsize=(8,3))
ax = pyplot.subplot(1,3,1)
pyplot.imshow(sp[ecs].states3d[:,:,1].T, vmax=1/mM, vmin=0/mM,
              origin='lower')
pyplot.title('Concentration at\nt={0:1.0f}ms'.format(h.t/ms))
pyplot.colorbar()
ax.axis('off')

h.continuerun(100 * ms)
 
# plot after 100ms
ax = pyplot.subplot(1,3,2)
pyplot.imshow(sp[ecs].states3d[:,:,1].T, vmax=1/mM, vmin=0/mM,
              origin='lower')
pyplot.title('Concentration at\nt={0:1.0f}ms'.format(h.t/ms))
pyplot.colorbar()
ax.axis('off')
 
h.continuerun(200 * ms)
 
# plot after 200ms
ax = pyplot.subplot(1,3,3)
pyplot.imshow(sp[ecs].states3d[:,:,1].T, vmax=1/mM, vmin=0/mM, origin='lower')
pyplot.title('Concentration at\nt={0:1.0f}ms'.format(h.t/ms))
pyplot.colorbar()
ax.axis('off')
pyplot.tight_layout()
pyplot.show()
Image
Here is the example in Google Colab.

Let us know if you run into any more difficulties.
Post Reply