def __init__(self, tau=10.0, B=0.0, T=0.0, sum='sum(exc) - sum(inh)', noise=None): # Create the arguments parameters = """ tau = %(tau)s : population B = %(B)s T = %(T)s : population """ % {'tau': tau, 'B': B, 'T': T} # Equations for the variables if not noise: noise_def = '' else: noise_def = '+ ' + noise equations=""" tau * dv/dt + v = %(sum)s + B %(noise)s : exponential r = pos(v - T) """ % { 'sum' : sum, 'noise': noise_def} Neuron.__init__(self, parameters=parameters, equations=equations, name="Leaky-Integrator", description="Leaky-Integrator with positive transfer function and additive noise.") # For reporting self._instantiated.append(True)
def __init__(self, v_rest=-65.0, cm=1.0, tau_m=20.0, tau_refrac=0.0, tau_syn_E=5.0, tau_syn_I=5.0, v_thresh=-50.0, v_reset=-65.0, i_offset=0.0): # Create the arguments parameters = """ v_rest = %(v_rest)s cm = %(cm)s tau_m = %(tau_m)s tau_refrac = %(tau_refrac)s tau_syn_E = %(tau_syn_E)s tau_syn_I = %(tau_syn_I)s v_thresh = %(v_thresh)s v_reset = %(v_reset)s i_offset = %(i_offset)s """ % {'v_rest':v_rest, 'cm':cm, 'tau_m':tau_m, 'tau_refrac':tau_refrac, 'tau_syn_E':tau_syn_E, 'tau_syn_I':tau_syn_I, 'v_thresh':v_thresh, 'v_reset':v_reset, 'i_offset':i_offset} # Equations for the variables equations=""" gmax_exc = exp((tau_syn_E - dt/2.0)/tau_syn_E) gmax_inh = exp((tau_syn_I - dt/2.0)/tau_syn_I) cm * dv/dt = cm/tau_m*(v_rest -v) + alpha_exc - alpha_inh + i_offset : exponential, init=%(v_reset)s tau_syn_E * dg_exc/dt = - g_exc : exponential tau_syn_I * dg_inh/dt = - g_inh : exponential tau_syn_E * dalpha_exc/dt = gmax_exc * g_exc - alpha_exc : exponential tau_syn_I * dalpha_inh/dt = gmax_inh * g_inh - alpha_inh : exponential """ % {'v_reset':v_reset} spike = """ v > v_thresh """ reset = """ v = v_reset """ Neuron.__init__(self, parameters=parameters, equations=equations, spike=spike, reset=reset, refractory='tau_refrac', name="Integrate-and-Fire", description="Leaky integrate-and-fire model with fixed threshold and alpha post-synaptic currents.") # For reporting self._instantiated.append(True)
def __init__(self, parameters, equations, inputs, output=["BOLD"], name="Custom BOLD model", description=""): """ See ANNarchy.extensions.bold.PredefinedModels.py for some example models. :param parameters: parameters of the model and their initial value. :param equations: equations defining the temporal evolution of variables. :param inputs: single variable or list of input signals (e.g. 'I_CBF' or ['I_CBF', 'I_CMRO2']). :param output: output variable of the model (default is 'BOLD'). :param name: optional model name. :param description: optional model description. """ # The processing in BoldMonitor expects lists, but the interface # should allow also single strings (if only one variable is considered) self._inputs = [inputs] if isinstance(inputs, str) else inputs self._output = [output] if isinstance(output, str) else output Neuron.__init__(self, parameters=parameters, equations=equations, name=name, description=description) self._model_instantiated = False # activated by BoldMonitor
def __init__(self, a=0.2, b=0.2, c=-65.0, d=2.0, v_thresh=30.0, i_offset=0.0, noise=0.0, tau_refrac=0.0, conductance="g_exc - g_inh"): # Extract which targets are defined in the conductance import re targets = re.findall(r'g_([\w]+)', conductance) # Create the arguments parameters = """ noise = %(noise)s a = %(a)s b = %(b)s c = %(c)s d = %(d)s v_thresh = %(v_thresh)s i_offset = %(i_offset)s tau_refrac = %(tau_refrac)s """ % {'a': a, 'b':b, 'c':c, 'd':d, 'v_thresh':v_thresh, 'i_offset':i_offset, 'noise':noise, 'tau_refrac':tau_refrac} # Equations for the variables equations=""" I = %(conductance)s + noise * Normal(0.0, 1.0) + i_offset dv/dt = 0.04 * v^2 + 5.0 * v + 140.0 - u + I : init = %(c)s du/dt = a * (b*v - u) : init= %(u)s """ % { 'conductance' : conductance, 'c':c , 'u': b*c} # # Default behavior for the conductances (avoid warning) # for target in targets: # equations += """ # g_%(target)s = 0.0""" % {'target' : target} spike = """ v > v_thresh """ reset = """ v = c u += d """ Neuron.__init__(self, parameters=parameters, equations=equations, spike=spike, reset=reset, refractory='tau_refrac', name="Izhikevich", description="Quadratic integrate-and-fire spiking neuron with adaptation.") # For reporting self._instantiated.append(True)
def __init__(self, v_rest=-70.6, cm=0.281, tau_m=9.3667, tau_refrac=0.1, tau_syn_E=5.0, tau_syn_I=5.0, e_rev_E=0.0, e_rev_I=-80.0, tau_w=144.0, a=4.0, b=0.0805, i_offset=0.0, delta_T=2.0, v_thresh=-50.4, v_reset=-70.6, v_spike=-40.0): # Create the arguments parameters = """ v_rest = %(v_rest)s cm = %(cm)s tau_m = %(tau_m)s tau_refrac = %(tau_refrac)s tau_syn_E = %(tau_syn_E)s tau_syn_I = %(tau_syn_I)s e_rev_E = %(e_rev_E)s e_rev_I = %(e_rev_I)s tau_w = %(tau_w)s a = %(a)s b = %(b)s i_offset = %(i_offset)s delta_T = %(delta_T)s v_thresh = %(v_thresh)s v_reset = %(v_reset)s v_spike = %(v_spike)s """ % { 'v_rest': v_rest, 'cm': cm, 'tau_m': tau_m, 'tau_refrac': tau_refrac, 'tau_syn_E': tau_syn_E, 'tau_syn_I': tau_syn_I, 'e_rev_E': e_rev_E, 'e_rev_I': e_rev_I, 'tau_w': tau_w, 'a': a, 'b': b, 'i_offset': i_offset, 'delta_T': delta_T, 'v_thresh': v_thresh, 'v_reset': v_reset, 'v_spike': v_spike, } # Equations for the variables equations = """ gmax_exc = exp((tau_syn_E - dt/2.0)/tau_syn_E) gmax_inh = exp((tau_syn_I - dt/2.0)/tau_syn_I) I = alpha_exc * (e_rev_E - v) + alpha_inh * (e_rev_I - v) + i_offset tau_m * dv/dt = (v_rest - v + delta_T * exp((v-v_thresh)/delta_T)) + tau_m/cm*(I - w) : init=%(v_reset)s tau_w * dw/dt = a * (v - v_rest) / 1000.0 - w tau_syn_E * dg_exc/dt = - g_exc : exponential tau_syn_I * dg_inh/dt = - g_inh : exponential tau_syn_E * dalpha_exc/dt = gmax_exc * g_exc - alpha_exc : exponential tau_syn_I * dalpha_inh/dt = gmax_inh * g_inh - alpha_inh : exponential """ % { 'v_reset': v_reset } spike = """ v > v_spike """ reset = """ v = v_reset w += b """ Neuron.__init__( self, parameters=parameters, equations=equations, spike=spike, reset=reset, refractory='tau_refrac', name="Adaptive exponential Integrate-and-Fire", description= "Exponential integrate-and-fire neuron with spike triggered and sub-threshold adaptation conductances (isfa, ista reps.)." ) # For reporting self._instantiated.append(True)
def __init__(self, gbar_Na=20.0, gbar_K=6.0, gleak=0.01, cm=0.2, v_offset=-63.0, e_rev_Na=50.0, e_rev_K=-90.0, e_rev_leak=-65.0, e_rev_E=0.0, e_rev_I=-80.0, tau_syn_E=0.2, tau_syn_I=2.0, i_offset=0.0, v_thresh=0.0): parameters = """ gbar_Na = %(gbar_Na)s gbar_K = %(gbar_K)s gleak = %(gleak)s cm = %(cm)s v_offset = %(v_offset)s e_rev_Na = %(e_rev_Na )s e_rev_K = %(e_rev_K)s e_rev_leak = %(e_rev_leak)s e_rev_E = %(e_rev_E)s e_rev_I = %(e_rev_I)s tau_syn_E = %(tau_syn_E)s tau_syn_I = %(tau_syn_I)s i_offset = %(i_offset)s v_thresh = %(v_thresh)s """ % { 'gbar_Na': gbar_Na, 'gbar_K': gbar_K, 'gleak': gleak, 'cm': cm, 'v_offset': v_offset, 'e_rev_Na': e_rev_Na, 'e_rev_K': e_rev_K, 'e_rev_leak': e_rev_leak, 'e_rev_E': e_rev_E, 'e_rev_I': e_rev_I, 'tau_syn_E': tau_syn_E, 'tau_syn_I': tau_syn_I, 'i_offset': i_offset, 'v_thresh': v_thresh } equations = """ # Previous membrane potential prev_v = v # Voltage-dependent rate constants an = 0.032 * (15.0 - v + v_offset) / (exp((15.0 - v + v_offset)/5.0) - 1.0) am = 0.32 * (13.0 - v + v_offset) / (exp((13.0 - v + v_offset)/4.0) - 1.0) ah = 0.128 * exp((17.0 - v + v_offset)/18.0) bn = 0.5 * exp ((10.0 - v + v_offset)/40.0) bm = 0.28 * (v - v_offset - 40.0) / (exp((v - v_offset - 40.0)/5.0) - 1.0) bh = 4.0/(1.0 + exp (( 10.0 - v + v_offset )) ) # Activation variables dn/dt = an * (1.0 - n) - bn * n : init = 0.0, exponential dm/dt = am * (1.0 - m) - bm * m : init = 0.0, exponential dh/dt = ah * (1.0 - h) - bh * h : init = 1.0, exponential # Membrane equation cm * dv/dt = gleak*(e_rev_leak -v) + gbar_K * n**4 * (e_rev_K - v) + gbar_Na * m**3 * h * (e_rev_Na - v) + g_exc * (e_rev_E - v) + g_inh * (e_rev_I - v) + i_offset: exponential, init=%(e_rev_leak)s # Exponentially-decaying conductances tau_syn_E * dg_exc/dt = - g_exc : exponential tau_syn_I * dg_inh/dt = - g_inh : exponential """ % { 'e_rev_leak': e_rev_leak } spike = "(v > v_thresh) and (prev_v <= v_thresh)" reset = "" Neuron.__init__( self, parameters=parameters, equations=equations, spike=spike, reset=reset, name="Hodgkin-Huxley", description= "Single-compartment Hodgkin-Huxley-type neuron with transient sodium and delayed-rectifier potassium currents." ) # For reporting self._instantiated.append(True)