Source code for patato.processing.processing_algorithm
# Copyright (c) Thomas Else 2023-25.
# License: MIT
from __future__ import annotations
from abc import ABC, abstractmethod
from typing import TYPE_CHECKING, Optional
from typing import Union, List, Any, Tuple
if TYPE_CHECKING:
from ..io.msot_data import PAData
from ..core.image_structures.image_sequence import ImageSequence
from ..core.image_structures.pa_time_data import PATimeSeries
[docs]
class ProcessingResult(ABC):
save_output = False
@abstractmethod
def __add__(self, other):
pass
@property
def attributes(self):
return {}
[docs]
def __init__(self):
self.algorithm_id = ""
self.hdf5_sub_name = ""
@property
@abstractmethod
def raw_data(self):
pass
@abstractmethod
def get_hdf5_group_name(self):
pass
@staticmethod
@abstractmethod
def is_single_instance():
pass
def get_hdf5_sub_name(self):
return self.hdf5_sub_name
def save(self, scan_writer):
scan_writer.add_image(self)
[docs]
class ProcessingAlgorithm(ABC):
[docs]
def __init__(self):
self.children: List["ProcessingAlgorithm"] = []
@abstractmethod
def run(
self, input_data: Any, pa_data: PAData, **kwargs
) -> Optional[Tuple[ProcessingResult, dict, Optional[List[ProcessingResult]]]]:
pass
def add_child(self, child: "ProcessingAlgorithm"):
self.children.append(child)
[docs]
class TimeSeriesProcessingAlgorithm(ProcessingAlgorithm, ABC):
[docs]
def __init__(self):
ProcessingAlgorithm.__init__(self)
@abstractmethod
def run(self, time_series: PATimeSeries, pa_data: PAData, **kwargs):
pass
@staticmethod
@abstractmethod
def get_algorithm_name() -> Union[str, None]:
pass
[docs]
class SpatialProcessingAlgorithm(ProcessingAlgorithm, ABC):
[docs]
def __init__(self, algorithm_id=""):
ProcessingAlgorithm.__init__(self)
self.algorithm_id = algorithm_id
@abstractmethod
def run(self, spatial_data: ImageSequence, pa_data: PAData, **kwargs):
pass
def get_algorithm_id(self) -> Union[str, None]:
return self.algorithm_id