P-unit_model/introduction/LeakyIntegrateFireModel.py
2020-01-27 13:39:05 +01:00

38 lines
1.3 KiB
Python

class LIFModel:
# all times in milliseconds
def __init__(self, mem_res, mem_tau, v_base, v_zero, input_current, threshold, input_offset=0, step_size=0.01):
self.mem_res = mem_res
# self.membrane_capacitance = mem_cap
self.mem_tau = mem_tau # membrane time constant tau = mem_cap*mem_res
self.v_base = v_base
self.v_zero = v_zero
self.threshold = threshold
self.step_size = step_size
self.input_current = input_current
self.input_offset = input_offset
def calculate_response(self):
output_voltage = [self.v_zero]
spikes = []
for idx in range(1, len(self.input_current)):
v_next = self.__calculate_next_step__(output_voltage[idx-1], self.input_current[idx-1])
if v_next > self.threshold:
v_next = self.v_base
spikes.append(True)
else:
spikes.append(False)
output_voltage.append(v_next)
return output_voltage, spikes
def set_input_current(self, input_current, offset=0):
self.input_current = input_current
self.input_offset = offset
def __calculate_next_step__(self, current_v, input_i):
return current_v + (self.step_size * (self.v_base - current_v + self.mem_res * input_i)) / self.mem_tau