Skip to content
Permalink
master
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
"""
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 = 0 # counts number of tick during the refractory period
g_noise_ex uS = g_noise_ex0
g_noise_in uS = g_noise_in0
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 <- continuous
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