-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhh1.mod
121 lines (109 loc) · 2.27 KB
/
hh1.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
INDEPENDENT {t FROM 0 TO 1 WITH 1 (ms)}
NEURON {
SUFFIX hh1
USEION na READ ena WRITE ina
USEION k READ ek WRITE ik
NONSPECIFIC_CURRENT il
RANGE gnabar, gkbar, gl, el, gna, gk
GLOBAL minf, hinf, ninf, mtau, htau, ntau
POINTER dMemPot
}
UNITS {
(mV) = (millivolt)
(S) = (siemens)
}
PARAMETER {
gnabar = .12 (S/cm2)
gkbar = .036 (S/cm2)
gl = .0003 (S/cm2)
el = -54.3 (mV)
ena = 50 (mV)
ek = -90 (mV)
gsoma = 100 (nS)
celsius = 36 (degC)
dt (ms)
v (mV)
vtraub = -63 (mV)
}
STATE {
m h n
sMemPot (mV)
}
ASSIGNED {
ina (mA/cm2)
ik (mA/cm2)
il (mA/cm2)
gna (S/cm2)
gk (S/cm2)
minf
hinf
ninf
mtau (ms)
htau (ms)
ntau (ms)
tadj
dMemPot (mV)
}
BREAKPOINT {
SOLVE states METHOD cnexp
gna = gnabar*m*m*m*h
ina = gna*(v - ena)
gk = gkbar*n*n*n*n
ik = gk*(v - ek)
il = gl*(v - el)
}
INITIAL {
rates(v, celsius)
m = minf
h = hinf
n = ninf
sMemPot = -78.8361 (mV)
}
DERIVATIVE states {
rates(v, celsius)
m' = (minf-m)/mtau
h' = (hinf-h)/htau
n' = (ninf-n)/ntau
sMemPot' = -(ina+ik+il) + gsoma * (dMemPot - sMemPot)
}
PROCEDURE rates(v, celsius)
{
LOCAL alpha, beta, sum, q10
q10 = 3^((celsius - 6.3)/10)
:"m" sodium activation system
alpha = .1 * vtrap(-(v+40),10)
beta = 4 * exp(-(v+65)/18)
sum = alpha + beta
mtau = 1/(q10*sum)
minf = alpha/sum
:"h" sodium inactivation system
alpha = .07 * exp(-(v+65)/20)
beta = 1 / (exp(-(v+35)/10) + 1)
sum = alpha + beta
htau = 1/(q10*sum)
hinf = alpha/sum
:"n" potassium activation system
alpha = .01*vtrap(-(v+55),10)
beta = .125*exp(-(v+65)/80)
sum = alpha + beta
ntau = 1/(q10*sum)
ninf = alpha/sum
}
:FUNCTION vtrap(x,y) {
: use built in exprelr(z) = z/(exp(z)-1), which handles the z=0 case correctly
: vtrap = y*exprelr(x/y)
:}
FUNCTION vtrap(x,y) {
if (fabs(x/y) < 1e-6) {
vtrap = y*(1 - x/y/2)
}else{
vtrap = x/(Exp(x/y)-1)
}
}
FUNCTION Exp(x) {
if (x < -100) {
Exp = 0
}else{
Exp = exp(x)
}
}