Page 1 of 1

Using NEURON to model a system of endocrine cells

Posted: Tue Jun 30, 2020 2:58 pm
by Robert Claar

I am new to NEURON (and programming in general) and I am working with my lab partner to build a model of pancreatic islet cells using previous models not created in the NEURON framework. These previous models didn't have a spatial component and my lab partner and I want to utilize NEURON to add in this feature to the two existing models. Each cell type in the pancreatic islet secretes a hormone and that hormone affects the other cells. In the previous models, there was a single, well-mixed "sink" that held the concentrations of each of the hormones. In our model we want each cell to have it's own "sink" that is comprised of it's own internal hormone concentration, as well as the concentration of hormones secreted from other cells near it. If cell b secretes hormone i then we would like to have the concentration of i be greatest just outside the plasma membrane and decrease as you move radially away from the cell.

We have created mod file mechanisms for the secretion of each of the hormones as well as the ion channels in each of the cell types. This replicated the two models we are basing ours off of well. The next step we're trying to take is adding on the spatial relationships that I described above.

At first we tried to use NetCon because the weighting seemed like it would help us weight the effects of the hormones by distance, but the threshold argument was an issue because we needed a reading of the hormones coming from other cells at each time step, not just when a threshold was crossed. I was wondering if Reaction-Diffusion in NEURON could help us accomplish the individual "sinks" and spatial relationships I described above. If so, how would we set it up or where would we learn how to set it up? Any help is appreciated!

Re: Using NEURON to model a system of endocrine cells

Posted: Tue Jun 30, 2020 10:56 pm
by adamjhn
Here is a simple example of two cells connected by diffusion through the extracellular space.

Code: Select all

from neuron import h, rxd
from neuron.rxd import v
from neuron.units import mV, s 
from matplotlib import pyplot


# create a couple of cells 
cell1 = h.Section('cell1')

cell2 = h.Section('cell2')

# Where?
# the intracellular spaces
cyt = rxd.Region(h.allsec(), name='cyt', nrn_region='i')

# plasma membrane 
mem = rxd.Region(h.allsec(), name='mem', geometry=rxd.membrane)

# the extracellular space
ecs = rxd.Extracellular(-35, -15, -15, 35, 15, 15, dx=10, volume_fraction=0.2, tortuosity=1.6)

# Who?
glucagon = rxd.Species([cyt, ecs], name='glucagon', d=1.0, initial=lambda nd: 1 if hasattr(nd, 'sec') and nd.segment in cell1 else 0)
gcyt = glucagon[cyt]
gecs = glucagon[ecs]

# interaction between intracellular and extracellular glucagon
R = 1e3
U = 1e5
rrate = R*gcyt*(-v) # release rate [molecules per square micron per ms]
urate = U*gecs      # uptake rate [molecules per square micron per ms]
glucagon_release = rxd.MultiCompartmentReaction(gcyt, gecs, rrate, urate,

# record the concentrations in the cells
t_vec = h.Vector()
gl_cell1 = h.Vector().record(cell1(0.5)._ref_glucagoni)
gl_ecs = h.Vector().record(gecs.node_by_location(0,0,0)._ref_concentration)
gl_cell2 = h.Vector().record(cell2(0.5)._ref_glucagoni)

# run and plot the results
h.finitialize(-65 * mV)
h.continuerun(1 * s)

fig = pyplot.figure(dpi=200)
pyplot.plot(t_vec,gl_cell1, label='cell1')
pyplot.plot(t_vec,gl_ecs, label='ecs')
pyplot.plot(t_vec,gl_cell2, label='cell2')
pyplot.xlabel('t (ms)')
pyplot.ylabel('glucagon (mM)')

In this simple example, if Gi is the intracellular glucagon and Go the extracellular glucagon (in the voxel that contains the segment) then release/update mechanism;
Gi’ = D∇²Gi - (R*Gi*(-v) - U*Go) * surface_area/ (intracellular_volume*NA)
Go’ = D∇²Go + (R*Gi*(-v) - U*Go) * surface_area/ (extracellular_volume*volume_fraction*NA)
I made release dependent on voltage, which I saw you mentioned in another post (although in this example the voltage doesn’t change).

It’s similar to an example I posted here, which makes use of a mod file rather than a multicompartment reaction, to make rxd work with the mod file you just have to use the same name and charge for the rxd.Specie and USEION in the mod file.

There are also more rxd examples here
There is an upcoming rxd tutorial on July 18;

Re: Using NEURON to model a system of endocrine cells

Posted: Fri Jul 03, 2020 8:21 am
by Robert Claar
Thank you so much, this helps a lot. I will try to create my own script inserting the mechanisms I have created.