Changeset 3261


Ignore:
Timestamp:
10/11/07 09:49:55 (12 years ago)
Author:
melissa
Message:

Only parse the primary file once.

File:
1 edited

Legend:

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

    r3259 r3261  
    6565  private int[][] ifdMap, fileMap; 
    6666  private boolean lsids, isWiscScan; 
    67   private Hashtable[][] ifdsUsed; 
     67  private Hashtable[][] usedIFDs; 
    6868 
    6969  // -- Constructor -- 
     
    165165    } 
    166166 
     167    // copy temp IFD/file maps 
     168 
     169    for (int i=0; i<tempIfdMap.size(); i++) { 
     170      Vector v = (Vector) tempIfdMap.get(i); 
     171      for (int j=0; j<v.size(); j++) { 
     172        ifdMap[i][j] = ((Integer) v.get(j)).intValue(); 
     173      } 
     174      numIFDs[i] += v.size(); 
     175    } 
     176 
     177    for (int i=0; i<tempFileMap.size(); i++) { 
     178      Vector v = (Vector) tempFileMap.get(i); 
     179      for (int j=0; j<v.size(); j++) { 
     180        fileMap[i][j] = ((Integer) v.get(j)).intValue(); 
     181      } 
     182    } 
     183 
    167184    used = (String[]) files.toArray(new String[0]); 
    168     ifdsUsed = new Hashtable[used.length][]; 
     185    usedIFDs = new Hashtable[used.length][]; 
    169186 
    170187    for (int i=0; i<used.length; i++) { 
     188      if (used[i].endsWith(currentId)) { 
     189        usedIFDs[i] = ifds; 
     190        continue; 
     191      } 
    171192      status("Parsing " + used[i]); 
    172193      currentSeries = -1; 
     
    176197      currentFile = i; 
    177198 
    178       ifdsUsed[i] = TiffTools.getIFDs(new RandomAccessStream(used[i])); 
     199      usedIFDs[i] = TiffTools.getIFDs(new RandomAccessStream(used[i])); 
    179200      String c = (String) 
    180         TiffTools.getIFDValue(ifdsUsed[i][0], TiffTools.IMAGE_DESCRIPTION); 
     201        TiffTools.getIFDValue(usedIFDs[i][0], TiffTools.IMAGE_DESCRIPTION); 
    181202      try { 
    182203        SAXParser parser = SAX_FACTORY.newSAXParser(); 
     
    246267 
    247268    in = new RandomAccessStream(used[fileIndex]); 
    248     TiffTools.getSamples(ifdsUsed[fileIndex][ifd], in, buf); 
     269    TiffTools.getSamples(usedIFDs[fileIndex][ifd], in, buf); 
    249270    in.close(); 
    250271    return swapIfRequired(buf); 
     
    352373        } 
    353374        if (numIFDs != null) { 
    354           numIFDs[currentSeries] += ifdsUsed[currentFile].length; 
     375          numIFDs[currentSeries] += usedIFDs[currentFile].length; 
    355376        } 
    356377 
     
    365386        if (ifd == null || ifd.equals("")) ifd = "0"; 
    366387        if (numPlanes == null || numPlanes.equals("")) { 
    367           if (ifdsUsed != null) numPlanes = "" + ifdsUsed[currentSeries].length; 
     388          if (usedIFDs != null) numPlanes = "" + usedIFDs[currentSeries].length; 
    368389          else numPlanes = "" + ifds.length; 
    369390        } 
     
    373394 
    374395        try { 
    375           if (ifdsUsed != null && ifdsUsed[currentFile] != null) { 
     396          if (usedIFDs != null && usedIFDs[currentFile] != null) { 
    376397            int f = Integer.parseInt(ifd); 
    377             int x = (int) TiffTools.getImageWidth(ifdsUsed[currentFile][f]); 
    378             int y = (int) TiffTools.getImageLength(ifdsUsed[currentFile][f]); 
     398            int x = (int) TiffTools.getImageWidth(usedIFDs[currentFile][f]); 
     399            int y = (int) TiffTools.getImageLength(usedIFDs[currentFile][f]); 
    379400            if (x != core.sizeX[currentSeries]) { 
    380401              LogTools.println("Mismatched width: got " + 
     
    410431          for (int i=1; i<Integer.parseInt(numPlanes); i++) { 
    411432            if (v.size() > idx + i) { 
    412               v.setElementAt(new Integer(Integer.parseInt(ifd) + 1), idx + i); 
     433              v.setElementAt(new Integer(Integer.parseInt(ifd) + i), idx + i); 
    413434            } 
    414             else v.add(new Integer(Integer.parseInt(ifd) + 1)); 
     435            else v.add(new Integer(Integer.parseInt(ifd) + i)); 
    415436            if (y.size() > idx + i) y.setElementAt(new Integer(0), idx + i); 
    416437            else y.add(new Integer(0)); 
Note: See TracChangeset for help on using the changeset viewer.