[FileStimData] add settings to classmembers

This commit is contained in:
Jan Grewe 2020-08-12 18:24:34 +02:00
parent 31bb53fe31
commit 48acf9edb3

View File

@ -274,7 +274,7 @@ class BaselineData:
""" """
vss = [] vss = []
spike_phases = [] spike_phases = []
for i, sd in enumerate(self.__spike_data): for i in range(self.size):
phases = self.__spike_phases(i) phases = self.__spike_phases(i)
ms_sin_alpha = np.mean(np.sin(phases)) ** 2 ms_sin_alpha = np.mean(np.sin(phases)) ** 2
ms_cos_alpha = np.mean(np.cos(phases)) ** 2 ms_cos_alpha = np.mean(np.cos(phases)) ** 2
@ -650,7 +650,8 @@ class FileStimulusData:
""" """
self.__spike_data = [] self.__spike_data = []
self.__contrasts = [] self.__contrasts = []
self.__stimuli = [] self.__stimulus_files = []
self.__stimulus_settings = []
self.__delays = [] self.__delays = []
self.__durations = [] self.__durations = []
self.__dataset = dataset self.__dataset = dataset
@ -660,6 +661,13 @@ class FileStimulusData:
self.__stimspikes = None self.__stimspikes = None
self._get_data() self._get_data()
@property
def dataset(self):
return self.__dataset
@property
def cell(self):
return self.__cell
def _get_data(self): def _get_data(self):
if not self.__dataset: if not self.__dataset:
@ -670,15 +678,16 @@ class FileStimulusData:
self.__stimspikes = StimSpikesFile(self.__dataset.data_source) self.__stimspikes = StimSpikesFile(self.__dataset.data_source)
for r in self.__repros: for r in self.__repros:
if self.__dataset.has_nix: if self.__dataset.has_nix:
spikes, contrasts, stims, delays, durations = self.__read_spike_data_from_nix(r) spikes, contrasts, stims, delays, durations, stim_settings = self.__read_spike_data_from_nix(r)
else: else:
spikes, contrasts, stims, delays, durations = self.__read_spike_data_from_directory(r) spikes, contrasts, stims, delays, durations, stim_settings = self.__read_spike_data_from_directory(r)
if spikes is not None and len(spikes) > 0: if spikes is not None and len(spikes) > 0:
self.__spike_data.extend(spikes) self.__spike_data.extend(spikes)
self.__contrasts.extend(contrasts) self.__contrasts.extend(contrasts)
self.__stimuli.extend(stims) self.__stimulus_files.extend(stims)
self.__delays.extend(delays) self.__delays.extend(delays)
self.__durations.extend(durations) self.__durations.extend(durations)
self.__stimulus_settings.extend(stim_settings)
else: else:
continue continue
@ -722,7 +731,7 @@ class FileStimulusData:
delay = float(r_settings["delay"].split(":")[-1]) delay = float(r_settings["delay"].split(":")[-1])
start_time = stimulus.start_time - delay start_time = stimulus.start_time - delay
end_time = stimulus.start_time + mt.extents[stimulus.index] end_time = stimulus.start_time + mt.extents[stimulus.index]
duration = mt.extents[stimulus.index] duration = float(mt.extents[stimulus.index])
contrast = self.__find_contrast(r_settings, s_settings, True) contrast = self.__find_contrast(r_settings, s_settings, True)
spikes = self.__all_spikes[(self.__all_spikes >= start_time) & (self.__all_spikes < end_time)] - start_time - delay spikes = self.__all_spikes[(self.__all_spikes >= start_time) & (self.__all_spikes < end_time)] - start_time - delay
@ -742,9 +751,12 @@ class FileStimulusData:
stim_files = [] stim_files = []
delays = [] delays = []
durations = [] durations = []
settings = []
repro_settings = repro.to_dict
r_settings = yaml.safe_load(repro.settings.replace("\t", ""))
stimuli, _ = Stimulus.find(cell_id=repro.cell_id, repro_id=repro.id) stimuli, _ = Stimulus.find(cell_id=repro.cell_id, repro_id=repro.id)
if len(stimuli) == 0: if len(stimuli) == 0:
return spikes, contrasts, stim_files return spikes, contrasts, stim_files, []
data_source = os.path.join(self.__dataset.data_source, self.__dataset.id + ".nix") data_source = os.path.join(self.__dataset.data_source, self.__dataset.id + ".nix")
if not os.path.exists(data_source): if not os.path.exists(data_source):
print("Data not found! Trying from directory") print("Data not found! Trying from directory")
@ -765,8 +777,10 @@ class FileStimulusData:
stim_files.append(stim) stim_files.append(stim)
delays.append(delay) delays.append(delay)
durations.append(duration) durations.append(duration)
stim_settings = s.to_dict
settings.append({"stimulus": stim_settings, "repro": repro_settings})
f.close() f.close()
return spikes, contrasts, stim_files, delays, contrasts return spikes, contrasts, stim_files, delays, durations, settings
def __read_spike_data_from_directory(self, repro: RePro): def __read_spike_data_from_directory(self, repro: RePro):
stimuli, _ = Stimulus.find(cell_id=repro.cell_id, repro_id=repro.id) stimuli, _ = Stimulus.find(cell_id=repro.cell_id, repro_id=repro.id)
@ -775,8 +789,10 @@ class FileStimulusData:
stim_files = [] stim_files = []
delays = [] delays = []
durations = [] durations = []
settings = []
r_settings = yaml.safe_load(repro.settings.replace("\t", "")) r_settings = yaml.safe_load(repro.settings.replace("\t", ""))
r_settings = r_settings["project"] if "project" in r_settings.keys() else r_settings r_settings = r_settings["project"] if "project" in r_settings.keys() else r_settings
repro_settings = repro.to_dict
for s in stimuli: for s in stimuli:
s_settings = yaml.safe_load(s.settings.replace("\t", "")) s_settings = yaml.safe_load(s.settings.replace("\t", ""))
s_settings = s_settings["project"] if "project" in s_settings.keys() else s_settings s_settings = s_settings["project"] if "project" in s_settings.keys() else s_settings
@ -790,8 +806,9 @@ class FileStimulusData:
durations.append(duration) durations.append(duration)
stim_files.append(s_settings["file"]) stim_files.append(s_settings["file"])
spikes.append(sp) spikes.append(sp)
settings.append({"stimulus": s.to_dict, "repro": repro_settings})
return spikes, contrasts, stim_files, delays, durations return spikes, contrasts, stim_files, delays, durations, settings
def read_stimulus(self, index=0): def read_stimulus(self, index=0):
pass pass
@ -808,6 +825,11 @@ class FileStimulusData:
else: else:
raise IndexError("FileStimulusData: index %i out of bounds for spike data of size %i" % (index, self.size)) raise IndexError("FileStimulusData: index %i out of bounds for spike data of size %i" % (index, self.size))
def stimulus_settings(self, index=0):
if index >= self.size:
raise IndexError("FileStimulusData: index %i is out of bounds for spike data of size %i" %(index, self.size))
return self.__stimulus_settings[index]
def contrast(self, index=-1): def contrast(self, index=-1):
if index == -1: if index == -1:
return self.__contrasts return self.__contrasts
@ -818,9 +840,9 @@ class FileStimulusData:
def stimulus_files(self, index=-1): def stimulus_files(self, index=-1):
if index == -1: if index == -1:
return self.__stimuli return self.__stimulus_files
elif index >=0 and index < self.size: elif index >=0 and index < self.size:
return self.__stimuli[index] return self.__stimulus_files[index]
else: else:
raise IndexError("FileStimulusData: index %i out of bounds for contrasts data of size %i" % (index, self.size)) raise IndexError("FileStimulusData: index %i out of bounds for contrasts data of size %i" % (index, self.size))