diff --git a/model_server/base/accessors.py b/model_server/base/accessors.py index 7f2f74d7767d0c3d8851ffa13d586e78ebbefb7d..64a9d6832d07dc0a79a77fd01fe3a9768ad31221 100644 --- a/model_server/base/accessors.py +++ b/model_server/base/accessors.py @@ -73,6 +73,9 @@ class GenericImageDataAccessor(ABC): def get_z_argmax(self): return self.apply(lambda x: x.argmax(axis=self.get_axis('Z'))) + def get_focus_vector(self): + return self.data.sum(axis=(0, 1, 2)) + @property def data_xy(self) -> np.ndarray: if not self.chroma == 1 and self.nz == 1: diff --git a/tests/base/test_accessors.py b/tests/base/test_accessors.py index 452cb3c09ff8da94c1c9a0b01a8b50a6919534d0..9bb3b7a8c5a50a4f9aedc1818df3febc2590eaa3 100644 --- a/tests/base/test_accessors.py +++ b/tests/base/test_accessors.py @@ -72,6 +72,16 @@ class TestCziImageFileAccess(unittest.TestCase): self.assertEqual(am.shape, (h, w, 1, 1)) self.assertTrue(np.all(am.unique()[0] == range(0, nz))) + def test_get_single_channel_z_series_from_zstack(self): + w = 256 + h = 512 + nc = 4 + nz = 11 + c = 3 + cf = InMemoryDataAccessor(np.random.rand(h, w, nc, nz)) + zs = cf.get_mono(c).get_focus_vector() + self.assertEqual(zs.shape, (nz, )) + def test_get_zi(self): w = 256 h = 512