From e84ac53657eb85650729765359c9bd01d440ec33 Mon Sep 17 00:00:00 2001 From: "a.ott" Date: Wed, 20 May 2020 15:22:13 +0200 Subject: [PATCH] change a_delta to start_parameter --- Fitter.py | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/Fitter.py b/Fitter.py index 7f5be0a..b6fa262 100644 --- a/Fitter.py +++ b/Fitter.py @@ -24,20 +24,28 @@ def iget_start_parameters(): # expand by tau_a, delta_a ? mem_tau_list = [0.01] - input_scaling_list = [40, 60, 80] + input_scaling_list = [40, 60] noise_strength_list = [0.03] # [0.02, 0.06] dend_tau_list = [0.001, 0.002] + delta_a_list = [0.035, 0.065] for mem_tau in mem_tau_list: for input_scaling in input_scaling_list: for noise_strength in noise_strength_list: for dend_tau in dend_tau_list: - yield {"mem_tau": mem_tau, "input_scaling": input_scaling, - "noise_strength": noise_strength, "dend_tau": dend_tau} + for delta_a in delta_a_list: + yield {"mem_tau": mem_tau, "input_scaling": input_scaling, + "noise_strength": noise_strength, "dend_tau": dend_tau, + "delta_a": delta_a} def run_with_real_data(): + count = 0 for cell_data in icelldata_of_dir("./data/"): + count += 1 + if count < 7: + pass + #continue print("cell:", cell_data.get_data_path()) trace = cell_data.get_base_traces(trace_type=cell_data.V1) @@ -181,7 +189,6 @@ class Fitter: self.f_zero_fit = [] self.tau_a = 0 - self.delta_a = 0 # counts how often the cost_function was called self.counter = 0 @@ -209,14 +216,9 @@ class Fitter: # around 1/3 of the value at straight # self.f_zero_slope = fi_curve.get_fi_curve_slope_at(fi_curve.get_f_zero_and_f_inf_intersection()) - # seems to work if divided by 1000... - self.delta_a = (fi_curve.get_f_zero_fit_slope_at_straight() / self.f_inf_slope) / 1000 - - adaption = Adaption(data, fi_curve) + adaption = Adaption(fi_curve) self.tau_a = adaption.get_tau_real() - # print("delta_a: {:.3f}".format(self.delta_a), "tau_a: {:.3f}".format(self.tau_a)) - return self.fit_routine_5(data, start_parameters) def fit_routine_5(self, cell_data=None, start_parameters=None): @@ -226,7 +228,8 @@ class Fitter: x0 = np.array([0.02, 70, 0.001]) else: x0 = np.array([start_parameters["mem_tau"], start_parameters["noise_strength"], - start_parameters["input_scaling"], self.tau_a, self.delta_a, start_parameters["dend_tau"]]) + start_parameters["input_scaling"], self.tau_a, start_parameters["delta_a"], + start_parameters["dend_tau"]]) initial_simplex = create_init_simples(x0, search_scale=2) # error_list = [error_bf, error_vs, error_sc, error_cv, @@ -234,7 +237,7 @@ class Fitter: error_weights = (0, 1, 1, 1, 1, 1, 1, 1) fmin = minimize(fun=self.cost_function_all, args=(error_weights,), x0=x0, method="Nelder-Mead", - options={"initial_simplex": initial_simplex, "xatol": 0.001, "maxfev": 400, "maxiter": 400}) + options={"initial_simplex": initial_simplex, "xatol": 0.001, "maxfev": 200, "maxiter": 400}) if cell_data is not None: print("##### After step 1: (Everything)") @@ -247,7 +250,7 @@ class Fitter: if fit_adaption: if x0 is None: - x0 = np.array([0.02, 0.03, 70, self.tau_a, self.delta_a]) + x0 = np.array([0.02, 0.03, 70, self.tau_a, 0.05]) if initial_simplex is None: initial_simplex = create_init_simples(x0) @@ -255,11 +258,11 @@ class Fitter: method="Nelder-Mead", options={"initial_simplex": initial_simplex}) else: if x0 is None: - x0 = np.array([0.02, 0.03, 70]) + x0 = np.array([0.02, 0.03, 70, 0.05]) if initial_simplex is None: initial_simplex = create_init_simples(x0) - fmin = minimize(fun=self.cost_function_with_fixed_adaption, x0=x0, args=(self.tau_a, self.delta_a), + fmin = minimize(fun=self.cost_function_with_fixed_adaption_tau, x0=x0, args=(self.tau_a,), method="Nelder-Mead", options={"initial_simplex": initial_simplex}) return fmin, self.base_model.get_parameters() @@ -320,14 +323,15 @@ class Fitter: return sum(error_list) - def cost_function_with_fixed_adaption(self, X, tau_a, delta_a, error_weights=None): + def cost_function_with_fixed_adaption_tau(self, X, tau_a, error_weights=None): # set model parameters: model = self.base_model model.set_variable("mem_tau", X[0]) model.set_variable("noise_strength", X[1]) model.set_variable("input_scaling", X[2]) + model.set_variable("delta_a", X[3]) model.set_variable("tau_a", tau_a) - model.set_variable("delta_a", delta_a) + base_stimulus = SinusoidalStepStimulus(self.eod_freq, 0) # find right v-offset @@ -398,12 +402,12 @@ class Fitter: # calculate errors with reference values error_bf = abs((baseline_freq - self.baseline_freq) / self.baseline_freq) - error_vs = abs((vector_strength - self.vector_strength) / self.vector_strength) - error_cv = abs((coefficient_of_variation - self.coefficient_of_variation) / self.coefficient_of_variation) + error_vs = abs((vector_strength - self.vector_strength) / 0.1) + error_cv = abs((coefficient_of_variation - self.coefficient_of_variation) / 0.1) error_sc = 0 for i in range(self.sc_max_lag): - error_sc = abs((serial_correlation[i] - self.serial_correlation[i]) / (self.serial_correlation[i]/10)) + error_sc = abs((serial_correlation[i] - self.serial_correlation[i]) / 0.1) error_sc = error_sc / self.sc_max_lag error_f_inf_slope = abs((f_infinities_slope - self.f_inf_slope) / (self.f_inf_slope/20)) @@ -411,7 +415,7 @@ class Fitter: # error_f_zero_slopes = calculate_list_error(f_zero_slopes, self.f_zero_slopes) error_f_zero_slope_at_straight = abs(self.f_zero_slope_at_straight - f_zero_slope_at_straight) \ - / (self.f_zero_slope_at_straight / 20) + / (self.f_zero_slope_at_straight / 10) error_f_zero = calculate_list_error(f_zeros, self.f_zero_values) error_list = [error_bf, error_vs, error_sc, error_cv,