Skip to content

Cannot open version 3 .zarr files #106

@habi

Description

@habi

I'm using dasks to_zarr-function to save large-ish tomographic datasets to .zarr files.

I use something along the lines of VOI[:, :, :, 0].rechunk('auto').to_zarr(row['OutputNameVOI']) to do so.

Recently, the zarr library by default switched to it's version 3 for saving files, see https://zarr.readthedocs.io/en/stable/api/zarr/api/asynchronous/index.html#zarr.api.asynchronous.save, where they several times mention 'default is 3'.
The resulting files cannot be read with your library, and produce the exception pasted below.

If I specify the 'old' output format with CroppedReconstructions.rechunk(chunks=(250,250,250)).to_zarr(Data['OutputNameZarrCrop'][whichscan], zarr_format=2), then all is fine and dandy and I can load the files with ImageJ.
Would it be possible to somehow support the new format directly?

If helpful, I can share .zarr files written with both formats and more information that might be needed.

(Fiji Is Just) ImageJ 2.16.0/1.54p; Java 1.8.0_322 [64-bit]; Linux 6.8.0-57-generic; 1369MB of 268999MB (<1%)
 
org.janelia.saalfeldlab.n5.N5Exception$N5IOException: No container exists at /media/habi/Fast_SSD/REDACTED/REDACTED/B1_01A/B1_01A.rec.cropped_0251-2674_0682-2098_0450-2072.zarr
	at org.janelia.saalfeldlab.n5.zarr.ZarrKeyValueReader.<init>(ZarrKeyValueReader.java:189)
	at org.janelia.saalfeldlab.n5.zarr.ZarrKeyValueReader.<init>(ZarrKeyValueReader.java:152)
	at org.janelia.saalfeldlab.n5.zarr.ZarrKeyValueReader.<init>(ZarrKeyValueReader.java:228)
	at org.janelia.saalfeldlab.n5.universe.N5Factory.openReader(N5Factory.java:408)
	at org.janelia.saalfeldlab.n5.universe.N5Factory.openN5Container(N5Factory.java:604)
	at org.janelia.saalfeldlab.n5.universe.N5Factory.openReader(N5Factory.java:368)
	at org.janelia.saalfeldlab.n5.universe.N5Factory.openReader(N5Factory.java:342)
	at org.janelia.saalfeldlab.n5.ij.N5Importer$N5ViewerReaderFun.apply(N5Importer.java:1070)
	at org.janelia.saalfeldlab.n5.ij.N5Importer$N5ViewerReaderFun.apply(N5Importer.java:1042)
	at org.janelia.saalfeldlab.n5.ui.DatasetSelectorDialog.openContainer(DatasetSelectorDialog.java:665)
	at org.janelia.saalfeldlab.n5.ui.DatasetSelectorDialog.openContainer(DatasetSelectorDialog.java:634)
	at org.janelia.saalfeldlab.n5.ui.DatasetSelectorDialog.lambda$run$2(DatasetSelectorDialog.java:348)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6539)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
	at java.awt.Component.processEvent(Component.java:6304)
	at java.awt.Container.processEvent(Container.java:2239)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2297)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
	at java.awt.Container.dispatchEventImpl(Container.java:2283)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
	at java.awt.EventQueue$4.run(EventQueue.java:733)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
```

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions