Changeset 6886


Ignore:
Timestamp:
09/06/10 10:15:48 (9 years ago)
Author:
melissa
Message:
  • Improved metadata parsing for Prairie datasets.
  • Reverted changes to OMEXMLServiceImpl in r6864.
Location:
trunk/components/bio-formats/src/loci/formats
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/components/bio-formats/src/loci/formats/in/PrairieReader.java

    r6881 r6886  
    4343import loci.formats.tiff.TiffParser; 
    4444 
     45import ome.xml.model.primitives.PositiveInteger; 
     46 
    4547import org.xml.sax.Attributes; 
    4648import org.xml.sax.helpers.DefaultHandler; 
     
    8284  private boolean readXML = false, readCFG = false; 
    8385 
    84   private int zt; 
    8586  private Vector<String> f, gains, offsets; 
    86   private boolean isZ; 
    8787  private double pixelSizeX, pixelSizeY; 
    8888  private String date, laserPower; 
     89 
     90  private String microscopeModel; 
     91  private String objectiveManufacturer; 
     92  private PositiveInteger magnification; 
     93  private String immersion; 
     94  private Double lensNA; 
     95 
     96  private Vector<Double> deltaT = new Vector<Double>(); 
     97  private Vector<Double> positionX = new Vector<Double>(); 
     98  private Vector<Double> positionY = new Vector<Double>(); 
     99  private Vector<Double> positionZ = new Vector<Double>(); 
     100  private Vector<String> channels = new Vector<String>(); 
     101 
     102  private Double zoom; 
    89103 
    90104  // -- Constructor -- 
     
    201215      readXML = false; 
    202216      readCFG = false; 
    203       isZ = false; 
    204       zt = 0; 
    205217      f = gains = offsets = null; 
    206218      pixelSizeX = pixelSizeY = 0; 
    207219      date = laserPower = null; 
     220      microscopeModel = null; 
     221      objectiveManufacturer = null; 
     222      magnification = null; 
     223      immersion = null; 
     224      lensNA = null; 
     225      deltaT.clear(); 
     226      positionX.clear(); 
     227      positionY.clear(); 
     228      positionZ.clear(); 
     229      channels.clear(); 
     230      zoom = null; 
    208231    } 
    209232  } 
     
    238261      gains = new Vector<String>(); 
    239262      offsets = new Vector<String>(); 
    240       zt = 0; 
    241  
    242       String xml = DataTools.readFile(id); 
     263 
     264      String xml = XMLTools.sanitizeXML(DataTools.readFile(id)).trim(); 
    243265 
    244266      if (checkSuffix(id, XML_SUFFIX)) { 
     
    248270      DefaultHandler handler = new PrairieHandler(); 
    249271      XMLTools.parseXML(xml, handler); 
     272 
     273      core[0].sizeT = getImageCount() / (getSizeZ() * getSizeC()); 
    250274 
    251275      if (checkSuffix(id, XML_SUFFIX)) { 
     
    259283        LOGGER.info("Populating metadata"); 
    260284 
    261         if (zt == 0) zt = 1; 
    262  
    263         core[0].sizeZ = isZ ? zt : 1; 
    264         core[0].sizeT = isZ ? 1 : zt; 
    265         core[0].sizeC = getImageCount() / (getSizeZ() * getSizeT()); 
    266         core[0].dimensionOrder = "XYC" + (isZ ? "ZT" : "TZ"); 
     285        if (getSizeZ() == 0) core[0].sizeZ = 1; 
     286        if (getSizeT() == 0) core[0].sizeT = 1; 
     287 
     288        core[0].dimensionOrder = "XYCZT"; 
    267289        core[0].pixelType = FormatTools.UINT16; 
    268290        core[0].rgb = false; 
     
    272294        core[0].falseColor = false; 
    273295 
     296        boolean minimumMetadata = 
     297          getMetadataOptions().getMetadataLevel() == MetadataLevel.MINIMUM; 
     298 
    274299        MetadataStore store = makeFilterMetadata(); 
    275         MetadataTools.populatePixels(store, this); 
     300        MetadataTools.populatePixels(store, this, !minimumMetadata); 
    276301 
    277302        if (date != null) { 
     
    281306        else MetadataTools.setDefaultCreationDate(store, id, 0); 
    282307 
    283         if (getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) { 
     308        if (!minimumMetadata) { 
    284309          // link Instrument and Image 
    285310          String instrumentID = MetadataTools.createLSID("Instrument", 0); 
     
    305330            store.setDetectorSettingsID(detectorID, 0, i); 
    306331            store.setDetectorType(getDetectorType("Other"), 0, i); 
    307           } 
    308  
    309           /* TODO : check if this is correct 
     332            store.setDetectorZoom(zoom, 0, i); 
     333 
     334            if (i < channels.size()) { 
     335              store.setChannelName(channels.get(i), 0, i); 
     336            } 
     337          } 
     338 
     339          for (int i=0; i<getImageCount(); i++) { 
     340            int[] zct = getZCTCoords(i); 
     341            int index = FormatTools.getIndex(getDimensionOrder(), getSizeZ(), 
     342              1, getSizeT(), getImageCount() / getSizeC(), zct[0], 0, zct[2]); 
     343            store.setPlanePositionX(positionX.get(index), 0, i); 
     344            store.setPlanePositionY(positionY.get(index), 0, i); 
     345            store.setPlanePositionZ(positionZ.get(index), 0, i); 
     346          } 
     347 
     348          if (microscopeModel != null) { 
     349            store.setMicroscopeModel(microscopeModel, 0); 
     350          } 
     351 
     352          String objective = MetadataTools.createLSID("Objective", 0, 0); 
     353          store.setObjectiveID(objective, 0, 0); 
     354          store.setImageObjectiveSettingsID(objective, 0); 
     355 
     356          store.setObjectiveNominalMagnification(magnification, 0, 0); 
     357          store.setObjectiveManufacturer(objectiveManufacturer, 0, 0); 
     358          store.setObjectiveImmersion(getImmersion(immersion), 0, 0); 
     359          store.setObjectiveCorrection(getCorrection("Other"), 0, 0); 
     360          store.setObjectiveLensNA(lensNA, 0, 0); 
     361 
    310362          if (laserPower != null) { 
     363            String laser = MetadataTools.createLSID("LightSource", 0 ,0); 
     364            store.setLaserID(laser, 0, 0); 
    311365            store.setLaserPower(new Double(laserPower), 0, 0); 
    312366          } 
    313           */ 
    314367        } 
    315368      } 
     
    375428        date = attributes.getValue("date"); 
    376429      } 
    377       else if (qName.equals("Frame")) zt++; 
    378       else if (qName.equals("Sequence")) { 
    379         isZ = attributes.getValue("type").equals("ZSeries"); 
     430      else if (qName.equals("Frame")) { 
     431        String index = attributes.getValue("index"); 
     432        if (index != null) { 
     433          int zIndex = Integer.parseInt(index); 
     434          if (zIndex > getSizeZ()) core[0].sizeZ++; 
     435        } 
    380436      } 
    381437      else if (qName.equals("File")) { 
     
    388444        } 
    389445        f.add(dir + attributes.getValue("filename")); 
     446 
     447        String ch = attributes.getValue("channel"); 
     448        String channelName = attributes.getValue("channelName"); 
     449        if (channelName == null) channelName = ch; 
     450        if (ch != null) { 
     451          int cIndex = Integer.parseInt(ch); 
     452          if (cIndex > getSizeC() && !channels.contains(channelName)) { 
     453            core[0].sizeC++; 
     454            channels.add(channelName); 
     455          } 
     456        } 
    390457      } 
    391458      else if (qName.equals("Key")) { 
     
    406473          pixelSizeY = Double.parseDouble(value); 
    407474        } 
     475        else if (key.equals("objectiveLens")) { 
     476          String[] tokens = value.split(" "); 
     477          if (tokens.length > 0) { 
     478            objectiveManufacturer = tokens[0]; 
     479          } 
     480          if (tokens.length > 1) { 
     481            String mag = tokens[1].toLowerCase().replaceAll("x", ""); 
     482            magnification = new PositiveInteger(new Integer(mag)); 
     483          } 
     484          if (tokens.length > 2) { 
     485            immersion = tokens[2]; 
     486          } 
     487        } 
     488        else if (key.equals("objectiveLensNA")) { 
     489          lensNA = new Double(value); 
     490        } 
     491        else if (key.equals("imagingDevice")) { 
     492          microscopeModel = value; 
     493        } 
    408494        else if (key.startsWith("pmtGain_")) gains.add(value); 
    409495        else if (key.startsWith("pmtOffset_")) offsets.add(value); 
    410496        else if (key.equals("laserPower_0")) laserPower = value; 
     497        else if (key.equals("positionCurrent_XAxis")) { 
     498          positionX.add(new Double(value)); 
     499        } 
     500        else if (key.equals("positionCurrent_YAxis")) { 
     501          positionY.add(new Double(value)); 
     502        } 
     503        else if (key.equals("positionCurrent_ZAxis")) { 
     504          positionZ.add(new Double(value)); 
     505        } 
     506        else if (key.equals("opticalZoom")) { 
     507          zoom = new Double(value); 
     508        } 
     509        else if (key.equals("bitDepth")) { 
     510          core[0].bitsPerPixel = Integer.parseInt(value); 
     511        } 
    411512      } 
    412513    } 
  • trunk/components/bio-formats/src/loci/formats/services/OMEXMLServiceImpl.java

    r6881 r6886  
    6161 * 
    6262 * <dl><dt><b>Source code:</b></dt> 
    63  * <dd><a href="http://dev.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/services/OMEXMLServiceImpl.java">Trac</a>, 
    64  * <a href="http://dev.loci.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/services/OMEXMLServiceImpl.java">SVN</a></dd></dl> 
     63 * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/src/loci/formats/services/OMEXMLServiceImpl.java">Trac</a>, 
     64 * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/src/loci/formats/services/OMEXMLServiceImpl.java">SVN</a></dd></dl> 
    6565 */ 
    6666public class OMEXMLServiceImpl extends AbstractService implements OMEXMLService 
     
    361361    int annotationIndex = 0; 
    362362    try { 
    363       annotationIndex = omexmlMeta.getCommentAnnotationCount(); 
     363      annotationIndex = omexmlMeta.getListAnnotationCount(); 
    364364    } 
    365365    catch (NullPointerException e) { } 
    366  
    367     String id = MetadataTools.createLSID("Annotation", annotationIndex); 
    368     omexmlMeta.setCommentAnnotationID(id, annotationIndex); 
    369     omexmlMeta.setCommentAnnotationDescription(key, annotationIndex); 
    370     omexmlMeta.setCommentAnnotationValue(value, annotationIndex); 
     366    String listID = MetadataTools.createLSID("Annotation", annotationIndex * 3); 
     367    omexmlMeta.setListAnnotationID(listID, annotationIndex); 
     368    omexmlMeta.setListAnnotationNamespace( 
     369      StructuredAnnotations.NAMESPACE, annotationIndex); 
     370 
     371    int keyIndex = annotationIndex * 2; 
     372    int valueIndex = annotationIndex * 2 + 1; 
     373    String keyID = 
     374      MetadataTools.createLSID("Annotation", annotationIndex * 3 + 1); 
     375    String valueID = 
     376      MetadataTools.createLSID("Annotation", annotationIndex * 3 + 2); 
     377    omexmlMeta.setCommentAnnotationID(keyID, keyIndex); 
     378    omexmlMeta.setCommentAnnotationID(valueID, valueIndex); 
     379    omexmlMeta.setCommentAnnotationValue(key, keyIndex); 
     380    omexmlMeta.setCommentAnnotationValue(value, valueIndex); 
     381    omexmlMeta.setCommentAnnotationNamespace( 
     382      StructuredAnnotations.NAMESPACE, keyIndex); 
     383    omexmlMeta.setCommentAnnotationNamespace( 
     384      StructuredAnnotations.NAMESPACE, valueIndex); 
     385    omexmlMeta.setListAnnotationAnnotationRef(keyID, annotationIndex, 0); 
     386    omexmlMeta.setListAnnotationAnnotationRef(valueID, annotationIndex, 1); 
    371387  } 
    372388 
Note: See TracChangeset for help on using the changeset viewer.