Skip to content
Permalink
master
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
"""
wb_cond_multisyn - Wang-Buzsaki model with multiple synapses
############################################################
Description
+++++++++++
wb_cond_multisyn is an implementation of a modified Hodkin-Huxley model.
Spike detection is done by a combined threshold-and-local-maximum search: if
there is a local maximum above a certain threshold of the membrane potential,
it is considered a spike.
AMPA, NMDA, GABA_A, and GABA_B conductance-based synapses with
beta-function (difference of two exponentials) time course.
References
++++++++++
.. [1] Wang, X.J. and Buzsaki, G., (1996) Gamma oscillation by synaptic
inhibition in a hippocampal interneuronal network model. Journal of
Neuroscience, 16(20), pp.6402-6413.
See also
++++++++
wb_cond_multisyn
"""
neuron wb_cond_multisyn:
state:
r integer = 0 # number of steps in the current refractory phase
V_m mV = -65. mV # Membrane potential
Inact_h real = alpha_h_init / ( alpha_h_init + beta_h_init ) # Inactivation variable h for Na
Act_n real = alpha_n_init / (alpha_n_init + beta_n_init) # Activation variable n for K
g_AMPA real = 0
g_NMDA real = 0
g_GABAA real = 0
g_GABAB real = 0
g_AMPA$ real = AMPAInitialValue
g_NMDA$ real = NMDAInitialValue
g_GABAA$ real = GABA_AInitialValue
g_GABAB$ real = GABA_BInitialValue
end
equations:
recordable inline I_syn_ampa pA = -convolve(g_AMPA, AMPA) * ( V_m - AMPA_E_rev )
recordable inline I_syn_nmda pA = -convolve(g_NMDA, NMDA) * ( V_m - NMDA_E_rev ) / ( 1 + exp( ( NMDA_Vact - V_m ) / NMDA_Sact ) )
recordable inline I_syn_gaba_a pA = -convolve(g_GABAA, GABA_A) * ( V_m - GABA_A_E_rev )
recordable inline I_syn_gaba_b pA = -convolve(g_GABAB, GABA_B) * ( V_m - GABA_B_E_rev )
recordable inline I_syn pA = I_syn_ampa + I_syn_nmda + I_syn_gaba_a + I_syn_gaba_b
inline I_Na pA = g_Na * Act_m_inf(V_m)**3 * Inact_h * ( V_m - E_Na )
inline I_K pA = g_K * Act_n**4 * ( V_m - E_K )
inline I_L pA = g_L * ( V_m - E_L )
Inact_h' = ( alpha_h(V_m) * ( 1 - Inact_h ) - beta_h(V_m) * Inact_h ) / ms # h-variable
Act_n' = ( alpha_n(V_m) * ( 1 - Act_n ) - beta_n(V_m) * Act_n ) / ms # n-variable
V_m' = ( -( I_Na + I_K + I_L ) + I_e + I_stim + I_syn ) / C_m
#############
# Synapses
#############
kernel g_AMPA' = g_AMPA$ - g_AMPA / AMPA_Tau_2,
g_AMPA$' = -g_AMPA$ / AMPA_Tau_1
kernel g_NMDA' = g_NMDA$ - g_NMDA / NMDA_Tau_2,
g_NMDA$' = -g_NMDA$ / NMDA_Tau_1
kernel g_GABAA' = g_GABAA$ - g_GABAA / GABA_A_Tau_2,
g_GABAA$' = -g_GABAA$ / GABA_A_Tau_1
kernel g_GABAB' = g_GABAB$ - g_GABAB / GABA_B_Tau_2,
g_GABAB$' = -g_GABAB$ / GABA_B_Tau_1
end
parameters:
t_ref ms = 2.0 ms # Refractory period 2.0
g_Na nS = 3500.0 nS # Sodium peak conductance
g_K nS = 900.0 nS # Potassium peak conductance
g_L nS = 10 nS # Leak conductance
C_m pF = 100.0 pF # Membrane Capacitance
E_Na mV = 55.0 mV # Sodium reversal potential
E_K mV = -90.0 mV # Potassium reversal potentia
E_L mV = -65.0 mV # Leak reversal Potential (aka resting potential)
V_Tr mV = -55.0 mV # Spike Threshold
# Parameters for synapse of type AMPA, GABA_A, GABA_B and NMDA
AMPA_g_peak nS = 0.1 nS # peak conductance
AMPA_E_rev mV = 0.0 mV # reversal potential
AMPA_Tau_1 ms = 0.5 ms # rise time
AMPA_Tau_2 ms = 2.4 ms # decay time, Tau_1 < Tau_2
NMDA_g_peak nS = 0.075 nS # peak conductance
NMDA_Tau_1 ms = 4.0 ms # rise time
NMDA_Tau_2 ms = 40.0 ms # decay time, Tau_1 < Tau_2
NMDA_E_rev mV = 0.0 mV # reversal potential
NMDA_Vact mV = -58.0 mV # inactive for V << Vact, inflection of sigmoid
NMDA_Sact mV = 2.5 mV # scale of inactivation
GABA_A_g_peak nS = 0.33 nS # peak conductance
GABA_A_Tau_1 ms = 1.0 ms # rise time
GABA_A_Tau_2 ms = 7.0 ms # decay time, Tau_1 < Tau_2
GABA_A_E_rev mV = -70.0 mV # reversal potential
GABA_B_g_peak nS = 0.0132 nS # peak conductance
GABA_B_Tau_1 ms = 60.0 ms # rise time
GABA_B_Tau_2 ms = 200.0 ms # decay time, Tau_1 < Tau_2
GABA_B_E_rev mV = -90.0 mV # reversal potential for intrinsic current
# constant external input current
I_e pA = 0 pA
end
internals:
AMPAInitialValue real = compute_synapse_constant( AMPA_Tau_1, AMPA_Tau_2, AMPA_g_peak )
NMDAInitialValue real = compute_synapse_constant( NMDA_Tau_1, NMDA_Tau_2, NMDA_g_peak )
GABA_AInitialValue real = compute_synapse_constant( GABA_A_Tau_1, GABA_A_Tau_2, GABA_A_g_peak )
GABA_BInitialValue real = compute_synapse_constant( GABA_B_Tau_1, GABA_B_Tau_2, GABA_B_g_peak )
RefractoryCounts integer = steps(t_ref) # refractory time in steps
alpha_n_init real = -0.05 * (V_m / mV + 34.0) / (exp(-0.1 * (V_m / mV + 34.0)) - 1.0)
beta_n_init real = 0.625 * exp(-(V_m / mV + 44.0) / 80.0)
alpha_m_init real = 0.1 * (V_m / mV + 35.0) / (1.0 - exp(-0.1 * (V_m / mV + 35.)))
beta_m_init real = 4.0 * exp(-(V_m / mV + 60.0) / 18.0)
alpha_h_init real = 0.35 * exp(-(V_m / mV + 58.0) / 20.0)
beta_h_init real = 5.0 / (exp(-0.1 * (V_m / mV + 28.0)) + 1.0)
end
input:
AMPA nS <- spike
NMDA nS <- spike
GABA_A nS <- spike
GABA_B nS <- spike
I_stim pA <- continuous
end
output: spike
update:
U_old mV = V_m
integrate_odes()
# sending spikes:
if r > 0: # is refractory?
r -= 1
elif V_m > V_Tr and U_old > V_m: # threshold && maximum
r = RefractoryCounts
emit_spike()
end
end
function compute_synapse_constant(Tau_1 ms, Tau_2 ms, g_peak nS) real:
# Factor used to account for the missing 1/((1/Tau_2)-(1/Tau_1)) term
# in the ht_neuron_dynamics integration of the synapse terms.
# See: Exact digital simulation of time-invariant linear systems
# with applications to neuronal modeling, Rotter and Diesmann,
# section 3.1.2.
exact_integration_adjustment real = ( ( 1 / Tau_2 ) - ( 1 / Tau_1 ) ) * ms
t_peak ms = ( Tau_2 * Tau_1 ) * ln( Tau_2 / Tau_1 ) / ( Tau_2 - Tau_1 )
normalisation_factor real = 1 / ( exp( -t_peak / Tau_1 ) - exp( -t_peak / Tau_2 ) )
return (g_peak / nS) * normalisation_factor * exact_integration_adjustment
end
function Act_m_inf(V_m mV) real:
return alpha_m(V_m) / ( alpha_m(V_m) + beta_m(V_m) )
end
function alpha_m(V_m mV) real:
return 0.1 * (V_m / mV + 35.0) / (1.0 - exp(-0.1 * (V_m / mV + 35.)))
end
function beta_m(V_m mV) real:
return 4.0 * exp(-(V_m / mV + 60.0) / 18.0)
end
function alpha_n(V_m mV) real:
return -0.05 * (V_m / mV + 34.0) / (exp(-0.1 * (V_m / mV + 34.0)) - 1.0)
end
function beta_n(V_m mV) real:
return 0.625 * exp(-(V_m / mV + 44.0) / 80.0)
end
function alpha_h(V_m mV) real:
return 0.35 * exp(-(V_m / mV + 58.0) / 20.0)
end
function beta_h(V_m mV) real:
return 5.0 / (exp(-0.1 * (V_m / mV + 28.0)) + 1.0)
end
end