From ce07a3333920de29d40ccb675792a43d6a66b52d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Al=C3=A1n=20Mu=C3=B1oz?= <alan.munoz@ed.ac.uk>
Date: Wed, 4 Jan 2023 13:55:36 +0000
Subject: [PATCH] [WIP]feat(meta): bring back default get_data_lazy

---
 src/aliby/io/image.py | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/src/aliby/io/image.py b/src/aliby/io/image.py
index 2f6132d5..35d454d7 100644
--- a/src/aliby/io/image.py
+++ b/src/aliby/io/image.py
@@ -332,3 +332,30 @@ class UnsafeImage(Image):
         except Exception as e:
             print(f"ERROR: Failed fetching image from server: {e}")
             self.conn.connect(False)
+
+
+def get_data_lazy(image) -> da.Array:
+    """
+    Get 5D dask array, with delayed reading from OMERO image.
+    """
+    nt, nc, nz, ny, nx = [getattr(image, f"getSize{x}")() for x in "TCZYX"]
+    pixels = image.getPrimaryPixels()
+    dtype = PIXEL_TYPES.get(pixels.getPixelsType().value, None)
+    # using dask
+    get_plane = delayed(lambda idx: pixels.getPlane(*idx))
+
+    def get_lazy_plane(zct):
+        return da.from_delayed(get_plane(zct), shape=(ny, nx), dtype=dtype)
+
+    # 5D stack: TCZXY
+    t_stacks = []
+    for t in range(nt):
+        c_stacks = []
+        for c in range(nc):
+            z_stack = []
+            for z in range(nz):
+                z_stack.append(get_lazy_plane((z, c, t)))
+            c_stacks.append(da.stack(z_stack))
+        t_stacks.append(da.stack(c_stacks))
+
+    return da.stack(t_stacks)
-- 
GitLab