From 04815de85c7b7ad087c90a6a6ee05a100e93f580 Mon Sep 17 00:00:00 2001 From: "a.ott" Date: Tue, 3 Mar 2020 09:24:10 +0100 Subject: [PATCH] add actual input scaling --- models/LIFACnoise.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/models/LIFACnoise.py b/models/LIFACnoise.py index 8ba3618..63e1db3 100644 --- a/models/LIFACnoise.py +++ b/models/LIFACnoise.py @@ -7,6 +7,7 @@ from numba import jit import helperFunctions as hF from stimuli.SinusAmplitudeModulation import SinusAmplitudeModulationStimulus from scipy.optimize import curve_fit +from warnings import warn class LifacNoiseModel(AbstractModel): @@ -27,6 +28,8 @@ class LifacNoiseModel(AbstractModel): def __init__(self, params: dict = None): super().__init__(params) + if self.parameters["step_size"] >= 0.0001: + warn("LifacNoiseModel: The step size is quite big simulation could fail.") self.voltage_trace = [] self.adaption_trace = [] self.spiketimes = [] @@ -49,7 +52,7 @@ class LifacNoiseModel(AbstractModel): for i in range(1, len(time), 1): time_point = time[i] # rectified input: - stimulus_strength = fu.rectify(stimulus.value_at_time_in_s(time_point)) + stimulus_strength = fu.rectify(stimulus.value_at_time_in_s(time_point)) * self.parameters["input_scaling"] v_next = self._calculate_voltage_step(current_v, stimulus_strength - current_a) a_next = self._calculate_adaption_step(current_a) @@ -99,9 +102,10 @@ class LifacNoiseModel(AbstractModel): v_offset = self.parameters["v_offset"] mem_tau = self.parameters["mem_tau"] noise_strength = self.parameters["noise_strength"] + input_scaling = self.parameters["input_scaling"] rectified_stimulus = rectify_stimulus_array(stimulus.as_array(time_start, total_time_s, step_size)) - parameters = np.array([v_zero, a_zero, step_size, threshold, v_base, delta_a, tau_a, v_offset, mem_tau, noise_strength, time_start]) + parameters = np.array([v_zero, a_zero, step_size, threshold, v_base, delta_a, tau_a, v_offset, mem_tau, noise_strength, time_start, input_scaling]) voltage_trace, adaption, spiketimes = simulate_fast(rectified_stimulus, total_time_s, parameters) @@ -161,6 +165,9 @@ class LifacNoiseModel(AbstractModel): :return: baseline_freq, vs, sc """ base_stimulus = SinusAmplitudeModulationStimulus(base_stimulus_freq, 0, 0) + import matplotlib.pyplot as plt + plt.plot(base_stimulus.as_array(0,30,0.00005)) + plt.show() _, spiketimes = self.simulate_fast(base_stimulus, 30) time_x = 5 baseline_freq = hF.mean_freq_of_spiketimes_after_time_x(spiketimes, time_x) @@ -263,6 +270,7 @@ def simulate_fast(rectified_stimulus_array, total_time_s, parameters: np.ndarray mem_tau = parameters[8] noise_strength = parameters[9] time_start = parameters[10] + input_scaling = parameters[11] time = np.arange(time_start, total_time_s, step_size) length = len(time) @@ -279,7 +287,7 @@ def simulate_fast(rectified_stimulus_array, total_time_s, parameters: np.ndarray noise_value = np.random.normal() noise = noise_strength * noise_value / np.sqrt(step_size) - output_voltage[i] = output_voltage[i-1] + ((v_base - output_voltage[i-1] + v_offset + stimulus_values[i] - adaption[i-1] + noise) / mem_tau) * step_size + output_voltage[i] = output_voltage[i-1] + ((v_base - output_voltage[i-1] + v_offset + (stimulus_values[i]*input_scaling) - adaption[i-1] + noise) / mem_tau) * step_size adaption[i] = adaption[i-1] + ((-adaption[i-1]) / tau_a) * step_size if output_voltage[i] > threshold: