Skip to content

Commit c2b6cac

Browse files
committed
add OmeZarrUserGuideExamplesTest
1 parent 7e5d2ba commit c2b6cac

2 files changed

Lines changed: 93 additions & 4 deletions

File tree

USERGUIDE-OME-ZARR.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ Navigation:
5252
- `Plate.openWell(String rowColPath)` (for example `"A/1"`)
5353
- `Well.openImage(String path)` (for example `"0"`)
5454

55-
## Version-specific typed metadata (when needed)
55+
## Version-specific typed metadata
5656

5757
If you need the raw version-specific metadata model instead of normalized `MultiscalesEntry`:
5858

@@ -72,7 +72,6 @@ import dev.zarr.zarrjava.store.StoreHandle;
7272
StoreHandle imageHandle = new FilesystemStore("/data/ome/image.zarr").resolve();
7373
MultiscaleImage image = MultiscaleImage.open(imageHandle);
7474

75-
// Drive viewer model
7675
int scaleCount = image.getScaleLevelCount();
7776
java.util.List<String> axisNames = image.getAxisNames();
7877
dev.zarr.zarrjava.ome.metadata.MultiscalesEntry entry0 = image.getMultiscaleNode(0);
@@ -89,7 +88,7 @@ if (!labels.isEmpty()) {
8988
StoreHandle plateHandle = new FilesystemStore("/data/ome/plate.zarr").resolve();
9089
Plate plate = Plate.open(plateHandle);
9190
Well well = plate.openWell("A/1");
92-
MultiscaleImage fov = well.openImage("0");
91+
MultiscaleImage wellImage = well.openImage("0");
9392
```
9493

9594
## Write example
@@ -111,7 +110,7 @@ import java.util.Collections;
111110
StoreHandle out = new FilesystemStore("/tmp/ome_v05.zarr").resolve();
112111
MultiscalesEntry ms = new MultiscalesEntry(
113112
Arrays.asList(new Axis("y", "space", "micrometer"), new Axis("x", "space", "micrometer")),
114-
Collections.emptyList()
113+
Collections.<Dataset>emptyList());
115114
);
116115
dev.zarr.zarrjava.ome.v0_5.MultiscaleImage written = dev.zarr.zarrjava.ome.v0_5.MultiscaleImage.create(out, ms);
117116

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
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

Comments
 (0)