sodium buffering

NMODL and the Channel Builder.
Post Reply
jamie

sodium buffering

Post by jamie »

This is a sodium accumulation mechanism (with longitundinal diffusion). This nadifl mechanism is from the nadifl.mod file that is part of the nigral dopaminergic cell model in ModelDB, by Carmen Canavier; see

http://senselab.med.yale.edu/senselab/m ... model=6763

I would like to modify this mechanism to have buffering. I know that sodium does not have a buffer physiologically. But nevertheless I would like to add buffering to this mechanism.

This calcium mechanism has buffering:

http://senselab.med.yale.edu/senselab/m ... difusl.mod

And I have made a version of this mechanism for sodium, such that I have a sodium mechanism with buffering. BUT is just too far removed from the simplicity of the Canavier sodium mechansim. The Canavier sodium mechanism with buffering would be perfect. Such that in this mechanism, when I set the buffering rate constants to 0 - I just have effectively the original Canavier sodium mechanism. However, I post here because I am not confident in making this modification and enquire if anyone has the time to help or advice.
jamie

Post by jamie »

This is what I have so far. Not sure how close I am. But it compiles ok. I am very unsure about the double declaration of ~nai. Is that ok? I have this mechanism in my model now and am doing some playing with it. At present I have set the rate constants for buffering to 0. But am now intending to play with their values.

What I want the mechanism to do:

1) sodium accumulation
2) sodium longitudinal diffusion
3) sodium buffering. Some sodium is buffered. Some is left free. I can control the buffered to free ratio by setting the rate constants for buffering reaction.

Code: Select all


COMMENT
Longitudinal diffusion of sodium (no buffering)
(equivalent modified euler with standard method and
equivalent to diagonalized linear solver with CVODE )
ENDCOMMENT

NEURON {
	SUFFIX nadifl
	USEION na READ ina WRITE nai
	RANGE D
}

UNITS {
	(mM) = (milli/liter)
	(um) = (micron)
	FARADAY = (faraday) (coulomb)
	PI = (pi) (1)
}

PARAMETER {
	D = .6 (um2/ms)
        k1buf = 0		(/mM-ms)
	k2buf = 0		(/ms)

}

ASSIGNED {
	ina (milliamp/cm2)
	diam (um)
}

STATE {
	nai (mM)
	NaBuffer  (mM)
	Buffer    (mM)
}

BREAKPOINT {
	SOLVE conc METHOD sparse
}

KINETIC conc {
	COMPARTMENT PI*diam*diam/4 {nai}
	LONGITUDINAL_DIFFUSION D {nai}
	~ nai << (-ina/(FARADAY)*PI*diam*(1e4))
	~ nai + Buffer <-> NaBuffer (k1buf,k2buf)
}


Last edited by jamie on Thu Dec 07, 2006 3:08 pm, edited 1 time in total.
jamie

Post by jamie »

Actually testing in the model as drawn to my attention that alhtough this mechanism compiles ok. Think there is definitely something wrong with it. My hunch is the double declaration of ~nai.
jamie

Post by jamie »

So this is the latest version. I know that it isn't working as it should yet though because in the cell model I am graphing "NaBuffer" and do not see it rise. So, not there yet! Unfortunately.

i would like to be able to keep track of the ammount of bound buffer and a new cai value.

Code: Select all


COMMENT
Longitudinal diffusion of sodium (no buffering)
(equivalent modified euler with standard method and
equivalent to diagonalized linear solver with CVODE )
ENDCOMMENT

NEURON {
	SUFFIX nadifl
	USEION na READ ina WRITE nai
	RANGE D, NaBuffer
}

UNITS {
	(mM) = (milli/liter)
	(um) = (micron)
	FARADAY = (faraday) (coulomb)
	PI = (pi) (1)
}

PARAMETER {
	D = .6 (um2/ms)
        k1buf = 500		(/mM-ms)
	k2buf = 2		(/ms)

}

ASSIGNED {
	ina (milliamp/cm2)
	diam (um)
}

STATE {
	nai (mM)
	NaBuffer  (mM)
	Buffer    (mM)
}


BREAKPOINT {
        SOLVE state METHOD sparse
}

INITIAL {
NaBuffer = Buffer/(1+k2buf/k1buf/nai)
}


KINETIC state {
        COMPARTMENT PI*diam*diam/4 {nai}
	LONGITUDINAL_DIFFUSION D {nai}
	~ nai << (-ina/(FARADAY)*PI*diam*(1e4))
	~ nai + Buffer <-> NaBuffer (k1buf,k2buf)
}

jamie

Post by jamie »

This is my latest version. Am a lot closer. May even be right on top of it! Would be very grateful to anyone that can lend an eye to it and perhaps see if they can see any problems with it. It seems ok to me and my testing. But given my inexperience there is always a lot of scope for a mistake.

Code: Select all


COMMENT
Longitudinal diffusion of sodium (no buffering)
(equivalent modified euler with standard method and
equivalent to diagonalized linear solver with CVODE )
ENDCOMMENT

NEURON {
	SUFFIX nadifl
	USEION na READ ina WRITE nai
	RANGE D, NaBuffer
}

UNITS {
	(mM) = (milli/liter)
	(um) = (micron)
	FARADAY = (faraday) (coulomb)
	PI = (pi) (1)
}

PARAMETER {
	D = .6 (um2/ms)
       k1buf = 100 (/mM-ms) : Yamada et al. 1989
       k2buf = 0.1 (/ms)
       TotalBuffer = 0.003 (mM)
}

ASSIGNED {
	ina (milliamp/cm2)
	diam (um)
        Kd (/mM)
        B0 (mM)
:        nai (mM)
}

STATE {
	nai (mM)
	NaBuffer  (mM)
	Buffer    (mM)
}


BREAKPOINT {
        SOLVE state METHOD sparse
}

INITIAL {
Kd = k1buf/k2buf
B0 = TotalBuffer/(1 + Kd*nai)
Buffer = B0
NaBuffer = TotalBuffer - B0
}


KINETIC state {
        COMPARTMENT PI*diam*diam/4 {nai}
	LONGITUDINAL_DIFFUSION D {nai}
	~ nai << (-ina/(FARADAY)*PI*diam*(1e4))
	~ nai + Buffer <-> NaBuffer (k1buf,k2buf)
}





Post Reply