131 lines
4.1 KiB
Python
131 lines
4.1 KiB
Python
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
from my_util import helperFunctions as hf, functions as fu
|
|
from models.FirerateModel import FirerateModel
|
|
from models.LIFACnoise import LifacNoiseModel
|
|
from stimuli.StepStimulus import StepStimulus
|
|
from stimuli.SinusoidalStepStimulus import SinusoidalStepStimulus
|
|
|
|
|
|
def main():
|
|
# test_firerate_model()
|
|
# test_stepsize_influence()
|
|
test_lifac_noise()
|
|
|
|
|
|
def test_stepsize_influence():
|
|
# model = LIFACModel()
|
|
model = FirerateModel()
|
|
stimulus = StepStimulus(0.5, 1, 15)
|
|
|
|
for step_size in [0.001, 0.1]:
|
|
model.set_variable("step_size", step_size)
|
|
|
|
model.simulate(stimulus, 2)
|
|
|
|
# y = model.get_voltage_trace()
|
|
y = model.get_frequency()
|
|
|
|
plt.plot(np.arange(0, 2, step_size/1000), y, label="step_size:" + str(step_size))
|
|
|
|
plt.xlabel("time in seconds")
|
|
plt.ylabel("Voltage")
|
|
plt.title("Voltage in the LIFAC-Model with different step sizes")
|
|
plt.legend()
|
|
plt.show()
|
|
plt.close()
|
|
|
|
|
|
def test_firerate_model():
|
|
model = FirerateModel()
|
|
duration = 0.2
|
|
stimulus = StepStimulus(duration/2, duration, 10)
|
|
|
|
model.simulate(stimulus, duration*2)
|
|
plt.plot(np.arange(0, duration*2, model.get_sampling_interval()/1000), model.get_frequency())
|
|
plt.show()
|
|
|
|
|
|
def test_lifac_noise():
|
|
|
|
model = LifacNoiseModel()
|
|
|
|
start = 1
|
|
duration = 3
|
|
total_time = duration + 2*start
|
|
step_size = model.get_parameters()["step_size"]
|
|
time = np.arange(0, total_time, step_size)
|
|
stimulus = SinusoidalStepStimulus(700, 0.2, start, duration)
|
|
|
|
model.simulate(stimulus, total_time)
|
|
|
|
fig, axes = plt.subplots(nrows=4, sharex="col")
|
|
sparse_time = np.arange(0, total_time, 1/5000)
|
|
axes[0].plot(sparse_time, [stimulus.value_at_time_in_s(x) for x in sparse_time], label="given stimulus")
|
|
axes[0].plot(sparse_time, [fu.rectify(stimulus.value_at_time_in_s(x)) for x in sparse_time], label="seen stimulus")
|
|
axes[0].set_title("Stimulus")
|
|
axes[0].set_ylabel("stimulus strength")
|
|
axes[0].legend()
|
|
|
|
input_voltage = model.input_voltage
|
|
axes[1].plot(time, input_voltage)
|
|
axes[1].set_title("Stimulus after dendtritic filter")
|
|
axes[1].set_ylabel("stimulus strength")
|
|
|
|
voltage_trace = model.get_voltage_trace()
|
|
axes[2].plot(time, voltage_trace)
|
|
axes[2].set_title("Voltage trace")
|
|
axes[2].set_ylabel("voltage")
|
|
|
|
spiketimes = model.get_spiketimes()
|
|
t, f = hf.calculate_time_and_frequency_trace(spiketimes, step_size)
|
|
axes[3].plot(t, f)
|
|
axes[3].set_title("ISI frequency trace")
|
|
axes[3].set_ylabel("Frequency")
|
|
|
|
plt.show()
|
|
|
|
# spiketimes_small_step = model.get_spiketimes()
|
|
#
|
|
# model.set_variable("step_size", 0.02)
|
|
# model.simulate(stimulus, total_time)
|
|
# print(model.get_adaption_trace()[int(0.1/(0.01/1000))])
|
|
# step_size = model.get_parameters()["step_size"] / 1000
|
|
# time = np.arange(0, total_time, step_size)
|
|
# t, f = hf.calculate_time_and_frequency_trace(model.get_spiketimes(), 0.02)
|
|
#
|
|
# axes[1].plot(time, model.get_voltage_trace())
|
|
# axes[2].plot(t, f)
|
|
#
|
|
# spiketimes_big_step = model.get_spiketimes()
|
|
#
|
|
# print("CV:")
|
|
# print("small step:", hf.calculate_coefficient_of_variation(spiketimes_small_step))
|
|
# print("big step:", hf.calculate_coefficient_of_variation(spiketimes_big_step))
|
|
|
|
# plt.show()
|
|
# plt.close()
|
|
#
|
|
# max_lag = 5
|
|
# x = np.arange(1, max_lag+1, 1)
|
|
# serial_cor_small = hf.calculate_serial_correlation(spiketimes_small_step, max_lag)
|
|
# serial_cor_big = hf.calculate_serial_correlation(spiketimes_big_step, max_lag)
|
|
#
|
|
# print(serial_cor_small)
|
|
# print(serial_cor_big)
|
|
# plt.plot(x, serial_cor_small, 'o', label='small step',)
|
|
# plt.plot(x, serial_cor_big, 'o', label='big step')
|
|
# plt.ylim(-1, 1)
|
|
# plt.legend()
|
|
# plt.show()
|
|
# plt.close()
|
|
#
|
|
# bins = np.arange(0, max(np.diff(spiketimes_small_step)), 0.0001)
|
|
# plt.hist(np.diff(spiketimes_small_step), bins=bins, alpha=0.5)
|
|
# plt.hist(np.diff(spiketimes_big_step), bins=bins, alpha=0.5)
|
|
# plt.show()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main() |