-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathna.mod
206 lines (157 loc) · 4.87 KB
/
na.mod
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
COMMENT
na.mod
Sodium channel, Hodgkin-Huxley style kinetics.
Kinetics were fit to data from Huguenard et al. (1988) and Hamill et
al. (1991)
qi is not well constrained by the data, since there are no points
between -80 and -55. So this was fixed at 5 while the thi1,thi2,Rg,Rd
were optimized using a simplex least square proc
voltage dependencies are shifted approximately from the best
fit to give higher threshold
Author: Zach Mainen, Salk Institute, 1994, [email protected]
26 Ago 2002 Modification of original channel to allow
variable time step and to correct an initialization error.
Done by Michael Hines([email protected]) and
Ruggero Scorcioni([email protected]) at EU Advance Course
in Computational Neuroscience. Obidos, Portugal
11 Jan 2007 Fixed glitch in trap where (v/th) was where (v-th)/q is.
(thanks Ronald van Elburg!)
20110202 made threadsafe by Ted Carnevale
20120514 replaced vtrap0 with efun, which is a better approximation
in the vicinity of a singularity
Special comment:
This mechanism was designed to be run at a single operating
temperature--37 deg C--which can be specified by the hoc
assignment statement
celsius = 37
This mechanism is not intended to be used at other temperatures,
or to investigate the effects of temperature changes.
Zach Mainen created this particular model by adapting conductances
from lower temperature to run at higher temperature, and found it
necessary to reduce the temperature sensitivity of spike amplitude
and time course. He accomplished this by increasing the net ionic
conductance through the heuristic of changing the standard HH
formula
g = gbar*product_of_gating_variables
to
g = tadj*gbar*product_of_gating_variables
where
tadj = q10^((celsius - temp)/10)
temp is the "reference temperature" (at which the gating variable
time constants were originally determined)
celsius is the "operating temperature"
Users should note that this is equivalent to changing the channel
density from gbar at the "reference temperature" temp (the
temperature at which the at which the gating variable time
constants were originally determined) to tadj*gbar at the
"operating temperature" celsius.
ENDCOMMENT
NEURON {
THREADSAFE
SUFFIX na
USEION na READ ena WRITE ina
RANGE m, h, gna, gbar
GLOBAL tha, thi1, thi2, qa, qi, qinf, thinf
RANGE minf, hinf, mtau, htau
GLOBAL Ra, Rb, Rd, Rg
GLOBAL q10, temp, tadj, vmin, vmax, vshift
}
UNITS {
(mA) = (milliamp)
(mV) = (millivolt)
(pS) = (picosiemens)
(um) = (micron)
}
PARAMETER {
gbar = 1000 (pS/um2) : 0.12 mho/cm2
vshift = -10 (mV) : voltage shift (affects all)
tha = -35 (mV) : v 1/2 for act (-42)
qa = 9 (mV) : act slope
Ra = 0.182 (/ms) : open (v)
Rb = 0.124 (/ms) : close (v)
thi1 = -50 (mV) : v 1/2 for inact
thi2 = -75 (mV) : v 1/2 for inact
qi = 5 (mV) : inact tau slope
thinf = -65 (mV) : inact inf slope
qinf = 6.2 (mV) : inact inf slope
Rg = 0.0091 (/ms) : inact (v)
Rd = 0.024 (/ms) : inact recov (v)
temp = 23 (degC) : original temp
q10 = 2.3 : temperature sensitivity
: dt (ms)
vmin = -120 (mV)
vmax = 100 (mV)
}
ASSIGNED {
v (mV)
celsius (degC)
ina (mA/cm2)
gna (pS/um2)
ena (mV)
minf hinf
mtau (ms) htau (ms)
tadj
}
STATE { m h }
INITIAL {
tadj = q10^((celsius - temp)/(10 (degC))) : make all threads calculate tadj at initialization
trates(v+vshift)
m = minf
h = hinf
}
BREAKPOINT {
SOLVE states METHOD cnexp
gna = tadj*gbar*m*m*m*h
ina = (1e-4) * gna * (v - ena)
}
: LOCAL mexp, hexp
DERIVATIVE states { :Computes state variables m, h, and n
trates(v+vshift) : at the current v and dt.
m' = (minf-m)/mtau
h' = (hinf-h)/htau
}
PROCEDURE trates(v (mV)) {
TABLE minf, hinf, mtau, htau
DEPEND celsius, temp, Ra, Rb, Rd, Rg, tha, thi1, thi2, qa, qi, qinf
FROM vmin TO vmax WITH 199
rates(v): not consistently executed from here if usetable == 1
: tinc = -dt * tadj
: mexp = 1 - exp(tinc/mtau)
: hexp = 1 - exp(tinc/htau)
}
: efun() is a better approx than trap0 in vicinity of singularity--
UNITSOFF
PROCEDURE rates(vm (mV)) {
LOCAL a, b
: a = trap0(vm,tha,Ra,qa)
a = Ra * qa * efun((tha - vm)/qa)
: b = trap0(-vm,-tha,Rb,qa)
b = Rb * qa * efun((vm - tha)/qa)
tadj = q10^((celsius - temp)/10)
mtau = 1/tadj/(a+b)
minf = a/(a+b)
:"h" inactivation
: a = trap0(vm,thi1,Rd,qi)
a = Rd * qi * efun((thi1 - vm)/qi)
: b = trap0(-vm,-thi2,Rg,qi)
b = Rg * qi * efun((vm - thi2)/qi)
htau = 1/tadj/(a+b)
hinf = 1/(1+exp((vm-thinf)/qinf))
}
UNITSON
COMMENT
FUNCTION trap0(v,th,a,q) {
if (fabs((v-th)/q) > 1e-6) {
trap0 = a * (v - th) / (1 - exp(-(v - th)/q))
} else {
trap0 = a * q
}
}
ENDCOMMENT
FUNCTION efun(z) {
if (fabs(z) < 1e-6) {
efun = 1 - z/2
}else{
efun = z/(exp(z) - 1)
}
}