Skip to content
Snippets Groups Projects
Commit ebc8a4bd authored by Christopher Randolph Rhodes's avatar Christopher Randolph Rhodes
Browse files

Filters process only during initial construction of DataFrame

parent 3e8ca3db
No related branches found
No related tags found
No related merge requests found
......@@ -123,7 +123,7 @@ class TestZStackDerivedDataProducts(unittest.TestCase):
id_map = get_label_ids(self.seg_mask)
roiset = RoiSet(id_map, self.stack_ch_pa, params=RoiSetMetaParams(mask_type='boxes'))
df = roiset.get_df(filters=None)
df = roiset.get_df()
from model_server.extensions.chaeo.zmask import project_stack_from_focal_points
......
......@@ -67,13 +67,16 @@ class RoiSet(object):
self.acc_obj_ids = acc_obj_ids
self.acc_raw = acc_raw
self._df = self.make_df(self.acc_raw, self.acc_obj_ids)
self._df = self.filter_df(
self.make_df(self.acc_raw, self.acc_obj_ids),
params.filters,
)
# remaining zmask_meta write ops
self.zmask_meta, _, self.interm = build_zmask_from_object_mask(
acc_obj_ids,
acc_raw,
self.get_df(filters=params.filters),
self.get_df(),
params=params,
)
......@@ -100,7 +103,8 @@ class RoiSet(object):
df['zi'] = df['intensity_mean'].round().astype('int')
return df
def get_df(self, filters: RoiFilter = None) -> pd.DataFrame:
@staticmethod
def filter_df(df: pd.DataFrame, filters: RoiFilter = None) -> pd.DataFrame:
query_str = 'label > 0' # always true
if filters is not None: # parse filters
for k, val in filters.dict(exclude_unset=True).items():
......@@ -110,7 +114,10 @@ class RoiSet(object):
assert vmin >= 0
query_str = query_str + f' & {k} > {vmin} & {k} < {vmax}'
# df.loc[df.query(query_str).index, 'keeper'] = True
return self._df.loc[self._df.query(query_str).index, :]
return df.loc[df.query(query_str).index, :]
def get_df(self) -> pd.DataFrame:
return self._df
def add_df_col(self, name, se: pd.Series) -> None:
self._df[name] = se
......@@ -160,7 +167,7 @@ class RoiSet(object):
def get_slices(self):
return [zm.slice for zm in self.zmask_meta]
def get_zmask(self, mask_type='boxes', filters: RoiFilter = None):
def get_zmask(self, mask_type='boxes'):
"""
Return a mask of same dimensionality as raw data
......@@ -174,7 +181,7 @@ class RoiSet(object):
# make an object map where label is replaced by focus position in stack and background is -1
lut = np.zeros(lamap.max() + 1) - 1
df = self.get_df(filters=filters)
df = self.get_df()
lut[df.label] = df.zi
if mask_type == 'contours':
......@@ -197,7 +204,7 @@ class RoiSet(object):
return zi_st
def classify_by(self, channel, object_classification_model: InstanceSegmentationModel, filters: RoiFilter = None):
def classify_by(self, channel, object_classification_model: InstanceSegmentationModel, ):
# adds a column to self._df
# do this on a patch basis, i.e. only one object per frame
obmap_patches = object_classification_model.label_instance_class(
......@@ -209,7 +216,7 @@ class RoiSet(object):
om = np.zeros(lamap.shape, dtype=lamap.dtype)
# self.df['instance_class'] = np.nan
df = self.get_df(filters=filters)
df = self.get_df()
idx = df.index
se = pd.Series(data=np.nan, index=idx)
......
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