From 48acf9edb32b9e66f4dd5e215104671f084c34f0 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Wed, 12 Aug 2020 18:24:34 +0200 Subject: [PATCH] [FileStimData] add settings to classmembers --- fishbook/frontend/relacs_classes.py | 46 +++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/fishbook/frontend/relacs_classes.py b/fishbook/frontend/relacs_classes.py index 71e64a5..ffe5413 100644 --- a/fishbook/frontend/relacs_classes.py +++ b/fishbook/frontend/relacs_classes.py @@ -274,7 +274,7 @@ class BaselineData: """ vss = [] spike_phases = [] - for i, sd in enumerate(self.__spike_data): + for i in range(self.size): phases = self.__spike_phases(i) ms_sin_alpha = np.mean(np.sin(phases)) ** 2 ms_cos_alpha = np.mean(np.cos(phases)) ** 2 @@ -650,7 +650,8 @@ class FileStimulusData: """ self.__spike_data = [] self.__contrasts = [] - self.__stimuli = [] + self.__stimulus_files = [] + self.__stimulus_settings = [] self.__delays = [] self.__durations = [] self.__dataset = dataset @@ -660,6 +661,13 @@ class FileStimulusData: self.__stimspikes = None self._get_data() + @property + def dataset(self): + return self.__dataset + + @property + def cell(self): + return self.__cell def _get_data(self): if not self.__dataset: @@ -670,15 +678,16 @@ class FileStimulusData: self.__stimspikes = StimSpikesFile(self.__dataset.data_source) for r in self.__repros: 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: - 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: self.__spike_data.extend(spikes) self.__contrasts.extend(contrasts) - self.__stimuli.extend(stims) + self.__stimulus_files.extend(stims) self.__delays.extend(delays) self.__durations.extend(durations) + self.__stimulus_settings.extend(stim_settings) else: continue @@ -722,7 +731,7 @@ class FileStimulusData: delay = float(r_settings["delay"].split(":")[-1]) start_time = stimulus.start_time - delay 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) 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 = [] delays = [] 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) 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") if not os.path.exists(data_source): print("Data not found! Trying from directory") @@ -765,8 +777,10 @@ class FileStimulusData: stim_files.append(stim) delays.append(delay) durations.append(duration) + stim_settings = s.to_dict + settings.append({"stimulus": stim_settings, "repro": repro_settings}) 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): stimuli, _ = Stimulus.find(cell_id=repro.cell_id, repro_id=repro.id) @@ -775,8 +789,10 @@ class FileStimulusData: stim_files = [] delays = [] durations = [] + settings = [] r_settings = yaml.safe_load(repro.settings.replace("\t", "")) r_settings = r_settings["project"] if "project" in r_settings.keys() else r_settings + repro_settings = repro.to_dict for s in stimuli: s_settings = yaml.safe_load(s.settings.replace("\t", "")) s_settings = s_settings["project"] if "project" in s_settings.keys() else s_settings @@ -790,8 +806,9 @@ class FileStimulusData: durations.append(duration) stim_files.append(s_settings["file"]) spikes.append(sp) - - return spikes, contrasts, stim_files, delays, durations + settings.append({"stimulus": s.to_dict, "repro": repro_settings}) + + return spikes, contrasts, stim_files, delays, durations, settings def read_stimulus(self, index=0): pass @@ -808,6 +825,11 @@ class FileStimulusData: else: 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): if index == -1: return self.__contrasts @@ -818,9 +840,9 @@ class FileStimulusData: def stimulus_files(self, index=-1): if index == -1: - return self.__stimuli + return self.__stimulus_files elif index >=0 and index < self.size: - return self.__stimuli[index] + return self.__stimulus_files[index] else: raise IndexError("FileStimulusData: index %i out of bounds for contrasts data of size %i" % (index, self.size))