forked from nest/nestml
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhh_cond_exp_traub.nestml
152 lines (118 loc) · 5.57 KB
/
hh_cond_exp_traub.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
"""
hh_cond_exp_traub - Hodgkin-Huxley model for Brette et al (2007) review
#######################################################################
Description
+++++++++++
hh_cond_exp_traub is an implementation of a modified Hodgkin-Huxley model.
This model was specifically developed for a major review of simulators [1]_,
based on a model of hippocampal pyramidal cells by Traub and Miles [2]_.
The key differences between the current model and the model in [2]_ are:
- This model is a point neuron, not a compartmental model.
- This model includes only I_Na and I_K, with simpler I_K dynamics than
in [2]_, so it has only three instead of eight gating variables;
in particular, all Ca dynamics have been removed.
- Incoming spikes induce an instantaneous conductance change followed by
exponential decay instead of activation over time.
This model is primarily provided as reference implementation for hh_coba
example of the Brette et al (2007) review. Default parameter values are chosen
to match those used with NEST 1.9.10 when preparing data for [1]_. Code for all
simulators covered is available from ModelDB [3]_.
Note: In this model, a spike is emitted if :math:`V_m >= V_T + 30` mV and
:math:`V_m` has fallen during the current time step.
To avoid that this leads to multiple spikes during the falling flank of a
spike, it is essential to choose a sufficiently long refractory period.
Traub and Miles used :math:`t_{ref} = 3` ms [2, p 118], while we used
:math:`t_{ref} = 2` ms in [2]_.
References
++++++++++
.. [1] Brette R et al. (2007). Simulation of networks of spiking neurons: A
review of tools and strategies. Journal of Computational Neuroscience
23:349-98. DOI: https://doi.org/10.1007/s10827-007-0038-6
.. [2] Traub RD and Miles R (1991). Neuronal networks of the hippocampus.
Cambridge University Press, Cambridge UK.
.. [3] http://modeldb.yale.edu/83319
See also
++++++++
hh_psc_alpha
Author
++++++
Schrader
"""
neuron hh_cond_exp_traub:
state:
r integer # counts number of tick during the refractory period
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 )
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_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_L - I_syn_exc - I_syn_inh + I_e + I_stim ) / 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
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 )
end
parameters:
g_Na nS = 20000.0 nS # Na Conductance
g_K nS = 6000.0 nS # K Conductance
g_L nS = 10 nS # Leak Conductance
C_m pF = 200.0 pF # Membrane Capacitance
E_Na mV = 50 mV # Reversal potentials
E_K mV = -90. mV # Potassium reversal potential
E_L mV = -60. mV # Leak reversal Potential (aka resting potential)
V_T mV = -63.0 mV # Voltage offset that controls dynamics. For default
# parameters, V_T = -63 mV results in a threshold around -50 mV.
tau_syn_ex ms = 5.0 ms # Synaptic Time Constant Excitatory Synapse
tau_syn_in ms = 10.0 ms # Synaptic Time Constant for Inhibitory Synapse
t_ref ms = 2.0 ms # Refractory period
E_ex mV = 0.0 mV # Excitatory synaptic reversal potential
E_in mV = -80.0 mV # Inhibitory synaptic reversal potential
alpha_n_init 1/ms = 0.032/(ms* mV ) * ( 15. mV - E_L) / ( exp( ( 15. mV - E_L) / 5. mV ) - 1. )
beta_n_init 1/ms = 0.5 /ms * exp( ( 10. mV - E_L ) / 40. mV )
alpha_m_init 1/ms = 0.32/(ms* mV ) * ( 13. mV - E_L) / ( exp( ( 13. mV - E_L) / 4. mV ) - 1. )
beta_m_init 1/ms = 0.28/(ms* mV ) * ( E_L - 40. mV ) / ( exp( ( E_L - 40. mV ) / 5. mV ) - 1. )
alpha_h_init 1/ms = 0.128/ms * exp( ( 17. mV - E_L) / 18. mV )
beta_h_init 1/ms = ( 4. / ( 1. + exp( ( 40. mV - E_L ) / 5. mV) ) ) / ms
# constant external input current
I_e pA = 0 pA
end
internals:
RefractoryCounts integer = steps(t_ref)
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()
# sending spikes: crossing 0 mV, pseudo-refractoriness and local maximum...
if r > 0:
r -= 1
elif V_m > V_T + 30 mV and U_old > V_m:
r = RefractoryCounts
emit_spike()
end
end
end