Skip to content

Commit bd25743

Browse files
authored
Ome zarr followup (#68)
* add unified getOmeroMetadata and getBioformats2rawLayout for all versions * change type of consolidated_metadata to Object * improve performance on Array.read (less allocation and memory overhead) * fix test openSceneExample1AffinePathBetweenInstruments
1 parent c1403b3 commit bd25743

7 files changed

Lines changed: 36 additions & 14 deletions

File tree

src/main/java/dev/zarr/zarrjava/core/Array.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,10 @@ public ucar.ma2.Array read(final long[] offset, final long[] shape, final boolea
396396

397397
final ucar.ma2.Array outputArray = ucar.ma2.Array.factory(metadata.dataType().getMA2DataType(),
398398
Utils.toIntArray(shape));
399+
final Object parsedFillValue = metadata.parsedFillValue();
400+
if (parsedFillValue != null) {
401+
MultiArrayUtils.fill(outputArray, parsedFillValue);
402+
}
399403
Stream<long[]> chunkStream = Arrays.stream(IndexingUtils.computeChunkCoords(metadata.shape, chunkShape, offset, shape));
400404
if (parallel) {
401405
chunkStream = chunkStream.parallel();
@@ -408,17 +412,13 @@ public ucar.ma2.Array read(final long[] offset, final long[] shape, final boolea
408412
shape
409413
);
410414

411-
if (chunkIsInArray(chunkCoords)) {
412-
MultiArrayUtils.copyRegion(metadata.allocateFillValueChunk(),
413-
chunkProjection.chunkOffset, outputArray, chunkProjection.outOffset,
414-
chunkProjection.shape
415-
);
416-
}
417-
418415
final String[] chunkKeys = metadata.chunkKeyEncoding().encodeChunkKey(chunkCoords);
419416
final StoreHandle chunkHandle = storeHandle.resolve(chunkKeys);
420417

421418
if (codecPipeline.supportsPartialDecode()) {
419+
if (!chunkHandle.exists()) {
420+
return;
421+
}
422422
final ucar.ma2.Array chunkArray = codecPipeline.decodePartial(chunkHandle,
423423
Utils.toLongArray(chunkProjection.chunkOffset), chunkProjection.shape);
424424
MultiArrayUtils.copyRegion(chunkArray, new int[metadata.ndim()], outputArray,

src/main/java/dev/zarr/zarrjava/experimental/ome/MultiscaleImage.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import dev.zarr.zarrjava.ZarrException;
44
import dev.zarr.zarrjava.core.Node;
55
import dev.zarr.zarrjava.experimental.ome.metadata.MultiscalesEntry;
6+
import dev.zarr.zarrjava.experimental.ome.metadata.OmeroMetadata;
67
import dev.zarr.zarrjava.store.StoreHandle;
78
import dev.zarr.zarrjava.utils.Utils;
89

10+
import javax.annotation.Nullable;
911
import java.io.IOException;
1012
import java.util.ArrayList;
1113
import java.util.Collections;
@@ -37,6 +39,18 @@ public interface MultiscaleImage {
3739
*/
3840
int getScaleLevelCount() throws ZarrException;
3941

42+
/**
43+
* Returns the OmeroMetadata if present, or null if not.
44+
*/
45+
@Nullable
46+
OmeroMetadata getOmeroMetadata();
47+
48+
/**
49+
* Returns the bioformats2raw.layout property if present, or null if not
50+
*/
51+
@Nullable
52+
Integer getBioformats2rawLayout();
53+
4054
/**
4155
* Returns the axis names of the first multiscale entry.
4256
*/

src/main/java/dev/zarr/zarrjava/experimental/ome/v0_4/MultiscaleImage.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public final class MultiscaleImage extends OmeV2Group implements MultiscalesMeta
3030
@Nullable
3131
private OmeroMetadata omeroMetadata;
3232
@Nullable
33-
private Integer bioformats2rawLayout;
33+
private final Integer bioformats2rawLayout;
3434

3535
private MultiscaleImage(
3636
@Nonnull StoreHandle storeHandle,
@@ -83,6 +83,7 @@ public dev.zarr.zarrjava.store.StoreHandle getStoreHandle() {
8383
return this.storeHandle;
8484
}
8585

86+
@Override
8687
@Nullable
8788
public OmeroMetadata getOmeroMetadata() {
8889
return omeroMetadata;
@@ -93,6 +94,7 @@ public void setOmeroMetadata(@Nullable OmeroMetadata omeroMetadata) throws IOExc
9394
persistAttributes();
9495
}
9596

97+
@Override
9698
@Nullable
9799
public Integer getBioformats2rawLayout() {
98100
return bioformats2rawLayout;

src/main/java/dev/zarr/zarrjava/experimental/ome/v0_5/MultiscaleImage.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import dev.zarr.zarrjava.v3.GroupMetadata;
1414

1515
import javax.annotation.Nonnull;
16+
import javax.annotation.Nullable;
1617
import java.io.IOException;
1718
import java.util.Collections;
1819
import java.util.List;
@@ -68,12 +69,14 @@ public MultiscalesEntry getMultiscalesEntry(int i) throws ZarrException {
6869
return omeMetadata.multiscales.get(i);
6970
}
7071

71-
@javax.annotation.Nullable
72+
@Override
73+
@Nullable
7274
public dev.zarr.zarrjava.experimental.ome.metadata.OmeroMetadata getOmeroMetadata() {
7375
return omeMetadata.omero;
7476
}
7577

76-
@javax.annotation.Nullable
78+
@Override
79+
@Nullable
7780
public Integer getBioformats2rawLayout() {
7881
return omeMetadata.bioformats2rawLayout;
7982
}

src/main/java/dev/zarr/zarrjava/experimental/ome/v0_6/MultiscaleImage.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import dev.zarr.zarrjava.v3.GroupMetadata;
1919

2020
import javax.annotation.Nonnull;
21+
import javax.annotation.Nullable;
2122
import java.io.IOException;
2223
import java.util.ArrayList;
2324
import java.util.Collections;
@@ -85,12 +86,14 @@ public MultiscalesEntry getMultiscalesEntry(int i) throws ZarrException {
8586
return omeMetadata.multiscales.get(i);
8687
}
8788

88-
@javax.annotation.Nullable
89+
@Override
90+
@Nullable
8991
public dev.zarr.zarrjava.experimental.ome.metadata.OmeroMetadata getOmeroMetadata() {
9092
return omeMetadata.omero;
9193
}
9294

93-
@javax.annotation.Nullable
95+
@Override
96+
@Nullable
9497
public Integer getBioformats2rawLayout() {
9598
return omeMetadata.bioformats2rawLayout;
9699
}

src/main/java/dev/zarr/zarrjava/v3/GroupMetadata.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public final class GroupMetadata extends dev.zarr.zarrjava.core.GroupMetadata {
1717
@JsonProperty("node_type")
1818
public final String nodeType = "group";
1919
@JsonProperty("consolidated_metadata")
20-
public final String consolidatedMetadata = null;
20+
public final Object consolidatedMetadata = null;
2121

2222
@Nullable
2323
public final Attributes attributes;

src/test/java/dev/zarr/zarrjava/experimental/ome/OmeZarrSceneV06Test.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ void createAndReopenScene() throws Exception {
144144
void openSceneExample1AffinePathBetweenInstruments() throws Exception {
145145
dev.zarr.zarrjava.experimental.ome.v0_6.Scene scene =
146146
dev.zarr.zarrjava.experimental.ome.v0_6.Scene.openScene(new FilesystemStore(V06_SCENE_EXAMPLE1).resolve());
147-
assertEquals(Arrays.asList("sampleA_instrument1", "sampleA_instrument2"), scene.listImageNodes());
147+
assertEquals(new HashSet<>(Arrays.asList("sampleA_instrument1", "sampleA_instrument2")), new HashSet<>(scene.listImageNodes()));
148148
assertEquals(1, scene.getSceneMetadata().coordinateTransformations.size());
149149
dev.zarr.zarrjava.experimental.ome.v0_6.metadata.transform.CoordinateTransformation ct =
150150
scene.getSceneMetadata().coordinateTransformations.get(0);

0 commit comments

Comments
 (0)