diff --git a/src/main/java/com/glencoesoftware/bioformats2raw/Converter.java b/src/main/java/com/glencoesoftware/bioformats2raw/Converter.java index 020ee3ce..9e1358f5 100644 --- a/src/main/java/com/glencoesoftware/bioformats2raw/Converter.java +++ b/src/main/java/com/glencoesoftware/bioformats2raw/Converter.java @@ -13,7 +13,10 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Callable; @@ -848,10 +851,14 @@ public void saveResolutions(int series) Compression compression = N5Compression.getCompressor(compressionType, compressionParameter); + // fileset level metadata final String pyramidPath = outputPath.resolve(pyramidName).toString(); final N5Writer n5 = fileType.writer(pyramidPath); n5.setAttribute("/", "bioformats2raw.layout", LAYOUT); + // series level metadata + setSeriesLevelMetadata(series, resolutions, n5); + for (int resCounter=0; resCounter> multiscales = + new ArrayList>(); + Map multiscale = new HashMap(); + multiscale.put("version", "0.1"); + multiscales.add(multiscale); + List> datasets = new ArrayList>(); + for (int r = 0; r < resolutions; r++) { + resolutionString = "/" + String.format( + scaleFormatString, getScaleFormatStringArgs(series, r)); + String lastPath = resolutionString.substring(resolutionString.lastIndexOf('/'+1)); + datasets.add(Collections.singletonMap("path", lastPath)); + } + multiscale.put("datasets", datasets); + n5.createGroup(seriesString); + n5.setAttribute(seriesString, "multiscales", multiscales); + } + /** * Takes exception from asynchronous execution and re-throw known exception * types. If the end is reached with no known exception detected, either the diff --git a/src/test/java/com/glencoesoftware/bioformats2raw/test/ZarrTest.java b/src/test/java/com/glencoesoftware/bioformats2raw/test/ZarrTest.java index 1df732c2..7e742267 100644 --- a/src/test/java/com/glencoesoftware/bioformats2raw/test/ZarrTest.java +++ b/src/test/java/com/glencoesoftware/bioformats2raw/test/ZarrTest.java @@ -191,6 +191,27 @@ public void testDefaultLayoutIsSet() throws Exception { Assert.assertEquals(Converter.LAYOUT, layout); } + /** + * Test that multiscales metadata is present. + */ + @Test + public void testMultiscalesMetadata() throws Exception { + input = fake(); + assertTool(); + N5ZarrReader z = + new N5ZarrReader(output.resolve("data.zarr").toString()); + // + List> multiscales = + z.getAttribute("/0", "multiscales", List.class); + Assert.assertEquals(1, multiscales.size()); + Map multiscale = multiscales.get(0); + Assert.assertEquals("0.1", multiscale.get("version")); + List> datasets = + (List>) multiscale.get("datasets"); + Assert.assertTrue(datasets.size() > 0); + Assert.assertEquals("0", datasets.get(0).get("path")); + } + /** * Test alternative dimension order. */