Cell membrane with PMCA pump

Extending NEURON to handle reaction-diffusion problems.

Moderators: hines, wwlytton, ramcdougal

Post Reply
Posts: 34
Joined: Thu May 23, 2019 8:02 am
Location: Warsaw, Poland

Cell membrane with PMCA pump

Post by ziemek » Fri Jan 03, 2020 10:56 am


I would like to model PMCA pump on the cell membrane. In the Calcium wave example there is a serca pump model:

Code: Select all

cyt_er_membrane = rxd.Region(h.allsec(), geometry=rxd.DistributedBoundary(1))
serca = rxd.MultiCompartmentReaction(ca[cyt], ca[er], gserca / ((kserca / (1000. * ca[cyt])) ** 2 + 1), membrane=cyt_er_membrane, custom_dynamics=True)
But it is created between 2 inner regions of the cell.

How can I model pump which pumps Calcium out of the cell ?

Posts: 184
Joined: Fri Nov 28, 2008 3:38 pm
Location: Yale School of Public Health

Re: Cell membrane with PMCA pump

Post by ramcdougal » Fri Jan 03, 2020 12:59 pm

Are you trying to do this with a network model or a single cell? Do you care what happens to the extracellular concentration or do you want to treat that as constant?

A way of doing this is to an rxd.Extracellular domain and to use the rxd.membrane() geometry for the plasma membrane. The following example pumps out at a rate proportional to the current intracellular calcium concentration:

Code: Select all

import matplotlib.pyplot as plt
from neuron import h, rxd
from neuron.units import mV, ms

soma = h.Section(name='soma')
soma.diam = soma.L = 10

ecs = rxd.Extracellular(-20, -20, -20, 20, 20, 20, dx=10)
cyt = rxd.Region([soma], name='cyt', nrn_region='i')
mem = rxd.Region([soma], name='mem', geometry=rxd.membrane())

ca = rxd.Species([cyt, ecs],
                 d=1,  # with single section and nseg=1 only affects extracellular
                 initial=lambda node: 1e-3 if node.region==cyt else 0)

e = 1.60217662e-19
scale = 1e-14 / e

# rate constant is in terms of molecules/um2 ms
ca_pump = rxd.MultiCompartmentReaction(ca[cyt], ca[ecs], ca[cyt] * scale, 

t = h.Vector().record(h._ref_t)
ca_vec = h.Vector().record(soma(0.5)._ref_cai)
ca_vec2 = h.Vector().record(ca[ecs].node_by_location(5, 0, 0)._ref_value)
v = h.Vector().record(soma(0.5)._ref_v)

h.finitialize(-65 * mV)
h.continuerun(100 * ms)

plt.subplot(2, 1, 1)
plt.plot(t, ca_vec * 1000, label='inside')
plt.plot(t, ca_vec2 * 1000, label='outside')
plt.ylabel('[Ca] (uM)')
plt.subplot(2, 1, 2)
plt.plot(t, v)
plt.ylabel('v (mV)')
plt.xlabel('t (ms)')

The membrane_flux=True indicates that we must respect the fact that the pump, by moving ions, is by definition generating a current. Some people prefer to consider the corresponding effects on membrane potential to be cancelled out by other, not explicitly modeled currents. In that case, you could set this to False (then membrane potential would stay constant.)

If you're wondering why membrane potential is so affected (it should get down to -112 mV), it's only because we didn't add any other currents (not even leak).

Posts: 34
Joined: Thu May 23, 2019 8:02 am
Location: Warsaw, Poland

Re: Cell membrane with PMCA pump

Post by ziemek » Fri Jan 03, 2020 1:15 pm

Thank you for the fast and very detailed response! :)

Currently I don't care so much about extracellular space so I wonder if there is any other way to pump out Ca2+? Because I assume that the extracellular computation maybe much more expensive.

Also I would like to specify explicitly 2 reactions:
  • ca2 + pmca <-> pmca_ca (Ca2+ binding with PMCA pump)
  • pmca_ca <-> pmca + ca_out (pumping out Ca2+ and PMCA returns to the initial conformation)
So I created this code:

Code: Select all

pmca = rxd.Species(regions=cyt, initial=PMCA_CONCENTRATION * nM)
pmca_ca = rxd.Species(regions=cyt, initial=0)

pmca_ca_reaction = rxd.Reaction(ca + pmca, pmca_ca, kf1, kb1)
pmca_ca__pmca_reaction = rxd.Reaction(pmca_ca, pmca, kf_out, 0)  # CaOut
But in this case pmca pump is just "floating" inside the compartment as any other buffer, so is there any way to create a species and attach it into the membrane?

Post Reply