/
hh_cond_exp_destexhe_neuron.nestml
158 lines (117 loc) · 7.33 KB
/
hh_cond_exp_destexhe_neuron.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
"""
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
See also
++++++++
hh_cond_exp_traub
"""
model hh_cond_exp_destexhe_neuron:
state:
g_noise_exc uS = g_noise_exc0
g_noise_inh uS = g_noise_inh0
V_m mV = E_L # Membrane potential
V_m_old mV = E_L # Membrane potential at the previous timestep
refr_t ms = 0 ms # Refractory period timer
is_refractory boolean = false
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 )
equations:
# synapses: exponential conductance
kernel g_inh = exp(-t/tau_syn_inh)
kernel g_exc = exp(-t/tau_syn_exc)
# 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_exc * (V_m - E_exc) + g_noise_inh * (V_m - E_inh))
inline I_syn_exc pA = convolve(g_exc, exc_spikes) * nS * ( V_m - E_exc )
inline I_syn_inh pA = convolve(g_inh, inh_spikes) * nS * ( V_m - E_inh )
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 )
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_exc ms = 2.7ms # Synaptic Time Constant Excitatory Synapse
tau_syn_inh ms = 10.5ms # Synaptic Time Constant for Inhibitory Synapse
E_exc mV = 0.0 mV # Excitatory synaptic reversal potential
E_inh mV = -75.0mV # Inhibitory synaptic reversal potential
g_M nS = 173.18 nS # Conductance of non-inactivating K+ channel
# Conductance OU noise
g_noise_exc0 uS = 0.012 uS # Mean of the excitatory noise conductance
g_noise_inh0 uS = 0.057 uS # Mean of the inhibitory noise conductance
sigma_noise_exc uS = 0.003 uS # Standard deviation of the excitatory noise conductance
sigma_noise_inh 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 ))
refr_T ms = 2 ms # Duration of refractory period
# constant external input current
I_e pA = 0 pA
internals:
D_exc uS**2/ms = 2 * sigma_noise_exc**2 / tau_syn_exc
D_inh uS**2/ms = 2 * sigma_noise_inh**2 / tau_syn_inh
A_exc uS = ((D_exc * tau_syn_exc / 2) * (1 - exp(-2 * resolution() / tau_syn_exc )))**.5
A_inh uS = ((D_inh * tau_syn_inh / 2) * (1 - exp(-2 * resolution() / tau_syn_inh )))**.5
input:
inh_spikes <- inhibitory spike
exc_spikes <- excitatory spike
I_stim pA <- continuous
output:
spike
update:
# Hodgkin-Huxley type model: ODEs are always integrated, regardless of refractory state
g_noise_exc = g_noise_exc0 + (g_noise_exc - g_noise_exc0) * exp(-resolution() / tau_syn_exc) + A_exc * random_normal(0, 1)
g_noise_inh = g_noise_inh0 + (g_noise_inh - g_noise_inh0) * exp(-resolution() / tau_syn_inh) + A_inh * random_normal(0, 1)
V_m_old mV = V_m
integrate_odes()
if is_refractory:
# neuron is absolute refractory, decrease refractoriness timer
refr_t -= resolution()
onCondition(not is_refractory and V_m > V_T + 30mV and V_m_old > V_m):
refr_t = refr_T # start of the refractory period
is_refractory = true
emit_spike()
onCondition(is_refractory and refr_t <= resolution() / 2):
# end of refractory period
refr_t = 0 ms
is_refractory = false