add test to hand fit model parameters and test for FiCurve
This commit is contained in:
parent
de6c9f0b4d
commit
98c0c1ed1d
@ -10,6 +10,8 @@ from scipy.signal import argrelmax
|
||||
from thunderfish.eventdetection import detect_peaks
|
||||
from stimuli.SinusAmplitudeModulation import SinusAmplitudeModulationStimulus
|
||||
from models.LIFACnoise import LifacNoiseModel
|
||||
from FiCurve import FICurve
|
||||
|
||||
|
||||
def time_test_function():
|
||||
for n in [1000]: # number of calls
|
||||
@ -96,10 +98,68 @@ def test_simulation_speed():
|
||||
print("took:", round((t_end-t_start)/repetitions, 5), "seconds for " + str(seconds) + "s simulation", "step size:", parameters["step_size"]*1000, "ms")
|
||||
|
||||
|
||||
def test_fi_curve_class():
|
||||
for cell_data in icelldata_of_dir("./data/"):
|
||||
fi_curve = FICurve(cell_data)
|
||||
fi_curve.plot_fi_curve()
|
||||
# fi_curve.plot_f_point_detections()
|
||||
|
||||
|
||||
pass
|
||||
|
||||
|
||||
def test_parameters():
|
||||
parameters = {'mem_tau': 21., 'delta_a': 0.1, 'input_scaling': 400.,
|
||||
'v_offset': 85.25, 'threshold': 0.1, 'v_base': 0, 'step_size': 0.00005, 'tau_a': 0.01,
|
||||
'a_zero': 0, 'v_zero': 0, 'noise_strength': 3}
|
||||
model = LifacNoiseModel(parameters)
|
||||
|
||||
base_stimulus_freq = 350
|
||||
stimulus = SinusAmplitudeModulationStimulus(base_stimulus_freq, 1.2, 5, 5, 20)
|
||||
|
||||
plot_model_during_stimulus(model, stimulus, 30)
|
||||
|
||||
bf, vs, sc = model.calculate_baseline_markers(base_stimulus_freq)
|
||||
contrasts = [0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3]
|
||||
modulation_frequency = 1
|
||||
f_infs, f_inf_slope = model.calculate_fi_markers(contrasts, base_stimulus_freq, modulation_frequency)
|
||||
|
||||
print("Baseline frequency: {:.2f}".format(bf))
|
||||
print("Vector strength: {:.2f}".format(vs))
|
||||
print("serial correlation: {:.2f}".format(sc[0]))
|
||||
|
||||
print("f infinity slope: {:.2f}".format(f_inf_slope))
|
||||
print("f infinities: \n", f_infs)
|
||||
|
||||
|
||||
def plot_model_during_stimulus(model: LifacNoiseModel, stimulus:SinusAmplitudeModulationStimulus, total_time):
|
||||
model.simulate_fast(stimulus, total_time)
|
||||
|
||||
time = np.arange(0, total_time, model.get_sampling_interval())
|
||||
fig, axes = plt.subplots(4, 1, figsize=(9, 4*2), sharex="all")
|
||||
|
||||
stimulus_array = stimulus.as_array(0, total_time, model.get_sampling_interval())
|
||||
axes[0].plot(time, stimulus_array)
|
||||
axes[0].set_title("Stimulus")
|
||||
axes[1].plot(time, rectify_stimulus_array(stimulus_array))
|
||||
axes[1].set_title("rectified Stimulus")
|
||||
axes[2].plot(time, model.get_voltage_trace())
|
||||
axes[2].set_title("Voltage")
|
||||
axes[3].plot(time, model.get_adaption_trace())
|
||||
axes[3].set_title("Adaption")
|
||||
plt.show()
|
||||
|
||||
|
||||
def rectify_stimulus_array(stimulus_array: np.ndarray):
|
||||
return np.array([x if x > 0 else 0 for x in stimulus_array])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# time_test_function()
|
||||
# test_cell_data()
|
||||
# test_peak_detection()
|
||||
test_simulation_speed()
|
||||
# test_simulation_speed()
|
||||
# test_parameters()
|
||||
test_fi_curve_class()
|
||||
pass
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user