Skip to content
Snippets Groups Projects
Commit ca7159a1 authored by Alán Muñoz's avatar Alán Muñoz
Browse files

add dynamic class loading

Former-commit-id: 8bd73bbdbc1a7c09a4d3ee6fdd4a33d018dbd700
parent 20677193
No related branches found
No related tags found
No related merge requests found
...@@ -2,7 +2,7 @@ from postprocessor.core.processes.base import ParametersABC, ProcessABC ...@@ -2,7 +2,7 @@ from postprocessor.core.processes.base import ParametersABC, ProcessABC
from postprocessor.core.functions.tracks import clean_tracks, merge_tracks, join_tracks from postprocessor.core.functions.tracks import clean_tracks, merge_tracks, join_tracks
class MergerParameters(ParametersABC): class mergerParameters(ParametersABC):
""" """
:param tol: float or int threshold of average (prediction error/std) necessary :param tol: float or int threshold of average (prediction error/std) necessary
to consider two tracks the same. If float is fraction of first track, to consider two tracks the same. If float is fraction of first track,
...@@ -43,7 +43,7 @@ class MergerParameters(ParametersABC): ...@@ -43,7 +43,7 @@ class MergerParameters(ParametersABC):
) )
class Merger(ProcessABC): class merger(ProcessABC):
""" """
TODO Integrate functions/tracks.py inside this class? TODO Integrate functions/tracks.py inside this class?
""" """
......
...@@ -10,7 +10,7 @@ from postprocessor.core.processes.base import ParametersABC, ProcessABC ...@@ -10,7 +10,7 @@ from postprocessor.core.processes.base import ParametersABC, ProcessABC
from postprocessor.core.functions.tracks import max_ntps, max_nonstop_ntps from postprocessor.core.functions.tracks import max_ntps, max_nonstop_ntps
class PickerParameters(ParametersABC): class pickerParameters(ParametersABC):
def __init__( def __init__(
self, self,
condition: Tuple[str, Union[float, int]] = None, condition: Tuple[str, Union[float, int]] = None,
...@@ -32,7 +32,7 @@ class PickerParameters(ParametersABC): ...@@ -32,7 +32,7 @@ class PickerParameters(ParametersABC):
) )
class Picker(ProcessABC): class picker(ProcessABC):
""" """
:cells: Cell object passed to the constructor :cells: Cell object passed to the constructor
:condition: Tuple with condition and associated parameter(s), conditions can be :condition: Tuple with condition and associated parameter(s), conditions can be
...@@ -43,7 +43,7 @@ class Picker(ProcessABC): ...@@ -43,7 +43,7 @@ class Picker(ProcessABC):
def __init__( def __init__(
self, self,
parameters: PickerParameters, parameters: pickerParameters,
cells: CellsHDF, cells: CellsHDF,
): ):
super().__init__(parameters=parameters) super().__init__(parameters=parameters)
......
import pandas as pd
from postprocessor.core.processes.base import ParametersABC, ProcessABC from postprocessor.core.processes.base import ParametersABC, ProcessABC
class SavgolParameters(ParametersABC): class savgolParameters(ParametersABC):
""" """
Parameters Parameters
...@@ -21,13 +22,13 @@ class SavgolParameters(ParametersABC): ...@@ -21,13 +22,13 @@ class SavgolParameters(ParametersABC):
return cls.from_dict({"window": 3, "polynom": 3}) return cls.from_dict({"window": 3, "polynom": 3})
class Savgol(ProcessABC): class savgol(ProcessABC):
""" """
Apply Savitzky-Golay filter (works with NaNs, but it might return Apply Savitzky-Golay filter (works with NaNs, but it might return
NaN regions). NaN regions).
""" """
def __init__(self, parameters: SavgolParameters): def __init__(self, parameters: savgolParameters):
super().__init__(parameters) super().__init__(parameters)
def run(self, signal: pd.DataFrame): def run(self, signal: pd.DataFrame):
......
from pydoc import locate
from typing import List, Dict, Union from typing import List, Dict, Union
import pandas as pd import pandas as pd
from postprocessor.core.processes.base import ParametersABC from postprocessor.core.processes.base import ParametersABC
from postprocessor.core.processes.merger import MergerParameters, Merger from postprocessor.core.processes.merger import mergerParameters, merger
from postprocessor.core.processes.picker import PickerParameters, Picker from postprocessor.core.processes.picker import pickerParameters, picker
from core.io.writer import Writer from core.io.writer import Writer
from core.io.signal import Signal from core.io.signal import Signal
...@@ -23,11 +24,9 @@ class PostProcessorParameters(ParametersABC): ...@@ -23,11 +24,9 @@ class PostProcessorParameters(ParametersABC):
""" """
def __init__(self, merger=None, picker=None, processes=[]): def __init__(self, merger=None, picker=None, processes=[]):
self.merger: MergerParameters = merger self.merger: mergerParameters = merger
self.picker: PickerParameters = picker self.picker: pickerParameters = picker
self.processes: List = processes self.processes: Dict = processes
self.datasets: Dict = datasets
def __getitem__(self, item): def __getitem__(self, item):
return getattr(self, item) return getattr(self, item)
...@@ -36,9 +35,9 @@ class PostProcessorParameters(ParametersABC): ...@@ -36,9 +35,9 @@ class PostProcessorParameters(ParametersABC):
def default(cls, kind=None): def default(cls, kind=None):
if kind == "defaults" or kind == None: if kind == "defaults" or kind == None:
return cls( return cls(
merger=MergerParameters.default(), merger=mergerParameters.default(),
picker=PickerParameters.default(), picker=pickerParameters.default(),
datasets={ processes={
"merger": "/extraction/general/None/area", "merger": "/extraction/general/None/area",
"picker": "/extraction/general/None/area", "picker": "/extraction/general/None/area",
"processes": {"dSignal": ["/general/None/area"]}, "processes": {"dSignal": ["/general/None/area"]},
...@@ -56,21 +55,29 @@ class PostProcessor: ...@@ -56,21 +55,29 @@ class PostProcessor:
self._writer = Writer(filename) self._writer = Writer(filename)
# self.outpaths = parameters["outpaths"] # self.outpaths = parameters["outpaths"]
self.merger = Merger(parameters["merger"]) self.merger = merger(parameters["merger"])
self.picker = Picker( self.picker = picker(
parameters=parameters["picker"], cells=Cells.from_source(filename) parameters=parameters["picker"], cells=Cells.from_source(filename)
) )
self.processes = [ self.process_dict = {
self.get_process(process) for process in parameters["processes"] process: locate(process) for process in parameters["processes"].keys()
] }
self.processes = parameters["processes"]
@staticmethod
def get_process(process):
"""
Get process from folder ./processes
"""
print(__file__)
return locate("postprocessor.core.processes." + process + "." + process)
def run(self): def run(self):
new_ids = self.merger.run(self._signal[self.datasets["merger"]]) new_ids = self.merger.run(self._signal[self.processes["merger"]])
for name, ids in new_ids.items(): for name, ids in new_ids.items():
self._writer.write(ids, "/postprocessing/cell_info/" + name) self._writer.write(ids, "/postprocessing/cell_info/" + name)
picks = self.picker.run(self._signal[self.datasets["picker"]]) picks = self.picker.run(self._signal[self.processes["picker"][0]])
return picks return picks
# print(merge, picks)
# for process, dataset, outpath in zip( # for process, dataset, outpath in zip(
# self.processes, self.datasets["processes"], self.outpaths # self.processes, self.datasets["processes"], self.outpaths
# ): # ):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment