use same type of calculations for characteristics as in the data
This commit is contained in:
parent
b4d5cc2714
commit
af40a60189
@ -8,7 +8,7 @@ import helperFunctions as hF
|
||||
from stimuli.SinusoidalStepStimulus import SinusoidalStepStimulus
|
||||
from scipy.optimize import curve_fit
|
||||
from warnings import warn
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
class LifacNoiseModel(AbstractModel):
|
||||
# all times in milliseconds
|
||||
@ -157,7 +157,7 @@ class LifacNoiseModel(AbstractModel):
|
||||
def get_model_copy(self):
|
||||
return LifacNoiseModel(self.parameters)
|
||||
|
||||
def calculate_baseline_markers(self, stimulus_freq, max_lag=1):
|
||||
def calculate_baseline_markers(self, stimulus_freq, max_lag=1, simulation_time=30):
|
||||
"""
|
||||
calculates the baseline markers baseline frequency, vector strength and serial correlation
|
||||
based on simulated 30 seconds with a standard Sinusoidal stimulus with the given frequency
|
||||
@ -165,7 +165,7 @@ class LifacNoiseModel(AbstractModel):
|
||||
:return: baseline_freq, vs, sc
|
||||
"""
|
||||
base_stimulus = SinusoidalStepStimulus(stimulus_freq, 0)
|
||||
_, spiketimes = self.simulate_fast(base_stimulus, 30)
|
||||
_, spiketimes = self.simulate_fast(base_stimulus, simulation_time)
|
||||
time_x = 5
|
||||
baseline_freq = hF.mean_freq_of_spiketimes_after_time_x(spiketimes, time_x)
|
||||
|
||||
@ -187,24 +187,31 @@ class LifacNoiseModel(AbstractModel):
|
||||
based on simulated 2 seconds for each contrast
|
||||
:return: f_inf_values_list, f_inf_slope
|
||||
"""
|
||||
|
||||
stimulus_start = 0.3
|
||||
stimulus_duration = 1
|
||||
f_infinities = []
|
||||
for contrast in contrasts:
|
||||
stimulus = SinusoidalStepStimulus(stimulus_freq, contrast)
|
||||
_, spiketimes = self.simulate_fast(stimulus, 1)
|
||||
|
||||
f_infinity = hF.mean_freq_of_spiketimes_after_time_x(spiketimes, 0.3)
|
||||
f_infinities.append(f_infinity)
|
||||
stimulus = SinusoidalStepStimulus(stimulus_freq, contrast, stimulus_start, stimulus_duration)
|
||||
_, spiketimes = self.simulate_fast(stimulus, stimulus_start*2+stimulus_duration)
|
||||
time, freq = hF.calculate_time_and_frequency_trace(spiketimes, self.get_sampling_interval())
|
||||
f_inf = hF.detect_f_infinity_in_freq_trace(time, freq, stimulus_start, stimulus_duration, self.get_sampling_interval())
|
||||
f_infinities.append(f_inf)
|
||||
|
||||
popt, pcov = curve_fit(fu.line, contrasts, f_infinities, maxfev=10000)
|
||||
popt = hF.fit_clipped_line(contrasts, f_infinities)
|
||||
|
||||
f_infinities_slope = popt[0]
|
||||
|
||||
return f_infinities, f_infinities_slope
|
||||
|
||||
def calculate_fi_curve(self, contrasts, stimulus_freq):
|
||||
stim_duration = 1
|
||||
stim_start = 1
|
||||
|
||||
max_time_constant = max([self.parameters["tau_a"], self.parameters["mem_tau"]])
|
||||
factor_to_equilibrium = 5
|
||||
stim_duration = max_time_constant * factor_to_equilibrium
|
||||
stim_start = max_time_constant * factor_to_equilibrium
|
||||
total_simulation_time = max_time_constant * factor_to_equilibrium * 3
|
||||
# print("Total simulation time (vs 2.5) {:.2f}".format(total_simulation_time))
|
||||
|
||||
sampling_interval = self.get_sampling_interval()
|
||||
f_infinities = []
|
||||
f_zeros = []
|
||||
@ -212,10 +219,12 @@ class LifacNoiseModel(AbstractModel):
|
||||
import matplotlib.pyplot as plt
|
||||
for c in contrasts:
|
||||
stimulus = SinusoidalStepStimulus(stimulus_freq, c, stim_start, stim_duration)
|
||||
_, spiketimes = self.simulate_fast(stimulus, 3.5)
|
||||
_, spiketimes = self.simulate_fast(stimulus, total_simulation_time)
|
||||
|
||||
time, frequency = hF.calculate_time_and_frequency_trace(spiketimes, sampling_interval)
|
||||
|
||||
# if c == contrasts[0] or c == contrasts[-1]:
|
||||
# plt.plot(frequency)
|
||||
# plt.show()
|
||||
f_inf = hF.detect_f_infinity_in_freq_trace(time, frequency, stim_start, stim_duration, sampling_interval)
|
||||
f_infinities.append(f_inf)
|
||||
|
||||
@ -290,10 +299,13 @@ def binary_search_base_freq(model: LifacNoiseModel, base_stimulus, goal_frequenc
|
||||
|
||||
def test_v_offset(model: LifacNoiseModel, v_offset, base_stimulus, simulation_length):
|
||||
model.set_variable("v_offset", v_offset)
|
||||
try:
|
||||
v, spiketimes = model.simulate_fast(base_stimulus, simulation_length)
|
||||
|
||||
freq = hF.mean_freq_of_spiketimes_after_time_x(spiketimes, simulation_length / 3)
|
||||
|
||||
except ZeroDivisionError:
|
||||
print("divide by zero!")
|
||||
freq = 0
|
||||
# if freq > 10000:
|
||||
# from IPython import embed
|
||||
# import matplotlib.pyplot as plt
|
||||
|
Loading…
Reference in New Issue
Block a user