From b2fa4120f3f056c3bf1f306a80b058b310adc6ce Mon Sep 17 00:00:00 2001
From: Christian Kento Rasmussen <christian.kento@gmail.com>
Date: Tue, 28 May 2024 13:58:59 +0200
Subject: [PATCH] created function to save to zarr

---
 qim3d/io/saving.py | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/qim3d/io/saving.py b/qim3d/io/saving.py
index 64a6a1ca..b163c312 100644
--- a/qim3d/io/saving.py
+++ b/qim3d/io/saving.py
@@ -24,12 +24,14 @@ Example:
 import datetime
 import os
 
+import dask.array as da
 import h5py
 import nibabel as nib
 import numpy as np
 import PIL
 import pydicom
 import tifffile
+import zarr
 from pydicom.dataset import FileDataset, FileMetaDataset
 from pydicom.uid import UID
 
@@ -234,6 +236,21 @@ class DataSaver:
         ds.PixelData = data_bytes
 
         ds.save_as(path)
+
+    def save_to_zarr(self, path, data):
+        """ Saves a Dask array to a Zarr array on disk.
+
+        Args:
+            path (str): The path to the Zarr array on disk.
+            data (dask.array): The Dask array to be saved to disk.
+
+        Returns:
+            zarr.core.Array: The Zarr array saved on disk.
+        """
+        assert isinstance(data, da.Array), 'data must be a dask array'
+
+        # forces compute when saving to zarr
+        da.to_zarr(data, path, compute=True, overwrite=self.replace, compressor=zarr.Blosc(cname='zstd', clevel=3, shuffle=2))
         
     
     def save_PIL(self, path, data):
@@ -330,6 +347,8 @@ class DataSaver:
                         return self.save_vol(path, data)
                     elif path.endswith((".dcm",".DCM")):
                         return self.save_dicom(path, data)
+                    elif path.endswith((".zarr")):
+                        return self.save_to_zarr(path, data)
                     elif path.endswith((".jpeg",".jpg", ".png")):
                         return self.save_PIL(path, data)
                     else:
-- 
GitLab