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() |