Changeset 4041


Ignore:
Timestamp:
05/14/08 09:52:03 (12 years ago)
Author:
melissa
Message:

Fixed bug in parsing UUID filenames. UUIDs are still not fully supported, but all of our OME-TIFF datasets work now.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/in/OMETiffReader.java

    r3969 r4041  
    7474  private Hashtable[][] usedIFDs; 
    7575  private Hashtable keyMetadata, temporaryKeyMetadata; 
     76  private String directory; 
    7677 
    7778  // -- Constructor -- 
     
    107108    tempIfdCount = new Vector(); 
    108109 
     110    Location l = new Location(currentId).getAbsoluteFile().getParentFile(); 
     111    directory = l.getAbsolutePath(); 
     112    if (!directory.endsWith(File.separator)) directory += File.separator; 
     113 
    109114    try { 
    110115      SAXParser parser = SAX_FACTORY.newSAXParser(); 
     
    130135    // look for additional files in the dataset 
    131136    Vector files = new Vector(); 
    132     Location l = new Location(currentId).getAbsoluteFile().getParentFile(); 
    133137    String[] fileList = new File(currentId).exists() ? l.list() : 
    134138      (String[]) Location.getIdMap().keySet().toArray(new String[0]); 
     
    214218    } 
    215219 
    216     if (!files.contains(currentId)) files.add(currentId); 
    217  
    218220    // parse grouped files 
    219221 
     
    312314        } 
    313315        else core.imageCount[i] = core.sizeZ[i] * core.sizeT[i]; 
     316      } 
     317 
     318      if (core.imageCount[i] == core.sizeZ[i] * core.sizeT[i] && 
     319        core.sizeC[i] > 1) 
     320      { 
     321        core.rgb[i] = true; 
    314322      } 
    315323    } 
     
    419427    private int imageCount = 0; 
    420428    private boolean foundDescription = false, foundDate = false; 
     429    private boolean foundUUID = false; 
    421430    private boolean minimal; 
     431    private int currentIFD, ifdCount; 
    422432 
    423433    public OMETiffHandler(boolean minimal) { 
     
    470480      else if (qName.equals("Description")) { 
    471481        foundDescription = true; 
     482      } 
     483      else if (qName.equals("UUID")) { 
     484        foundUUID = true; 
     485 
     486        if (usedFiles != null && fileMap != null) { 
     487          String filename = directory + attributes.getValue("FileName"); 
     488          int pos = -1; 
     489          for (int q=0; q<usedFiles.length; q++) { 
     490            if (usedFiles[q].equals(filename)) { 
     491              pos = q; 
     492              break; 
     493            } 
     494          } 
     495          fileMap[currentSeries][currentIFD] = pos; 
     496          for (int i=1; i<ifdCount; i++) { 
     497            fileMap[currentSeries][currentIFD + i] = pos; 
     498          } 
     499        } 
    472500      } 
    473501      else if (qName.equals("Pixels")) { 
     
    553581      else if (qName.equals("TiffData")) { 
    554582        if (minimal) return; 
    555         String uuid = attributes.getValue("UUID"); 
    556583        String ifd = attributes.getValue("IFD"); 
    557         if (uuid != null) { 
    558           uuids = true; 
    559           if (planeUUIDs == null) planeUUIDs = new Vector(); 
    560           int ndx = Integer.parseInt(ifd); 
    561           if (ndx < planeUUIDs.size()) planeUUIDs.setElementAt(uuid, ndx); 
    562           else { 
    563             int diff = ndx - planeUUIDs.size(); 
    564             for (int i=0; i<diff; i++) planeUUIDs.add(""); 
    565             planeUUIDs.add(uuid); 
    566           } 
    567         } 
    568584        String numPlanes = attributes.getValue("NumPlanes"); 
    569585        String z = attributes.getValue("FirstZ"); 
     
    601617          sizeZ * sizeC * sizeT, Integer.parseInt(z), Integer.parseInt(c), 
    602618          Integer.parseInt(t)); 
     619         currentIFD = idx; 
     620         ifdCount = Integer.parseInt(numPlanes); 
    603621 
    604622        if (tempIfdMap != null) { 
     
    619637          y.setElementAt(new Integer(0), idx); 
    620638 
    621           for (int i=1; i<Integer.parseInt(numPlanes); i++) { 
     639          for (int i=1; i<ifdCount; i++) { 
    622640            if (idx + i < v.size()) { 
    623641              v.setElementAt(new Integer(Integer.parseInt(ifd) + i), idx + i); 
     
    647665          ifdMap[currentSeries][idx] = Integer.parseInt(ifd); 
    648666          fileMap[currentSeries][idx] = currentFile; 
    649           for (int i=1; i<Integer.parseInt(numPlanes); i++) { 
     667          for (int i=1; i<ifdCount; i++) { 
    650668            if (idx + i < ifdMap[currentSeries].length) { 
    651669              ifdMap[currentSeries][idx + i] = ifdMap[currentSeries][idx] + i; 
Note: See TracChangeset for help on using the changeset viewer.