From 98c0c1ed1dab22c28fbe907b053be29f8d3ebdac Mon Sep 17 00:00:00 2001 From: "a.ott" Date: Wed, 4 Mar 2020 15:57:32 +0100 Subject: [PATCH] add test to hand fit model parameters and test for FiCurve --- generalTests.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/generalTests.py b/generalTests.py index 385a4f5..8815002 100644 --- a/generalTests.py +++ b/generalTests.py @@ -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