add scripts to create plots and read info from data
This commit is contained in:
parent
378ead984d
commit
c64add286f
115
Figures_Baseline.py
Normal file
115
Figures_Baseline.py
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
|
||||||
|
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import numpy as np
|
||||||
|
import os
|
||||||
|
|
||||||
|
import helperFunctions as hF
|
||||||
|
|
||||||
|
from CellData import CellData
|
||||||
|
from Baseline import BaselineCellData
|
||||||
|
from FiCurve import FICurveCellData
|
||||||
|
|
||||||
|
MODEL_COLOR = "blue"
|
||||||
|
DATA_COLOR = "orange"
|
||||||
|
|
||||||
|
DATA_SAVE_PATH = "data/figure_data/"
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# data_isi_histogram()
|
||||||
|
# data_mean_freq_step_stimulus_examples()
|
||||||
|
# data_mean_freq_step_stimulus_with_detections()
|
||||||
|
data_fi_curve()
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def data_fi_curve():
|
||||||
|
cell = "data/invivo/2013-04-17-ac-invivo-1/"
|
||||||
|
cell_data = CellData(cell)
|
||||||
|
fi = FICurveCellData(cell_data, cell_data.get_fi_contrasts())
|
||||||
|
fi.plot_fi_curve()
|
||||||
|
|
||||||
|
def data_mean_freq_step_stimulus_with_detections():
|
||||||
|
cell = "data/invivo/2013-04-17-ac-invivo-1/"
|
||||||
|
cell_data = CellData(cell)
|
||||||
|
fi = FICurveCellData(cell_data, cell_data.get_fi_contrasts())
|
||||||
|
|
||||||
|
time_traces, freq_traces = fi.get_time_and_freq_traces()
|
||||||
|
mean_times, mean_freqs = fi.get_mean_time_and_freq_traces()
|
||||||
|
idx = -1
|
||||||
|
time = np.array(mean_times[idx])
|
||||||
|
freq = np.array(mean_freqs[idx])
|
||||||
|
f_inf = fi.f_inf_frequencies[idx]
|
||||||
|
f_zero = fi.f_zero_frequencies[idx]
|
||||||
|
|
||||||
|
plt.plot(time, freq, color=DATA_COLOR)
|
||||||
|
plt.plot(time[freq == f_zero][0], f_zero, "o", color="black")
|
||||||
|
f_inf_time = time[(0.2 < time) & (time < 0.4)]
|
||||||
|
plt.plot(f_inf_time, [f_inf for _ in f_inf_time], color="black")
|
||||||
|
plt.xlim((-0.1, 0.6))
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
def data_mean_freq_step_stimulus_examples():
|
||||||
|
# todo smooth! add f_0, f_inf, f_base to it?
|
||||||
|
cell = "data/invivo/2013-04-17-ac-invivo-1/"
|
||||||
|
cell_data = CellData(cell)
|
||||||
|
fi = FICurveCellData(cell_data, cell_data.get_fi_contrasts())
|
||||||
|
|
||||||
|
time_traces, freq_traces = fi.get_time_and_freq_traces()
|
||||||
|
mean_times, mean_freqs = fi.get_mean_time_and_freq_traces()
|
||||||
|
|
||||||
|
used_idicies = (0, 7, -1)
|
||||||
|
fig, axes = plt.subplots(len(used_idicies), figsize=(8, 12), sharex=True, sharey=True)
|
||||||
|
for ax_idx, idx in enumerate(used_idicies):
|
||||||
|
sv = fi.stimulus_values[idx]
|
||||||
|
|
||||||
|
# for j in range(len(time_traces[i])):
|
||||||
|
# axes[i].plot(time_traces[i][j], freq_traces[i][j], color="gray", alpha=0.5)
|
||||||
|
|
||||||
|
axes[ax_idx].plot(mean_times[idx], mean_freqs[idx], color=DATA_COLOR)
|
||||||
|
# plt.plot(mean_times[i], mean_freqs[i], color="black")
|
||||||
|
|
||||||
|
axes[ax_idx].set_ylabel("Frequency [Hz]")
|
||||||
|
axes[ax_idx].set_xlim((-0.2, 0.6))
|
||||||
|
axes[ax_idx].set_title("Contrast {:.2f} ({:} trials)".format(sv, len(time_traces[idx])))
|
||||||
|
axes[ax_idx].set_xlabel("Time [s]")
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
def data_isi_histogram(recalculate=True):
|
||||||
|
# if isis loadable - load
|
||||||
|
name = "isi_cell_data.npy"
|
||||||
|
path = os.path.join(DATA_SAVE_PATH, name)
|
||||||
|
if os.path.exists(path) and not recalculate:
|
||||||
|
isis = np.load(path)
|
||||||
|
print("loaded")
|
||||||
|
else:
|
||||||
|
# if not get them from the cell
|
||||||
|
cell = "data/invivo/2013-04-17-ac-invivo-1/" # not bursty
|
||||||
|
# cell = "data/invivo/2014-12-03-ad-invivo-1/" # half bursty
|
||||||
|
# cell = "data/invivo/2015-01-20-ad-invivo-1/" # does triple peaks...
|
||||||
|
# cell = "data/invivo/2018-05-08-ae-invivo-1/" # a bit bursty
|
||||||
|
# cell = "data/invivo/2013-04-10-af-invivo-1/" # a bit bursty
|
||||||
|
cell_data = CellData(cell)
|
||||||
|
base = BaselineCellData(cell_data)
|
||||||
|
isis = np.array(base.get_interspike_intervals())
|
||||||
|
# base.plot_baseline(position=0,time_length=10)
|
||||||
|
|
||||||
|
# save isis
|
||||||
|
np.save(path, isis)
|
||||||
|
isis = isis * 1000
|
||||||
|
# plot histogram
|
||||||
|
bins = np.arange(0, 30.1, 0.1)
|
||||||
|
plt.hist(isis, bins=bins, color=DATA_COLOR)
|
||||||
|
plt.xlabel("Inter spike intervals [ms]")
|
||||||
|
plt.ylabel("Count")
|
||||||
|
plt.tight_layout()
|
||||||
|
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
56
Figures_Model.py
Normal file
56
Figures_Model.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
|
||||||
|
from models.LIFACnoise import LifacNoiseModel
|
||||||
|
from stimuli.SinusoidalStepStimulus import SinusoidalStepStimulus
|
||||||
|
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
plot_model_example()
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def plot_model_example():
|
||||||
|
|
||||||
|
parameter = {}
|
||||||
|
model = LifacNoiseModel(parameter)
|
||||||
|
# frequency, contrast, start_time=0, duration=np.inf, amplitude=1)
|
||||||
|
frequency = 350
|
||||||
|
contrast = 0
|
||||||
|
start_time = 5
|
||||||
|
duration = 0
|
||||||
|
stimulus = SinusoidalStepStimulus(frequency, contrast, start_time, duration)
|
||||||
|
|
||||||
|
time_start = 0
|
||||||
|
time_duration = 0.5
|
||||||
|
time_step = model.get_sampling_interval()
|
||||||
|
v1, spikes = model.simulate_fast(stimulus, total_time_s=time_duration, time_start=time_start)
|
||||||
|
adaption = model.get_adaption_trace()
|
||||||
|
time = np.arange(time_start, time_start+time_duration, time_step)
|
||||||
|
fig, axes = plt.subplots(2, sharex=True)
|
||||||
|
|
||||||
|
# axes[0].plot(time, stimulus.as_array(time_start, time_duration, time_step))
|
||||||
|
|
||||||
|
start = 0.26
|
||||||
|
end = 0.29
|
||||||
|
start_idx = int(start / time_step)
|
||||||
|
end_idx = int(end / time_step)
|
||||||
|
time_part = np.arange(0, end_idx-start_idx, 1) * time_step *1000
|
||||||
|
# axes[0].plot(time[start_idx:end_idx], v1[start_idx:end_idx])
|
||||||
|
axes[0].plot(time_part, v1[start_idx:end_idx])
|
||||||
|
axes[0].set_ylabel("Membrane voltage [mV]")
|
||||||
|
# axes[1].plot(time[start_idx:end_idx], adaption[start_idx:end_idx])
|
||||||
|
axes[1].plot(time_part, adaption[start_idx:end_idx])
|
||||||
|
axes[1].set_ylabel("Adaption current [mV]")
|
||||||
|
axes[1].set_xlabel("Time [ms]")
|
||||||
|
axes[1].set_xlim((0, 30))
|
||||||
|
plt.show()
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
67
Figures_Stimuli.py
Normal file
67
Figures_Stimuli.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
|
||||||
|
from stimuli.SinusoidalStepStimulus import SinusoidalStepStimulus
|
||||||
|
from stimuli.SinusAmplitudeModulation import SinusAmplitudeModulationStimulus
|
||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
plot_step_stimulus()
|
||||||
|
plot_sam_stimulus()
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def plot_step_stimulus():
|
||||||
|
start = 0
|
||||||
|
end = 1
|
||||||
|
|
||||||
|
time_start = -0.2
|
||||||
|
time_end = 1.2
|
||||||
|
step_size = 0.00005
|
||||||
|
|
||||||
|
frequency = 20
|
||||||
|
contrast = 0.5
|
||||||
|
# frequency, contrast, start_time=0, duration=np.inf, amplitude=1
|
||||||
|
step_stim= SinusoidalStepStimulus(frequency, contrast, start, end-start)
|
||||||
|
|
||||||
|
values = step_stim.as_array(time_start, time_end-time_start, step_size)
|
||||||
|
time = np.arange(time_start, time_end, step_size)
|
||||||
|
|
||||||
|
plt.plot(time, values)
|
||||||
|
plt.xlabel("Time [s]")
|
||||||
|
plt.ylabel("Voltage [mV]")
|
||||||
|
plt.savefig("thesis/figures/sin_step_stim_example.pdf")
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
|
||||||
|
def plot_sam_stimulus():
|
||||||
|
start = 0
|
||||||
|
end = 1
|
||||||
|
|
||||||
|
time_start = -0.2
|
||||||
|
time_end = 1.2
|
||||||
|
step_size = 0.00005
|
||||||
|
|
||||||
|
contrast = 0.5
|
||||||
|
mod_freq = 10
|
||||||
|
carrier_freq = 53
|
||||||
|
# carrier_frequency, contrast, modulation_frequency, start_time=0, duration=np.inf, amplitude=1
|
||||||
|
step_stim = SinusAmplitudeModulationStimulus(carrier_freq, contrast, mod_freq, start, end - start)
|
||||||
|
|
||||||
|
values = step_stim.as_array(time_start, time_end - time_start, step_size)
|
||||||
|
time = np.arange(time_start, time_end, step_size)
|
||||||
|
plt.plot(time, values)
|
||||||
|
|
||||||
|
beat_time = np.arange(start, end, step_size)
|
||||||
|
beat_values = np.sin(beat_time*2*np.pi*mod_freq) * contrast + 1
|
||||||
|
plt.plot(beat_time, beat_values)
|
||||||
|
|
||||||
|
plt.xlabel("Time [s]")
|
||||||
|
plt.ylabel("Voltage [mV]")
|
||||||
|
# plt.show()
|
||||||
|
plt.savefig("thesis/figures/sam_stim_example.pdf")
|
||||||
|
plt.close()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
118
read_data_infos.py
Normal file
118
read_data_infos.py
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
from CellData import icelldata_of_dir, CellData
|
||||||
|
import numpy as np
|
||||||
|
import os
|
||||||
|
import pyrelacs.DataLoader as Dl
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
fish_info()
|
||||||
|
# eod_info()
|
||||||
|
# fi_recording_times()
|
||||||
|
|
||||||
|
|
||||||
|
def eod_info():
|
||||||
|
cells = []
|
||||||
|
for item in sorted(os.listdir("data/invivo/")):
|
||||||
|
cells.append(os.path.join("data/invivo/", item))
|
||||||
|
|
||||||
|
for item in sorted(os.listdir("data/invivo_bursty/")):
|
||||||
|
cells.append(os.path.join("data/invivo_bursty/", item))
|
||||||
|
|
||||||
|
eod_freq = []
|
||||||
|
|
||||||
|
for cell in cells:
|
||||||
|
data = CellData(cell)
|
||||||
|
eod_f = data.get_eod_frequency()
|
||||||
|
if not np.isnan(eod_f):
|
||||||
|
eod_freq.append(eod_f)
|
||||||
|
else:
|
||||||
|
print(cell)
|
||||||
|
|
||||||
|
print("eod Freq: min {}, max {}, mean: {:.2f}, std: {:.2f}".format(min(eod_freq), max(eod_freq), np.mean(eod_freq),
|
||||||
|
np.std(eod_freq)))
|
||||||
|
|
||||||
|
def fish_info():
|
||||||
|
cells = []
|
||||||
|
for item in sorted(os.listdir("data/invivo/")):
|
||||||
|
cells.append(os.path.join("data/invivo/", item))
|
||||||
|
|
||||||
|
for item in sorted(os.listdir("data/invivo_bursty/")):
|
||||||
|
cells.append(os.path.join("data/invivo_bursty/", item))
|
||||||
|
cell_type = []
|
||||||
|
weight = []
|
||||||
|
size = []
|
||||||
|
eod_freq = []
|
||||||
|
preparation = []
|
||||||
|
for cell in cells:
|
||||||
|
info_file = os.path.join(cell, "info.dat")
|
||||||
|
for metadata in Dl.load(info_file):
|
||||||
|
if "CellType" not in metadata.keys():
|
||||||
|
cell_type.append(metadata["Cell"]["CellType"])
|
||||||
|
if cell_type[-1] != "P-unit":
|
||||||
|
print("not P-unit?", cell)
|
||||||
|
if "Weight" in metadata["Subject"].keys():
|
||||||
|
weight.append(float(metadata["Subject"]["Weight"][:-1]))
|
||||||
|
size.append(float(metadata["Subject"]["Size"][:-2]))
|
||||||
|
if "CellProperties" in metadata.keys():
|
||||||
|
eod_freq.append(float(metadata["CellProperties"]["EOD Frequency"][:-2]))
|
||||||
|
elif "Cell properties" in metadata.keys():
|
||||||
|
eod_freq.append(float(metadata["Cell properties"]["EOD Frequency"][:-2]))
|
||||||
|
preparation.append(metadata["Preparation"])
|
||||||
|
# print(metadata)
|
||||||
|
else:
|
||||||
|
cell_type.append(metadata["CellType"])
|
||||||
|
if cell_type[-1] != "P-unit":
|
||||||
|
print("not P-unit?", cell)
|
||||||
|
|
||||||
|
weight.append(float(metadata["Weight"][:-1]))
|
||||||
|
size.append(float(metadata["Size"][:-2]))
|
||||||
|
# 'LocalAnaesthesia': 'true', 'AnaestheticDose': '120mg/l', 'Anaesthetic': 'MS 222', 'LocalAnaesthetic': 'Lidocaine', 'Anaesthesia': 'true', 'Type': 'in vivo', 'Immobilization': 'Tubocurarin'
|
||||||
|
eod_freq.append(float(metadata["EOD Frequency"][:-2]))
|
||||||
|
prep_dict = {}
|
||||||
|
for key in ('LocalAnaesthesia', 'AnaestheticDose', 'Anaesthetic', 'LocalAnaesthetic', 'Anaesthesia', 'Immobilization'):
|
||||||
|
prep_dict[key] = metadata[key]
|
||||||
|
preparation.append(prep_dict)
|
||||||
|
# print(metadata)
|
||||||
|
|
||||||
|
print("Size: min {}, max {}".format(min(size), max(size)))
|
||||||
|
print("weight: min {}, max {}".format(min(weight), max(weight)))
|
||||||
|
print("eod Freq: min {}, max {}, mean: {:.2f}, std: {:.2f}".format(min(eod_freq), max(eod_freq), np.mean(eod_freq), np.std(eod_freq)))
|
||||||
|
print("anaesthetics:", np.unique([x['Anaesthetic'] for x in preparation]))
|
||||||
|
print("anaesthetic dosages:", np.unique([x['AnaestheticDose'] for x in preparation]))
|
||||||
|
print("local anaesthetic:", np.unique([x['LocalAnaesthesia'] for x in preparation]))
|
||||||
|
print("Immobilization:", np.unique([x['Immobilization'] for x in preparation]))
|
||||||
|
|
||||||
|
|
||||||
|
def fi_recording_times():
|
||||||
|
|
||||||
|
recording_times = []
|
||||||
|
for cell_data in icelldata_of_dir("data/invivo/", test_for_v1_trace=False):
|
||||||
|
# time_start, stimulus_start, stimulus_duration, after_stimulus_duration
|
||||||
|
recording_times.append(cell_data.get_recording_times())
|
||||||
|
for cell_data in icelldata_of_dir("data/invivo_bursty/", test_for_v1_trace=False):
|
||||||
|
# time_start, stimulus_start, stimulus_duration, after_stimulus_duration
|
||||||
|
recording_times.append(cell_data.get_recording_times())
|
||||||
|
|
||||||
|
recording_times = np.array(recording_times)
|
||||||
|
|
||||||
|
time_starts = recording_times[:, 0]
|
||||||
|
stimulus_starts = recording_times[:, 1]
|
||||||
|
stimulus_durations = recording_times[:, 2]
|
||||||
|
after_durations = recording_times[:, 3]
|
||||||
|
|
||||||
|
print("Fi-curve stimulus recording times:")
|
||||||
|
print("time_starts:", np.unique(time_starts))
|
||||||
|
print("stimulus_starts:", np.unique(stimulus_starts))
|
||||||
|
unique_durations = np.unique(stimulus_durations)
|
||||||
|
print("stimulus_durations:", unique_durations)
|
||||||
|
|
||||||
|
for d in unique_durations:
|
||||||
|
print("cells with stimulus duration {}: {}".format(d, np.sum(stimulus_durations == d)))
|
||||||
|
|
||||||
|
print("after_durations:", np.unique(after_durations))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
Loading…
Reference in New Issue
Block a user