This commit is contained in:
alexanderott
2021-06-07 09:26:21 +02:00
parent ccca6e030b
commit 9d68799c63
4 changed files with 161 additions and 29 deletions

View File

@@ -46,8 +46,8 @@ class FICurve:
self.f_inf_fit = hF.fit_clipped_line(self.stimulus_values, self.f_inf_frequencies)
self.f_zero_fit = hF.fit_boltzmann(self.stimulus_values, self.f_zero_frequencies)
def __calculate_time_constant_internal__(self, contrast, mean_frequency, baseline_freq, sampling_interval, pre_duration, plot=False):
time_constant_fit_length = 0.05
def __calculate_time_constant_internal__(self, contrast, mean_frequency, baseline_freq, sampling_interval, pre_duration, plot=False, plot_data=False):
time_constant_fit_length = 0.05 # change to 25 - 30 ms
if contrast > 0:
maximum_idx = np.argmax(mean_frequency)
@@ -88,6 +88,9 @@ class FICurve:
fu.exponential_function(x_values, popt[0], popt[1], popt[2]), color="orange")
plt.show()
plt.close()
if plot_data:
return popt, np.arange(start_fit_idx, end_fit_idx, 1) * sampling_interval - pre_duration
return popt, pcov
except RuntimeError:
print("RuntimeError happened in fit_exponential.")
@@ -375,7 +378,7 @@ class FICurveCellData(FICurve):
popt, pcov = super().__calculate_time_constant_internal__(self.stimulus_values[contrast_idx], mean_frequency,
baseline_freq, sampling_interval, pre_duration, plot=plot)
return popt[1]
return popt
def calculate_all_frequency_points(self):
mean_frequencies = self.cell_data.get_mean_fi_curve_isi_frequencies()
@@ -498,7 +501,7 @@ class FICurveModel(FICurve):
stim_start = 0.5
total_simulation_time = stim_duration + 2 * stim_start
def __init__(self, model, stimulus_values, eod_frequency, trials=5):
def __init__(self, model, stimulus_values, eod_frequency, trials=5, save_dir=None, recalculate=False):
self.eod_frequency = eod_frequency
self.model = model
self.trials = trials
@@ -506,7 +509,7 @@ class FICurveModel(FICurve):
self.mean_frequency_traces = []
self.mean_time_traces = []
self.set_model_adaption_to_baseline()
super().__init__(stimulus_values)
super().__init__(stimulus_values, save_dir=None, recalculate=False)
def set_model_adaption_to_baseline(self):
stimulus = SinusoidalStepStimulus(self.eod_frequency, 0, 0, 0)
@@ -540,7 +543,7 @@ class FICurveModel(FICurve):
if len(time) == 0 or min(time) > self.stim_start \
or max(time) < self.stim_start + self.stim_duration:
# print("Too few spikes to calculate f_inf, f_0 and f_base")
self.f_inf_frequencies.append(0)
self.f_zero_frequencies.append(0)
self.f_baseline_frequencies.append(0)
@@ -569,10 +572,7 @@ class FICurveModel(FICurve):
popt, pcov = super().__calculate_time_constant_internal__(self.stimulus_values[contrast_idx], mean_frequency,
baseline_freq, sampling_interval, pre_duration, plot=plot)
if len(popt) > 0:
return popt[1]
else:
return -1
return popt
def get_mean_time_and_freq_traces(self):
return self.mean_time_traces, self.mean_frequency_traces
@@ -644,6 +644,6 @@ def get_fi_curve_class(data, stimulus_values, eod_freq=None, trials=5, save_dir=
if isinstance(data, LifacNoiseModel):
if eod_freq is None:
raise ValueError("The FiCurveModel needs the eod variable to work")
return FICurveModel(data, stimulus_values, eod_freq, trials=trials)
return FICurveModel(data, stimulus_values, eod_freq, trials=trials, save_dir=None, recalculate=False)
raise ValueError("Unknown type: Cannot find corresponding Baseline class. Data was type:" + str(type(data)))