extend interface + implement scrappy model parser(to be reworked)

This commit is contained in:
a.ott 2020-01-15 14:41:24 +01:00
parent 3921a55761
commit 3eda710394

View File

@ -24,12 +24,24 @@ class AbstractParser:
def get_fi_curve_spiketimes(self): def get_fi_curve_spiketimes(self):
raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS") raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS")
def get_fi_frequency_traces(self):
raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS")
def get_sampling_interval(self): def get_sampling_interval(self):
raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS") raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS")
def get_recording_times(self): def get_recording_times(self):
raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS") raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS")
def traces_available(self) -> bool:
raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS")
def spiketimes_available(self) -> bool:
raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS")
def frequencies_available(self) -> bool:
raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS")
class DatParser(AbstractParser): class DatParser(AbstractParser):
@ -42,6 +54,15 @@ class DatParser(AbstractParser):
self.fi_recording_times = [] self.fi_recording_times = []
self.sampling_interval = -1 self.sampling_interval = -1
def traces_available(self) -> bool:
return True
def frequencies_available(self) -> bool:
return False
def spiketimes_available(self) -> bool:
return True
def cell_get_metadata(self): def cell_get_metadata(self):
raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS") raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS")
@ -62,6 +83,10 @@ class DatParser(AbstractParser):
def get_fi_curve_traces(self): def get_fi_curve_traces(self):
return self.__get_traces__("FICurve") return self.__get_traces__("FICurve")
def get_fi_frequency_traces(self):
raise NotImplementedError("Not possible in .dat data type.\n"
"Please check availability with the x_available functions.")
# TODO clean up/ rewrite # TODO clean up/ rewrite
def get_fi_curve_spiketimes(self): def get_fi_curve_spiketimes(self):
spiketimes = [] spiketimes = []
@ -208,15 +233,69 @@ class DatParser(AbstractParser):
raise RuntimeError(self.fi_file + " file doesn't exist!") raise RuntimeError(self.fi_file + " file doesn't exist!")
# MODEL PARSER: ------------------------------
class ModelParser(AbstractParser): class ModelParser(AbstractParser):
def __init__(self, model: AbstractModel): def __init__(self, model: AbstractModel):
self.model = model self.model = model
def cell_get_metadata(self):
raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS")
def get_baseline_traces(self):
raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS")
def get_fi_curve_traces(self):
if not self.model.simulates_voltage_trace():
raise NotImplementedError("Model doesn't simulated voltage traces!")
traces = []
for stimulus in self.model.get_stimuli_for_fi_curve():
self.model.simulate(stimulus, self.model.total_stimulation_time_fi_curve)
traces.append(self.model.get_voltage_trace())
return traces
def get_fi_curve_spiketimes(self):
if not self.model.simulates_spiketimes():
raise NotImplementedError("Model doesn't simulated spiketimes!")
all_spiketimes = []
for stimulus in self.model.get_stimuli_for_fi_curve():
self.model.simulate(stimulus, self.model.total_stimulation_time_fi_curve)
all_spiketimes.append(self.model.get_spiketimes())
return all_spiketimes
def get_fi_frequency_traces(self):
if not self.model.simulates_frequency():
raise NotImplementedError("Model doesn't simulated frequency!")
frequency_traces = []
for stimulus in self.model.get_stimuli_for_fi_curve():
self.model.simulate(stimulus, self.model.total_stimulation_time_fi_curve)
frequency_traces.append(self.model.get_frequency())
return frequency_traces
def get_sampling_interval(self):
self.model.get_sampling_interval()
def get_recording_times(self):
raise NotImplementedError("NOT YET OVERRIDDEN FROM ABSTRACT CLASS")
def traces_available(self) -> bool:
return self.model.simulates_voltage_trace()
def spiketimes_available(self) -> bool:
return self.model.simulates_spiketimes()
def frequencies_available(self) -> bool:
return self.model.simulates_frequency()
# TODO #################################### # TODO ####################################
class NixParser(AbstractParser): class NixParser(AbstractParser):
def __init__(self, nix_file_path): def __init__(self, nix_file_path):
@ -232,9 +311,9 @@ def get_parser(data_path) -> AbstractParser:
return DatParser(data_path) return DatParser(data_path)
elif data_format == NIX_FORMAT: elif data_format == NIX_FORMAT:
return NixParser(data_path) return NixParser(data_path)
elif MODEL: elif data_format == MODEL:
return ModelParser(data_path) return ModelParser(data_path)
elif UNKNOWN: elif data_format == UNKNOWN:
raise TypeError("DataParserFactory:get_parser(data_path):\nCannot determine type of data for:" + data_path) raise TypeError("DataParserFactory:get_parser(data_path):\nCannot determine type of data for:" + data_path)