-
Notifications
You must be signed in to change notification settings - Fork 1
/
ichan2.mod
167 lines (139 loc) · 3.59 KB
/
ichan2.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
TITLE ichan2.mod
COMMENT
konduktivitas valtozas hatasa- somaban
ENDCOMMENT
UNITS {
(mA) =(milliamp)
(mV) =(millivolt)
(uF) = (microfarad)
(molar) = (1/liter)
(nA) = (nanoamp)
(mM) = (millimolar)
(um) = (micron)
FARADAY = 96520 (coul)
R = 8.3134 (joule/degC)
}
? interface
NEURON {
SUFFIX ichan2
USEION nat READ enat WRITE inat VALENCE 1
USEION kf READ ekf WRITE ikf VALENCE 1
USEION ks READ eks WRITE iks VALENCE 1
NONSPECIFIC_CURRENT il
RANGE gnat, gkf, gks
RANGE gnatbar, gkfbar, gksbar
RANGE gl, el
RANGE minf, mtau, hinf, htau, nfinf, nftau, inat, ikf, nsinf, nstau, iks
}
INDEPENDENT {t FROM 0 TO 100 WITH 100 (ms)}
PARAMETER {
v (mV)
celsius = 6.3 (degC)
dt (ms)
enat (mV)
gnatbar (mho/cm2)
ekf (mV)
gkfbar (mho/cm2)
eks (mV)
gksbar (mho/cm2)
gl (mho/cm2)
el (mV)
}
STATE {
m h nf ns
}
ASSIGNED {
gnat (mho/cm2)
gkf (mho/cm2)
gks (mho/cm2)
inat (mA/cm2)
ikf (mA/cm2)
iks (mA/cm2)
il (mA/cm2)
minf hinf nfinf nsinf
mtau (ms) htau (ms) nftau (ms) nstau (ms)
mexp hexp nfexp nsexp
}
? currents
BREAKPOINT {
SOLVE states
gnat = gnatbar*m*m*m*h
inat = gnat*(v - enat)
gkf = gkfbar*nf*nf*nf*nf
ikf = gkf*(v-ekf)
gks = gksbar*ns*ns*ns*ns
iks = gks*(v-eks)
il = gl*(v-el)
}
UNITSOFF
INITIAL {
trates(v)
m = minf
h = hinf
nf = nfinf
ns = nsinf
VERBATIM
return 0;
ENDVERBATIM
}
? states
PROCEDURE states() { :Computes state variables m, h, and n
trates(v) : at the current v and dt.
m = m + mexp*(minf-m)
h = h + hexp*(hinf-h)
nf = nf + nfexp*(nfinf-nf)
ns = ns + nsexp*(nsinf-ns)
VERBATIM
return 0;
ENDVERBATIM
}
LOCAL q10
? rates
PROCEDURE rates(v) { :Computes rate and other constants at current v.
:Call once from HOC to initialize inf at resting v.
LOCAL alpha, beta, sum
q10 = 3^((celsius - 6.3)/10)
:"m" sodium activation system - act and inact cross at -40
alpha = -0.3*vtrap((v+60-17),-5)
beta = 0.3*vtrap((v+60-45),5)
sum = alpha+beta
mtau = 1/sum minf = alpha/sum
:"h" sodium inactivation system
alpha = 0.23/exp((v+60+5)/20)
beta = 3.33/(1+exp((v+60-47.5)/-10))
sum = alpha+beta
htau = 1/sum
hinf = alpha/sum
:"ns" sKDR activation system
alpha = -0.028*vtrap((v+65-35),-6)
beta = 0.1056/exp((v+65-10)/40)
sum = alpha+beta
nstau = 1/sum nsinf = alpha/sum
:"nf" fKDR activation system
alpha = -0.07*vtrap((v+65-47),-6)
beta = 0.264/exp((v+65-22)/40)
sum = alpha+beta
nftau = 1/sum nfinf = alpha/sum
}
PROCEDURE trates(v) { :Computes rate and other constants at current v.
:Call once from HOC to initialize inf at resting v.
LOCAL tinc
TABLE minf, mexp, hinf, hexp, nfinf, nfexp, nsinf, nsexp, mtau, htau, nftau, nstau
DEPEND dt, celsius FROM -100 TO 100 WITH 200
rates(v) : not consistently executed from here if usetable_hh == 1
: so don't expect the tau values to be tracking along with
: the inf values in hoc
tinc = -dt * q10
mexp = 1 - exp(tinc/mtau)
hexp = 1 - exp(tinc/htau)
nfexp = 1 - exp(tinc/nftau)
nsexp = 1 - exp(tinc/nstau)
}
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