From cd0c715d61812c4e3e2eefddcf92dd659a65fe89 Mon Sep 17 00:00:00 2001 From: Anne Haley Date: Thu, 7 Mar 2024 19:05:05 +0000 Subject: [PATCH] Avoid creating full mask --- sources/zarr/large_image_source_zarr/__init__.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sources/zarr/large_image_source_zarr/__init__.py b/sources/zarr/large_image_source_zarr/__init__.py index 526f30374..9b8ecc4e7 100644 --- a/sources/zarr/large_image_source_zarr/__init__.py +++ b/sources/zarr/large_image_source_zarr/__init__.py @@ -561,12 +561,10 @@ def addTile(self, tile, x=0, y=0, mask=None, axes=None, **kwargs): if not mask: mask = np.full(tile.shape, True) - full_mask = np.full(tuple(new_dims.values()), False) mask_placement_slices = tuple([ slice(placement.get(a, 0), placement.get(a, 0) + mask.shape[i], 1) for i, a in enumerate(axes) ]) - full_mask[mask_placement_slices] = mask current_arrays = dict(self._zarr.arrays()) with self._addLock: @@ -580,9 +578,13 @@ def addTile(self, tile, x=0, y=0, mask=None, axes=None, **kwargs): else: root = current_arrays['root'] root.resize(*tuple(new_dims.values())) - data = root[:] + data = root[mask_placement_slices] + if mask is not None: + np.place(data, mask, tile) + else: + data = tile np.place(data, full_mask, tile) - root[:] = data + root[mask_placement_slices] = data # Edit OME metadata self._zarr.attrs.update({