Changing range parameters

NMODL and the Channel Builder.
Post Reply
renewilbers
Posts: 2
Joined: Tue Oct 08, 2019 11:50 am

Changing range parameters

Post by renewilbers »

Hello, I am trying to fit my own version of hh.mod (the one included in NEURON) to my experimental voltage clamp traces of sodium currents.

Therefore I replaced the numbers in the alpha end beta functions by range variables which I also assigned in the parameter block. For example the alpha function of the 'm' gate becomes

Code: Select all

alpha = am0 * vtrap(-(v+am1),am2)
I noticed that when I change these variables from python, for example

Code: Select all

cell.am0_na_hh=0.2
, it does not affect my simulations at all. print(cell.am0_na_hh) and also h.psection(cell) return the right values, however my simulations behave as if the range variable is still in it's original value assigned in the parameter block of the mod file.

I find this particularly puzzling since changing 'gnabar' does have the expected effect, so it seems to only affect variables that are used in the 'rates PROCEDURE'

Does anyone have an idea what could be going on here?


Here is my modified version of the mod file:

Code: Select all

TITLE hh.mod   squid sodium, potassium, and leak channels
 
COMMENT
 This is the original Hodgkin-Huxley treatment for the set of sodium, 
  potassium, and leakage channels found in the squid giant axon membrane.
  
 SW Jaslove  6 March, 1992
ENDCOMMENT
 
? interface
NEURON {
        SUFFIX na_hh
        USEION na READ ena WRITE ina
        RANGE gnabar, gna, am0, am1, am2, bm0, bm1,bm2, ah0, ah1,ah2, bh0, bh1, bh2
        GLOBAL minf, hinf,  mtau, htau
	THREADSAFE : assigned GLOBALs will be per thread
}

UNITS {
        (mA) = (milliamp)
        (mV) = (millivolt)
	(S) = (siemens)
}
PARAMETER {
        gnabar = .12 (S/cm2)	<0,1e9>
        am0 = 0.1 (/ms)
        am1 = 40
        am2 = 10
        bm0 = 4
        bm1 = 65
        bm2 = 18
        ah0 = 0.07
        ah1 = 65
        ah2 = 20
        bh0 = 1
        bh1 = 35
        bh2 = 10
}
 
ASSIGNED {
        v (mV)
        celsius (degC)
        ena (mV)

    	gna (S/cm2)
        ina (mA/cm2)
        
        minf hinf ninf
    	mtau (ms) htau (ms)
}

STATE {
        m h
}
 
? currents
INITIAL {
	rates(v)
	m = minf
	h = hinf
}
BREAKPOINT {
        SOLVE states METHOD cnexp
        gna = gnabar*m*m*m*h
    	ina = gna*(v - ena)
}
 
? states
DERIVATIVE states {  
        rates(v)
        m' =  (minf-m)/mtau
        h' = (hinf-h)/htau
}
 
:LOCAL q10


? rates
PROCEDURE rates(v(mV)) {  :Computes rate and other constants at current v.
                      :Call once from HOC to initialize inf at resting v.
        LOCAL  alpha, beta, sum, q10
        : `TABLE minf` will be replaced with `:TABLE minf` if CoreNEURON enabled)
        TABLE minf, mtau, hinf, htau DEPEND celsius FROM -100 TO 100 WITH 200

UNITSOFF
        q10 = 3^((celsius - 25)/10)
                :"m" sodium activation system
        alpha = am0 * vtrap(-(v+am1),am2)
        beta =  bm0 * exp(-(v+bm1)/bm2)
        sum = alpha + beta
	mtau = 1/(q10*sum)
        minf = alpha/sum
                :"h" sodium inactivation system
        alpha = ah0 * exp(-(v+ah1)/ah2)
        beta = bh0 / (exp(-(v+bh1)/bh2) + 1)
        sum = alpha + beta
	htau = 1/(q10*sum)
        hinf = alpha/sum
}
 
FUNCTION vtrap(x,y) {  :Traps for 0 in denominator of rate eqns.
        if (fabs(x/y) < 1e-6) {
                vtrap = y*(1 - x/y/2)
        }else{
                vtrap = x/(exp(x/y) - 1)
        }
}
 
UNITSON
renewilbers
Posts: 2
Joined: Tue Oct 08, 2019 11:50 am

Re: Changing range parameters

Post by renewilbers »

Nevermind! Just learned about TABLE statements, commented out the statement and now it works fine. I will not delete the post in case other learners come across the same issue.
Post Reply