Calcium difusion and buffering with variable diameter

NMODL and the Channel Builder.
Post Reply
patoorio
Posts: 83
Joined: Wed Jan 30, 2008 12:46 pm

Calcium difusion and buffering with variable diameter

Post by patoorio »

Hi,

I am using the calcium diffusion and buffering mechanism presented as Example 8 of the NMODL expanded documentation, with the additions specified in the Example 9 that add a calcium pump (the complete code is below).
In addition, I have an L-type calcium channel mechanism which provides some calcium entry.
The section in which I am inserting it has variable diameter (diam(0:1)=6:0.5, nseg=50, L=500) and I am not sure whether that is a good idea given some particuarities of the mechanism. The result of the simulation is a constant increase of calcium at the narrowest end of the section, something that does not happen when simulating with a section of constant diameter. I have noticed, though, that with constant diameter the steady state calcium concentration increases as the diameter decreases, indicating that what I am seeing is a normal consequence of the geometry.
I have tried to compensate it with a variable density of the calcium channel or with a variable value for some parameter such as buffer concentration or pump density, and it seems to work.

Does anybody think that there is a more 'wise' way of dealing with this?
Any help will be greatly appreciated.

Code: Select all

: Calcium ion accumulation with radial and longitudinal diffusion + calcium pump
: Hines and Carnevale:Expanding NEURON with NMODL, Examples 8 & 9

NEURON {
	SUFFIX cdp
	USEION ca READ cao, cai, ica WRITE cai, ica
	RANGE ica_pmp
	GLOBAL vrat, TotalBuffer, TotalPump
}
DEFINE Nannuli 4

UNITS {
	(mol)	= (1)
	(molar) = (1/liter)
	(mM)    = (millimolar)
	(um)    = (micron)
	(mA)    = (milliamp)
	FARADAY = (faraday)  (10000 coulomb)
	PI      = (pi)       (1)
}

PARAMETER {
	DCa   = 0.6 (um2/ms)
	k1buf = 100 (/mM-ms) : Yamada et al. 1989
	k2buf = 0.1 (/ms)
	TotalBuffer = 0.003  (mM)
	k1 = 1      (/mM-ms)
	k2 = 0.005  (/ms)
	k3 = 1      (/ms)
	k4 = 0.005  (/mM-ms)
	TotalPump = 1e-14  (mol/cm2) : to eliminate pump, set TotalPump to 0 in hoc
}

ASSIGNED {
	diam      (um)
	ica       (mA/cm2)
	cai       (mM)
	vrat[Nannuli]  : numeric value of vrat[i] equals the volume
	               : of annulus i of a 1um diameter cylinder
	               : multiply by diam^2 to get volume per um length
	Kd        (/mM)
	B0        (mM)
	cao      (mM)
	ica_pmp  (mA/cm2)
	parea    (um)
}

CONSTANT { volo = 1e10  (um2) }

STATE {
	: ca[0] is equivalent to cai
	: ca[] are very small, so specify absolute tolerance
	ca[Nannuli]       (mM) <1e-10>
	CaBuffer[Nannuli] (mM)
	Buffer[Nannuli]   (mM)
	pump    (mol/cm2)
	pumpca  (mol/cm2)
}

BREAKPOINT { 
	SOLVE state METHOD sparse
	ica = ica_pmp
}

LOCAL factors_done

INITIAL {
    if (factors_done == 0) {  : flag becomes 1 in the first segment
 	    factors_done = 1       :   all subsequent segments will have
    	factors()              :   vrat = 0 unless vrat is GLOBAL
	}
	Kd = k1buf/k2buf
	B0 = TotalBuffer/(1 + Kd*cai)
	FROM i=0 TO Nannuli-1 {
		ca[i] = cai
		Buffer[i] = B0
		CaBuffer[i] = TotalBuffer - B0
	}
	parea = PI*diam
	pump = TotalPump/(1 + (cai*k1/k2))
	pumpca = TotalPump - pump
}

LOCAL frat[Nannuli]  : scales the rate constants for model geometry

PROCEDURE factors() {
	LOCAL r, dr2
	r = 1/2                : starts at edge (half diam)
	dr2 = r/(Nannuli-1)/2  : full thickness of outermost annulus,
	                       : half thickness of all other annuli
	vrat[0] = 0
	frat[0] = 2*r
	FROM i=0 TO Nannuli-2 {
		vrat[i] = vrat[i] + PI*(r-dr2/2)*2*dr2  : interior half
		r = r - dr2
		frat[i+1] = 2*PI*r/(2*dr2)  : outer radius of annulus
		                            : div by distance between centers
		r = r - dr2
		vrat[i+1] = PI*(r+dr2/2)*2*dr2  : outer half of annulus
	}
}

LOCAL dsq, dsqvol  : can't define local variable in KINETIC block
                   :   or use in COMPARTMENT statement

