diff --git a/components/formats-gpl/src/loci/formats/in/ND2Handler.java b/components/formats-gpl/src/loci/formats/in/ND2Handler.java index b2a67bb3895..bd4f093d67e 100644 --- a/components/formats-gpl/src/loci/formats/in/ND2Handler.java +++ b/components/formats-gpl/src/loci/formats/in/ND2Handler.java @@ -513,17 +513,17 @@ else if (qName.equals("uiWidthBytes") || qName.startsWith("uiBpcInMemory") || qN else if ("dPosX".equals(prevElement) && qName.startsWith("item_")) { final Double number = DataTools.parseDouble(value); posX.add(new Length(number, UNITS.MICROMETER)); - metadata.put("X position for position #" + posX.size(), value); } else if ("dPosY".equals(prevElement) && qName.startsWith("item_")) { final Double number = DataTools.parseDouble(value); posY.add(new Length(number, UNITS.MICROMETER)); - metadata.put("Y position for position #" + posY.size(), value); } else if ("dPosZ".equals(prevElement) && qName.startsWith("item_")) { final Double number = DataTools.parseDouble(value); posZ.add(new Length(number, UNITS.MICROMETER)); - metadata.put("Z position for position #" + posZ.size(), value); + } + else if (qName.equals("dPosName") && value != null && !value.isEmpty()) { + posNames.add(value); } else if (qName.startsWith("item_")) { int v = Integer.parseInt(qName.substring(qName.indexOf('_') + 1)); diff --git a/components/formats-gpl/src/loci/formats/in/ND2Reader.java b/components/formats-gpl/src/loci/formats/in/ND2Reader.java index 938c9138273..9cbac0aa891 100644 --- a/components/formats-gpl/src/loci/formats/in/ND2Reader.java +++ b/components/formats-gpl/src/loci/formats/in/ND2Reader.java @@ -113,6 +113,7 @@ public class ND2Reader extends SubResolutionFormatReader { private ArrayList posX; private ArrayList posY; private ArrayList posZ; + private ArrayList posNames = new ArrayList(); private ArrayList exposureTime = new ArrayList(); private Map channelColors; @@ -380,6 +381,7 @@ public void close(boolean fileOnly) throws IOException { objectiveMag = null; objectiveModel = null; exposureTime.clear(); + posNames.clear(); positionCount = 0; } } @@ -2233,6 +2235,11 @@ else if (name.equals("dObjectiveMag")) { else if (name.equals("sObjective")) { objectiveModel = value.toString(); } + else if (name.equals("pPosName") || name.equals("sPosition") || name.equals("dPosName")) { + if (!value.toString().isEmpty()) { + posNames.add(value.toString()); + } + } if (type != 11 && type != 10 && type != 9) { // if not level add global meta addGlobalMeta(name, value); @@ -2257,14 +2264,19 @@ private void populateMetadataStore(ND2Handler handler) throws FormatException String filename = new Location(getCurrentFile()).getName(); if (handler != null) { - ArrayList posNames = handler.getPositionNames(); + ArrayList handlerPosNames = handler.getPositionNames(); + ArrayList effectivePosNames = handlerPosNames.size() > 0 ? handlerPosNames : this.posNames; int nameWidth = String.valueOf(getSeriesCount()).length(); for (int i=0; i 0) { - setSeries(i); for (int n=0; n handlerPosNames = handler.getPositionNames(); + ArrayList seriesPosNames = handlerPosNames.size() > 0 ? handlerPosNames : this.posNames; + if (i < seriesPosNames.size() && !seriesPosNames.get(i).equals("")) { + addSeriesMeta("Position name", seriesPosNames.get(i)); + } + } + else if (i < this.posNames.size() && !this.posNames.get(i).equals("")) { + addSeriesMeta("Position name", this.posNames.get(i)); } String pos = "for position";