From d962a3de02c7617a3936e312da386d65cdf775d9 Mon Sep 17 00:00:00 2001
From: Christopher Rhodes <christopher.rhodes@embl.de>
Date: Sun, 22 Oct 2023 09:47:06 +0200
Subject: [PATCH] Merged in pixel scale property

---
 model_server/accessors.py | 17 +++++++----------
 tests/test_accessors.py   |  3 ++-
 2 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/model_server/accessors.py b/model_server/accessors.py
index caec8ddf..1bb5b6b4 100644
--- a/model_server/accessors.py
+++ b/model_server/accessors.py
@@ -48,7 +48,7 @@ class GenericImageDataAccessor(ABC):
 
     @property
     def pixel_scale_in_micrometers(self):
-        return None
+        return {}
 
     @property
     def dtype(self):
@@ -176,15 +176,12 @@ class CziImageFileAccessor(GenericImageFileAccessor):
 
     @property
     def pixel_scale_in_micrometers(self):
-        meta_sc_str = self.czifile.metadata(raw=False)['ImageDocument']['Metadata']['ImageScaling']['ImagePixelSize']
-        meta_mags = self.czifile.metadata(raw=False)['ImageDocument']['Metadata']['ImageScaling']['ScalingComponent']
-        sc_xy = list(map(
-            float,
-            meta_sc_str.split(',')
-        ))
-        assert sc_xy[0] == sc_xy[1]
-        mags = [float(m['Magnification']) for m in meta_mags]
-        return sc_xy[0] / np.product(mags)
+        scale_meta = self.czifile.metadata(raw=False)['ImageDocument']['Metadata']['Scaling']['Items']['Distance']
+        sc = {}
+        for m in scale_meta:
+            if m['DefaultUnitFormat'].encode() == b'\xc2\xb5m' and m['Id'] in self.shape_dict.keys():  # literal mu-m
+                sc[m['Id']] = m['Value'] * 1e6
+        return sc
 
 
 def write_accessor_data_to_file(fpath: Path, accessor: GenericImageDataAccessor, mkdir=True) -> bool:
diff --git a/tests/test_accessors.py b/tests/test_accessors.py
index 1a465dfb..557970ea 100644
--- a/tests/test_accessors.py
+++ b/tests/test_accessors.py
@@ -114,4 +114,5 @@ class TestCziImageFileAccess(unittest.TestCase):
 
     def test_read_in_pixel_scale_from_czi(self):
         cf = CziImageFileAccessor(czifile['path'])
-        self.assertAlmostEqual(cf.pixel_scale_in_micrometers, czifile['um_per_pixel'], places=3)
\ No newline at end of file
+        pxs = cf.pixel_scale_in_micrometers
+        self.assertAlmostEqual(pxs['X'], czifile['um_per_pixel'], places=3)
\ No newline at end of file
-- 
GitLab