|
| 1 | +package dev.zarr.zarrjava.ome; |
| 2 | + |
| 3 | +import dev.zarr.zarrjava.ZarrTest; |
| 4 | +import dev.zarr.zarrjava.ome.metadata.Axis; |
| 5 | +import dev.zarr.zarrjava.ome.metadata.CoordinateTransformation; |
| 6 | +import dev.zarr.zarrjava.ome.metadata.Dataset; |
| 7 | +import dev.zarr.zarrjava.ome.metadata.MultiscalesEntry; |
| 8 | +import dev.zarr.zarrjava.store.FilesystemStore; |
| 9 | +import dev.zarr.zarrjava.store.StoreHandle; |
| 10 | +import dev.zarr.zarrjava.v3.Array; |
| 11 | +import dev.zarr.zarrjava.v3.DataType; |
| 12 | +import org.junit.jupiter.api.Test; |
| 13 | + |
| 14 | +import java.util.Arrays; |
| 15 | +import java.util.Collections; |
| 16 | +import java.util.List; |
| 17 | + |
| 18 | +import static org.junit.jupiter.api.Assertions.*; |
| 19 | + |
| 20 | +class OmeZarrUserGuideExamplesTest extends ZarrTest { |
| 21 | + |
| 22 | + private StoreHandle storeHandle(java.nio.file.Path path) throws Exception { |
| 23 | + return new FilesystemStore(path).resolve(); |
| 24 | + } |
| 25 | + |
| 26 | + @Test |
| 27 | + void userGuideReadingExampleWorks() throws Exception { |
| 28 | + StoreHandle imageHandle = storeHandle(TESTDATA.resolve("ome/v0.5")); |
| 29 | + MultiscaleImage image = MultiscaleImage.open(imageHandle); |
| 30 | + |
| 31 | + int scaleCount = image.getScaleLevelCount(); |
| 32 | + List<String> axisNames = image.getAxisNames(); |
| 33 | + dev.zarr.zarrjava.ome.metadata.MultiscalesEntry entry0 = image.getMultiscaleNode(0); |
| 34 | + |
| 35 | + dev.zarr.zarrjava.core.Array s0 = image.openScaleLevel(0); |
| 36 | + ucar.ma2.Array full = s0.read(); |
| 37 | + ucar.ma2.Array subset = s0.read(new long[]{0, 0, 0, 0, 0}, new long[]{1, 1, 4, 8, 8}); |
| 38 | + |
| 39 | + assertTrue(scaleCount > 0); |
| 40 | + assertFalse(axisNames.isEmpty()); |
| 41 | + assertNotNull(entry0); |
| 42 | + assertArrayEquals(new int[]{1, 2, 8, 16, 16}, full.getShape()); |
| 43 | + assertArrayEquals(new int[]{1, 1, 4, 8, 8}, subset.getShape()); |
| 44 | + |
| 45 | + List<String> labels = image.getLabels(); |
| 46 | + assertEquals(Collections.singletonList("nuclei"), labels); |
| 47 | + MultiscaleImage labelImage = image.openLabel(labels.get(0)); |
| 48 | + assertEquals(Arrays.asList("z", "y", "x"), labelImage.getAxisNames()); |
| 49 | + |
| 50 | + StoreHandle plateHandle = storeHandle(TESTDATA.resolve("ome/v0.5_hcs")); |
| 51 | + Plate plate = Plate.open(plateHandle); |
| 52 | + Well well = plate.openWell("A/1"); |
| 53 | + MultiscaleImage wellImage = well.openImage("0"); |
| 54 | + assertEquals(Arrays.asList("t", "c", "z", "y", "x"), wellImage.getAxisNames()); |
| 55 | + } |
| 56 | + |
| 57 | + @Test |
| 58 | + void userGuideWritingExampleWorks() throws Exception { |
| 59 | + StoreHandle out = storeHandle(TESTOUTPUT.resolve("ome_userguide_v05.zarr")); |
| 60 | + MultiscalesEntry ms = new MultiscalesEntry( |
| 61 | + Arrays.asList(new Axis("y", "space", "micrometer"), new Axis("x", "space", "micrometer")), |
| 62 | + Collections.<Dataset>emptyList()); |
| 63 | + dev.zarr.zarrjava.ome.v0_5.MultiscaleImage written = dev.zarr.zarrjava.ome.v0_5.MultiscaleImage.create(out, ms); |
| 64 | + |
| 65 | + written.createScaleLevel( |
| 66 | + "s0", |
| 67 | + Array.metadataBuilder() |
| 68 | + .withShape(1024, 1024) |
| 69 | + .withChunkShape(256, 256) |
| 70 | + .withDataType(DataType.UINT16) |
| 71 | + .build(), |
| 72 | + Collections.singletonList(CoordinateTransformation.scale(Arrays.asList(1.0, 1.0)))); |
| 73 | + written.createScaleLevel( |
| 74 | + "s1", |
| 75 | + Array.metadataBuilder() |
| 76 | + .withShape(512, 512) |
| 77 | + .withChunkShape(256, 256) |
| 78 | + .withDataType(DataType.UINT16) |
| 79 | + .build(), |
| 80 | + Collections.singletonList(CoordinateTransformation.scale(Arrays.asList(2.0, 2.0)))); |
| 81 | + |
| 82 | + MultiscaleImage reopened = MultiscaleImage.open(out); |
| 83 | + assertInstanceOf(dev.zarr.zarrjava.ome.v0_5.MultiscaleImage.class, reopened); |
| 84 | + assertEquals(2, reopened.getScaleLevelCount()); |
| 85 | + assertEquals("s0", reopened.getMultiscaleNode(0).datasets.get(0).path); |
| 86 | + assertEquals("s1", reopened.getMultiscaleNode(0).datasets.get(1).path); |
| 87 | + assertEquals(Arrays.asList(2.0, 2.0), |
| 88 | + reopened.getMultiscaleNode(0).datasets.get(1).coordinateTransformations.get(0).scale); |
| 89 | + } |
| 90 | +} |
0 commit comments