From 4c7509da8573db515afe6c5e46997776f2613127 Mon Sep 17 00:00:00 2001 From: Melissa Linkert Date: Mon, 24 Feb 2025 17:03:45 -0600 Subject: [PATCH] ScanR: populate exposure times even if field positions are missing Fixes #4231. --- .../src/loci/formats/in/ScanrReader.java | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/components/formats-gpl/src/loci/formats/in/ScanrReader.java b/components/formats-gpl/src/loci/formats/in/ScanrReader.java index 64318040bc0..9a4b47982b8 100644 --- a/components/formats-gpl/src/loci/formats/in/ScanrReader.java +++ b/components/formats-gpl/src/loci/formats/in/ScanrReader.java @@ -611,8 +611,13 @@ else if (row1 > row2) { ms.bitsPerPixel = 12; } + // only populate Plane.The* if at least one kind of additional + // plane metadata is available + boolean populatePlanes = deltaT != null || exposures.size() >= getSizeC() || + fieldPositionX != null || fieldPositionY != null; + MetadataStore store = makeFilterMetadata(); - MetadataTools.populatePixels(store, this); + MetadataTools.populatePixels(store, this, populatePlanes); store.setPlateID(MetadataTools.createLSID("Plate", 0), 0); store.setPlateColumns(new PositiveInteger(wellColumns), 0); @@ -688,32 +693,35 @@ else if (row1 > row2) { store.setPixelsPhysicalSizeY(y, i); } + + int field = i % nFields; + int well = i / nFields; if (fieldPositionX != null && fieldPositionY != null) { - int field = i % nFields; - int well = i / nFields; final Length posX = fieldPositionX[field]; final Length posY = fieldPositionY[field]; - + store.setWellSamplePositionX(posX, 0, well, field); store.setWellSamplePositionY(posY, 0, well, field); - for (int c=0; c