def __init__(self, domain, index, type, value, decay_time = 0.0):
     Neuron.__init__(self, domain, index)
     self.type = type
     self.decay_time = decay_time
     if self.type == 'current':
         self.value = value
     elif self.type == 'voltage':
         self.V_membrane = value
 def __init__(self, domain, index, freq, scale, decay):
     Neuron.__init__(self, domain, index)
     self.type = 'current'
     self.freq = freq/1000.0  #Probability of occring in 1ms
     self.scale = scale
     self.decay = 1.0-1.0/decay
     self.value = 0.0
     self.spikes_record = []
    def __init__(self, domain, index, settings, STDP='on', initial_membrane_potential=0.0):
        #settings['reset_potential'] = -70
        #settings['spike_potential'] = 0
        #settings['threshold'] = -54
        #settings['refactory_period'] = 5.0 ms
        #settings['left_window_constant'] = (t+)
        #settings['right_window_constant'] = (t-)
        #settings['learning_rate'] = learning_rate (A+)
        #settings['stability'] = stability (B)
        #settings['weight_ceiling'] = weight_ceiling
        #settings['type'] = 'current' or 'voltage'
        #settings['output_current_decay'] = 3.0 (only need if type is current)
        #settings['output_current_peak'] = 2.2 (only need if type is current)

        Neuron.__init__(self, domain, index)
        self.STDP = STDP
        self.reset_potential = settings['reset_potential'] 
        self.spike_potential = settings['spike_potential']
        self.threshold = settings['threshold']
        self.weight_ceiling = settings['weight_ceiling']

        self.type = settings['type']
        if self.type == 'current':
            self.output_current_peak = settings['output_current_peak']
            self.output_current_decay = 1.0-1.0/settings['output_current_decay']
            self.value = 0.0

        self.stability = settings["stability"]
        self.left_window_constant = settings["left_window_constant"]
        self.left_learning_rate = settings['learning_rate']
        self.left_window_width = abs(math.log(0.01) * self.left_window_constant)
        self.right_window_constant = settings["right_window_constant"]
        self.right_window_width = abs(math.log(0.01) * self.right_window_constant)
        self.right_learning_rate = self.left_learning_rate * self.left_window_width * self.stability / self.right_window_width

        if initial_membrane_potential == 0.0:
            self.membrane_potential = self.reset_potential
        else:
            self.membrane_potential = initial_membrane_potential
        self.left_window = []
        self.right_window = []
        self.refactory_period = settings['refactory_period']
        self.refact = 'no'


        self.last_firing_time = -1
        self.spikes_number = 0
        self.spikes_record = []
        self.value_record = []
        self.weights_record = []
    def __init__(self, domain, index, scale, decay, pool_settings):
        Neuron.__init__(self, domain, index)
        self.type = 'current'
        self.freq = 0.0
        self.scale = scale
        self.decay = 1.0-1.0/decay
        self.alpha = pool_settings['alpha']
        self.k = pool_settings['k']
        self.a = pool_settings['a']
        self.b = pool_settings['b']
        self.c = pool_settings['c']
        self.d = pool_settings['d']
        
        self.pre_spike_time = []
        self.value = 0.0

        self.spikes_record = []
        self.freq_record = []