forked from nest/nestml
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhh_cond_exp_destexhe.nestml
164 lines (121 loc) · 6.6 KB
/
hh_cond_exp_destexhe.nestml
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
"""
hh_cond_exp_destexhe - Hodgin Huxley based model, Traub, Destexhe and Mainen modified
#####################################################################################
Description
+++++++++++
hh_cond_exp_destexhe is an implementation of a modified Hodkin-Huxley model, which is based on the hh_cond_exp_traub model.
Differences to hh_cond_exp_traub:
(1) **Additional background noise:** A background current whose conductances were modeled as an Ornstein-Uhlenbeck process is injected into the neuron.
(2) **Additional non-inactivating K+ current:** A non-inactivating K+ current was included, which is responsible for spike frequency adaptation.
References
++++++++++
.. [1] Traub, R.D. and Miles, R. (1991) Neuronal Networks of the Hippocampus. Cambridge University Press, Cambridge UK.
.. [2] Destexhe, A. and Pare, D. (1999) Impact of Network Activity on the Integrative Properties of Neocortical Pyramidal Neurons In Vivo. Journal of Neurophysiology
.. [3] A. Destexhe, M. Rudolph, J.-M. Fellous and T. J. Sejnowski (2001) Fluctuating synaptic conductances recreate in vivo-like activity in neocortical neurons. Neuroscience
.. [4] Z. Mainen, J. Joerges, J. R. Huguenard and T. J. Sejnowski (1995) A Model of Spike Initiation in Neocortical Pyramidal Neurons. Neuron
Author
++++++
Tobias Schulte to Brinke
See also
++++++++
hh_cond_exp_traub
"""
neuron hh_cond_exp_destexhe:
state:
r integer # counts number of tick during the refractory period
g_noise_ex uS = g_noise_ex0
g_noise_in uS = g_noise_in0
end
initial_values:
V_m mV = E_L # Membrane potential
Act_m real = alpha_m_init / ( alpha_m_init + beta_m_init )
Act_h real = alpha_h_init / ( alpha_h_init + beta_h_init )
Inact_n real = alpha_n_init / ( alpha_n_init + beta_n_init )
Noninact_p real = alpha_p_init / ( alpha_p_init + beta_p_init )
end
equations:
# synapses: exponential conductance
kernel g_in = exp(-1/tau_syn_in*t)
kernel g_ex = exp(-1/tau_syn_ex*t)
# Add aliases to simplify the equation definition of V_m
inline I_Na pA = g_Na * Act_m * Act_m * Act_m * Act_h * ( V_m - E_Na )
inline I_K pA = g_K * Inact_n * Inact_n * Inact_n * Inact_n * ( V_m - E_K )
inline I_L pA = g_L * ( V_m - E_L )
inline I_M pA = g_M * Noninact_p * (V_m - E_K)
inline I_noise pA = (g_noise_ex * (V_m - E_ex) + g_noise_in * (V_m - E_in))
inline I_syn_exc pA = convolve(g_ex, spikeExc) * ( V_m - E_ex )
inline I_syn_inh pA = convolve(g_in, spikeInh) * ( V_m - E_in )
V_m' =( -I_Na - I_K - I_M - I_L - I_syn_exc - I_syn_inh + I_e + I_stim - I_noise) / C_m
# channel dynamics
inline V_rel mV = V_m - V_T
inline alpha_n 1/ms = 0.032/(ms* mV ) * ( 15. mV - V_rel) / ( exp( ( 15. mV - V_rel) / 5. mV ) - 1. )
inline beta_n 1/ms = 0.5 /ms * exp( ( 10. mV - V_rel ) / 40. mV )
inline alpha_m 1/ms = 0.32/(ms* mV ) * ( 13. mV - V_rel) / ( exp( ( 13. mV - V_rel) / 4. mV ) - 1. )
inline beta_m 1/ms = 0.28/(ms* mV ) * ( V_rel - 40. mV ) / ( exp( ( V_rel - 40. mV ) / 5. mV ) - 1. )
inline alpha_h 1/ms = 0.128/ms * exp( ( 17. mV - V_rel) / 18. mV )
inline beta_h 1/ms = ( 4. / ( 1. + exp( ( 40. mV - V_rel ) / 5. mV) ) ) / ms
inline alpha_p 1/ms = 0.0001/(ms * mV) * (V_m + 30. mV) / (1. - exp(-(V_m + 30. mV) / 9. mV ) )
inline beta_p 1/ms = -0.0001/(ms * mV) * (V_m + 30. mV) / (1. - exp( (V_m + 30. mV) / 9. mV ) )
Act_m' = ( alpha_m - ( alpha_m + beta_m ) * Act_m )
Act_h' = ( alpha_h - ( alpha_h + beta_h ) * Act_h )
Inact_n' = ( alpha_n - ( alpha_n + beta_n ) * Inact_n )
Noninact_p' = ( alpha_p - ( alpha_p + beta_p ) * Noninact_p )
end
parameters:
g_Na nS = 17318.0nS # Na Conductance
g_K nS = 3463.6nS # K Conductance
g_L nS = 15.5862nS # Leak Conductance
C_m pF = 346.36pF # Membrane Capacitance
E_Na mV = 60mV # Reversal potentials
E_K mV = -90.mV # Potassium reversal potential
E_L mV = -80.mV # Leak reversal Potential (aka resting potential)
V_T mV = -58.0mV # Voltage offset that controls dynamics. For default
# parameters, V_T = -63mV results in a threshold around -50mV.
tau_syn_ex ms = 2.7ms # Synaptic Time Constant Excitatory Synapse
tau_syn_in ms = 10.5ms # Synaptic Time Constant for Inhibitory Synapse
E_ex mV = 0.0 mV # Excitatory synaptic reversal potential
E_in mV = -75.0mV # Inhibitory synaptic reversal potential
g_M nS = 173.18 nS # Conductance of non-inactivating K+ channel
# Conductance OU noise
g_noise_ex0 uS = 0.012 uS # Mean of the excitatory noise conductance
g_noise_in0 uS = 0.057 uS # Mean of the inhibitory noise conductance
sigma_noise_ex uS = 0.003 uS # Standard deviation of the excitatory noise conductance
sigma_noise_in uS = 0.0066 uS # Standard deviation of the inhibitory noise conductance
alpha_n_init 1/ms = 0.032/(ms* mV ) * ( 15. mV - V_m) / ( exp( ( 15. mV - V_m) / 5. mV ) - 1. )
beta_n_init 1/ms = 0.5 /ms * exp( ( 10. mV - V_m ) / 40. mV )
alpha_m_init 1/ms = 0.32/(ms* mV ) * ( 13. mV - V_m) / ( exp( ( 13. mV - V_m) / 4. mV ) - 1. )
beta_m_init 1/ms = 0.28/(ms* mV ) * ( V_m - 40. mV ) / ( exp( ( V_m - 40. mV ) / 5. mV ) - 1. )
alpha_h_init 1/ms = 0.128/ms * exp( ( 17. mV - V_m) / 18. mV )
beta_h_init 1/ms = ( 4. / ( 1. + exp( ( 40. mV - V_m ) / 5. mV) ) ) / ms
alpha_p_init 1/ms = 0.0001/(ms * mV) * (V_m + 30. mV) / (1. - exp(-(V_m + 30. mV) / 9. mV))
beta_p_init 1/ms = -0.0001/(ms * mV) * (V_m + 30. mV) / (1. - exp( (V_m + 30. mV) / 9. mV ))
# constant external input current
I_e pA = 0 pA
end
internals:
RefractoryCounts integer = 20
D_ex uS**2/ms = 2 * sigma_noise_ex**2 / tau_syn_ex
D_in uS**2/ms = 2 * sigma_noise_in**2 / tau_syn_in
A_ex uS = ((D_ex * tau_syn_ex / 2) * (1 - exp(-2 * resolution() / tau_syn_ex )))**.5
A_in uS = ((D_in * tau_syn_in / 2) * (1 - exp(-2 * resolution() / tau_syn_in )))**.5
end
input:
spikeInh nS <- inhibitory spike
spikeExc nS <- excitatory spike
I_stim pA <- current
end
output: spike
update:
U_old mV = V_m
integrate_odes()
g_noise_ex = g_noise_ex0 + (g_noise_ex - g_noise_ex0) * exp(-resolution() / tau_syn_ex) + A_ex * random_normal(0, 1)
g_noise_in = g_noise_in0 + (g_noise_in - g_noise_in0) * exp(-resolution() / tau_syn_in) + A_in * random_normal(0, 1)
# sending spikes: crossing 0 mV, pseudo-refractoriness and local maximum...
if r > 0:
r -= 1
elif V_m > V_T + 30mV and U_old > V_m:
r = RefractoryCounts
emit_spike()
end
end
end