KINETIC state {
	COMPARTMENT i, diam*diam*vrat[i] {ca CaBuffer Buffer}
	COMPARTMENT (1e10)*parea {pump pumpca}
	COMPARTMENT volo {cao}
	LONGITUDINAL_DIFFUSION i, DCa*diam*diam*vrat[i] {ca}

	:pump
	~ ca[0] + pump <-> pumpca  (k1*parea*(1e10), k2*parea*(1e10))
	~ pumpca <-> pump + cao    (k3*parea*(1e10), k4*parea*(1e10))
	CONSERVE pump + pumpca = TotalPump * parea * (1e10)
	ica_pmp = 2*FARADAY*(f_flux - b_flux)/parea
	
	: all currents except pump
	~ ca[0] << (-(ica - ica_pmp)*PI*diam/(2*FARADAY))
	FROM i=0 TO Nannuli-2 {
		~ ca[i] <-> ca[i+1]  (DCa*frat[i+1], DCa*frat[i+1])
	}
	dsq = diam*diam
	FROM i=0 TO Nannuli-1 {
		dsqvol = dsq*vrat[i]
		~ ca[i] + Buffer[i] <-> CaBuffer[i]  (k1buf*dsqvol, k2buf*dsqvol)
	}
	cai = ca[0]
}
ted
Site Admin
Posts: 6305
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Post by ted »

constant increase of calcium at the narrowest end of the section, something that does not happen when simulating with a section of constant diameter
That doesn't seem right. Whether or not there is a net ca influx is a property of the
membrane, and has nothing to do with the diameter of the cell. Have you examined the time
course of cai in a constant diam model whose diam is the same as the smallest diam in your
variable diam model?
patoorio
Posts: 83
Joined: Wed Jan 30, 2008 12:46 pm

Post by patoorio »

ted wrote: Have you examined the time course of cai in a constant diam model whose diam is the same as the smallest diam in your variable diam model?
Indeed I have, and the result is the same as in the narrowest section of the model with variable diameter. In other words, the steady state cai is highly dependant on the section diameter and that is the reason for the result I am getting. The dependancy is non linear, and I don't see any 'notorious' increase in calcium unless the section is ~2µm or less.
So what do you think is the most 'biologically plausible' fix for this?
- A gradient of calcium channel density?
- A gradient of calcium pump density?
- both?

Besides, does it make any sense treating a section of 0.5 µm diameter as 4 concentric shells? And what about the 6 µm end?

By the way (with regard to the biological plausibility), this a simplified model of an apical dendrite from a CA1 hipocampal neuron.
ted
Site Admin
Posts: 6305
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Post by ted »

Before getting too philosophical, I'd like to see this for myself. My intuition may
be wrong, in which case I learn something new, or maybe there's a bug
somewhere. Could you please zip up just enough hoc, ses, and mod files so
I can reproduce the phenomenon, and send it to me at
ted dot carnevale at yale dot edu
?
ted
Site Admin
Posts: 6305
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Post by ted »

NEURON's standard initialization left the model in a state where ca influx
through ion channel(s) was not balanced by the ca efflux generated by the
pump. Consequently, cai increased in all segments of all sections.
Accumulation was slow, and cai took more than 60000 ms to reach steady
state, at which point the electrochemical gradient for ca influx through ion
channels had decreased, and the pump's rate of ca extrusion had increased,
sufficiently for the two fluxes to balance each other.

This model requires a custom initialization to ensure that simulations start at
steady state. This should be possible using strategies similar to those
discussed in chapter 8 of The NEURON Book.
does it make any sense treating a section of 0.5 µm diameter as 4 concentric shells? And what about the 6 µm end?
The issue is whether spatial discretization for intracellular ca diffusion is
sufficiently fine to achieve the desired accuracy, without prolonging run time
excessively. This is an empirical question, the answer to which depends on
the intent of the modeler. If the purpose of the model is to investigate a
calcium-actviated hyperpolarization, which has a slow time course, a
coarse spatial grid is OK. If the purpose is to investigate peak cai near
the membrane elicited by a spike, a fine grid is necessary.
ted
Site Admin
Posts: 6305
Joined: Wed May 18, 2005 4:50 pm
Location: Yale University School of Medicine
Contact:

Re: Calcium difusion and buffering with variable diameter

Post by ted »

patoorio wrote:I am using the calcium diffusion and buffering mechanism presented as Example 8 of the NMODL expanded documentation, with the additions specified in the Example 9 that add a calcium pump (the complete code is below).
The example is from the Hines & Carnevale 2000 paper in Neural Computation. It contains
an error that causes incorrect initialization and results that may vary from run to run. The
error and its fix are now described here
http://www.neuron.yale.edu/neuron/paper ... rrata.html
along with complete source code for an implementation of this mechanism that works
properly.

Please note that the "calcium pump with diffusion and buffering" mechanism that is presented
in chapter 9 of The NEURON Book does NOT suffer from this error.
Post Reply