From b492bf09946974547615a6511f623d3e5eae3d33 Mon Sep 17 00:00:00 2001 From: Wouter-Michiel Vierdag Date: Mon, 11 Mar 2024 11:09:19 +0100 Subject: [PATCH] initial data model --- src/cell_gater/model/__init__.py | 0 src/cell_gater/model/data_model.py | 57 ++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/cell_gater/model/__init__.py create mode 100644 src/cell_gater/model/data_model.py diff --git a/src/cell_gater/model/__init__.py b/src/cell_gater/model/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/cell_gater/model/data_model.py b/src/cell_gater/model/data_model.py new file mode 100644 index 0000000..53d09c6 --- /dev/null +++ b/src/cell_gater/model/data_model.py @@ -0,0 +1,57 @@ +from dataclasses import dataclass, field +from pathlib import Path +from typing import Sequence + +import pandas as pd +from napari.utils.events import EmitterGroup, Event + + +@dataclass +class DataModel: + events: EmitterGroup = field(init=False, default=None, repr=True) + _samples: Sequence[str] = field(default_factory=list, init=False) + _regionprops_df: pd.DataFrame = field( + default_factory=pd.DataFrame, init=False + ) + _image_paths: Sequence[Path] = field(default_factory=list, init=False) + _mask_paths: Sequence[Path] = field(default_factory=list, init=False) + + def __post_init__(self) -> None: + self.events = EmitterGroup( + source=self, + samples=Event, + regionprops_df=Event, + ) + + @property + def samples(self): + return self._samples + + @samples.setter + def samples(self, samples: Sequence[str]): + self._samples = samples + + @property + def regionprops_df(self): + return self._regionprops_df + + @regionprops_df.setter + def regionprops_df(self, regionprops: pd.DataFrame): + self._regionprops_df = regionprops + self.events.regionprops_df() + + @property + def image_paths(self): + return self._image_paths + + @image_paths.setter + def image_paths(self, image_paths: Sequence[Path]): + self._image_paths = image_paths + + @property + def mask_paths(self): + return self._mask_paths + + @mask_paths.setter + def mask_paths(self, mask_paths: Sequence[Path]): + self._mask_paths = mask_paths