diff --git a/src/napari_segment/_reader.py b/src/napari_segment/_reader.py
index 61ec06b431f98c8b7c53b6b50e98a94e4ee20ee9..f0f6df92481b96c8108fabfff4c26ef37dfcb484 100644
--- a/src/napari_segment/_reader.py
+++ b/src/napari_segment/_reader.py
@@ -5,6 +5,10 @@ It implements the Reader specification, but your plugin may choose to
implement multiple readers or even other plugin contributions. see:
https://napari.org/plugins/stable/guides.html#readers
"""
+import json
+import os
+
+import dask
import nd2
import numpy as np
@@ -33,28 +37,62 @@ def napari_get_reader(path):
if path.endswith(".nd2"):
return read_nd2
+ if path.endswith(".zarr"):
+ return read_zarr
+
# otherwise we return the *function* that can read ``path``.
return reader_function
+def read_zarr(path):
+ print(f"reading {path}")
+ try:
+ attrs = json.load(open(os.path.join(path, ".zattrs")))
+ info = attrs["multiscales"]["multiscales"][0]
+ channel_axis = info["channel_axis"]
+ print(f"found channel axis {channel_axis}")
+ dataset_paths = [
+ os.path.join(path, d["path"]) for d in info["datasets"]
+ ]
+ datasets = [dask.array.from_zarr(p) for p in dataset_paths]
+ except Exception as e:
+ raise e
+ return [
+ (
+ datasets,
+ {
+ "channel_axis": channel_axis,
+ "colormap": ["gray", "inferno"],
+ "contrast_limits": [(0, 65000), (0, 6000)],
+ },
+ "image",
+ )
+ ]
+
+
def read_nd2(path):
print(f"opening {path}")
data = nd2.ND2File(path)
+ print(data.sizes)
ddata = data.to_dask()
+ # colormap = ["gray", "green"]
try:
channel_axis = list(data.sizes.keys()).index("C")
except ValueError:
+ print(f"No channels, {data.sizes}")
channel_axis = None
+ # colormap = ["gray"]
return [
(
ddata,
- dict(
- channel_axis=channel_axis,
- name=[ch.channel.name for ch in data.metadata.channels],
- colormap=["gray", "green"],
- # scale=data.metadata.channels[0].volume.axesCalibration[:]
- # contrast_limits=[(8500, 35000), (150, 20000)],
- ),
+ {"channel_axis": channel_axis},
+ # dict(
+ # channel_axis=channel_axis,
+ # name=[ch.channel.name for ch in data.metadata.channels],
+ # colormap=colormap,
+ # scale=data.metadata.channels[0].volume.axesCalibration[:]
+ # contrast_limits=[(8500, 35000), (150, 20000)],
+ # ),
"image",
)
]