Skip to content

Commit 676dfe6

Browse files
Don't set Plane metadata until we know the final plane counts
1 parent 5a00e83 commit 676dfe6

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

components/formats-gpl/src/loci/formats/in/LeicaHandler.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ public class LeicaHandler extends BaseHandler {
120120
private MetadataLevel level;
121121
private int laserCount = 0;
122122

123+
private Map<String, Time> exposureTimes = new HashMap<String, Time>();
124+
private Map<String, Time> deltaT = new HashMap<String, Time>();
125+
123126
// -- Constructor --
124127

125128
public LeicaHandler(MetadataStore store, MetadataLevel level) {
@@ -144,6 +147,10 @@ public LeicaHandler(MetadataStore store, MetadataLevel level) {
144147

145148
public Vector<String> getLutNames() { return lutNames; }
146149

150+
public Map<String, Time> getExposureTimes() { return exposureTimes; }
151+
152+
public Map<String, Time> getDeltaT() { return deltaT; }
153+
147154
// -- DefaultHandler API methods --
148155

149156
@Override
@@ -549,7 +556,7 @@ else if (id.indexOf("WFC") == 1) {
549556
try {
550557
Double exposureTime = DataTools.parseDouble(value);
551558
if (exposureTime != null) {
552-
store.setPlaneExposureTime(new Time(exposureTime, UNITS.SECOND), numDatasets, c);
559+
exposureTimes.put(numDatasets + "-" + c, new Time(exposureTime, UNITS.SECOND));
553560
}
554561
}
555562
catch (IndexOutOfBoundsException e) { }
@@ -878,14 +885,14 @@ else if (qName.equals("TimeStamp") && numDatasets >= 0) {
878885
store.setImageAcquisitionDate(new Timestamp(date), numDatasets);
879886
}
880887
firstStamp = ms;
881-
store.setPlaneDeltaT(new Time(0.0, UNITS.SECOND), numDatasets, count);
888+
deltaT.put(numDatasets + "-" + count, new Time(0.0, UNITS.SECOND));
882889
}
883890
else if (level != MetadataLevel.MINIMUM) {
884891
CoreMetadata coreMeta = core.get(numDatasets);
885892
int nImages = coreMeta.sizeZ * coreMeta.sizeT * coreMeta.sizeC;
886893
if (count < nImages) {
887894
ms -= firstStamp;
888-
store.setPlaneDeltaT(new Time(ms / 1000.0, UNITS.SECOND), numDatasets, count);
895+
deltaT.put(numDatasets + "-" + count, new Time(ms / 1000.0, UNITS.SECOND));
889896
}
890897
}
891898

@@ -897,7 +904,8 @@ else if (qName.equals("RelTimeStamp") && level != MetadataLevel.MINIMUM) {
897904
if (count < nImages) {
898905
Double time = DataTools.parseDouble(attributes.getValue("Time"));
899906
if (time != null) {
900-
store.setPlaneDeltaT(new Time(time, UNITS.SECOND), numDatasets, count++);
907+
deltaT.put(numDatasets + "-" + count, new Time(time, UNITS.SECOND));
908+
count++;
901909
}
902910
}
903911
}

components/formats-gpl/src/loci/formats/in/TCSReader.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.util.Arrays;
3131
import java.util.HashMap;
3232
import java.util.List;
33+
import java.util.Map;
3334

3435
import loci.common.DataTools;
3536
import loci.common.DateTools;
@@ -49,6 +50,7 @@
4950
import loci.formats.tiff.TiffParser;
5051

5152
import ome.units.quantity.Length;
53+
import ome.units.quantity.Time;
5254

5355
/**
5456
* TCSReader is the file format reader for Leica TCS TIFF files and their
@@ -465,6 +467,8 @@ else if (getSizeT() == 1) {
465467
else ms0.sizeZ *= ifds.size();
466468
}
467469

470+
Map<String, Time> exposureTime = null;
471+
Map<String, Time> deltaT = null;
468472
if (xmlFile != null) {
469473
// parse XML metadata
470474

@@ -474,6 +478,8 @@ else if (getSizeT() == 1) {
474478
LeicaHandler handler =
475479
new LeicaHandler(store, getMetadataOptions().getMetadataLevel());
476480
XMLTools.parseXML(xml, handler);
481+
exposureTime = handler.getExposureTimes();
482+
deltaT = handler.getDeltaT();
477483

478484
metadata = handler.getGlobalMetadata();
479485
MetadataTools.merge(handler.getGlobalMetadata(), metadata, "");
@@ -509,6 +515,20 @@ else if (getSizeT() == 1) {
509515
if (sizeZ != null) {
510516
store.setPixelsPhysicalSizeZ(sizeZ, 0);
511517
}
518+
519+
for (int s=0; s<getSeriesCount(); s++) {
520+
setSeries(s);
521+
for (int i=0; i<getImageCount(); i++) {
522+
String key = s + "-" + i;
523+
if (exposureTime != null && exposureTime.containsKey(key)) {
524+
store.setPlaneExposureTime(exposureTime.get(key), s, i);
525+
}
526+
if (deltaT != null && deltaT.containsKey(key)) {
527+
store.setPlaneDeltaT(deltaT.get(key), s, i);
528+
}
529+
}
530+
}
531+
setSeries(0);
512532
}
513533

514534
// -- Helper methods --

0 commit comments

Comments
 (0)