Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
    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)