Changeset 5148


Ignore:
Timestamp:
06/02/09 16:25:44 (11 years ago)
Author:
melissa
Message:

Fix for Metamorph datasets with multiple stage positions.

File:
1 edited

Legend:

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

    r5142 r5148  
    328328      if (seriesCount == 1) stks[0] = new String[numFiles]; 
    329329      else if (differentZs) { 
    330         stks[0] = new String[channelsInFirstSeries * tc]; 
    331         stks[1] = new String[(cc - channelsInFirstSeries) * tc]; 
     330        int stages = nstages == 0 ? 1 : nstages; 
     331        for (int i=0; i<stages; i++) { 
     332          stks[i * 2] = new String[channelsInFirstSeries * tc]; 
     333          stks[i * 2 + 1] = new String[(cc - channelsInFirstSeries) * tc]; 
     334        } 
    332335      } 
    333336      else { 
     
    356359          for (int j=0; j<cc; j++) { 
    357360            boolean validZ = ((Boolean) hasZ.get(j)).booleanValue(); 
    358             int seriesNdx = (seriesCount == 1 || validZ) ? 0 : 1; 
     361            int seriesNdx = s * (seriesCount / ns); 
     362            seriesNdx += (seriesCount == 1 || validZ) ? 0 : 1; 
    359363            stks[seriesNdx][pt[seriesNdx]] = prefix; 
    360364            if (waveNames.get(j) != null) { 
     
    426430      } 
    427431 
     432      RandomAccessInputStream s = new RandomAccessInputStream(stks[0][0]); 
     433      Hashtable ifd = TiffTools.getFirstIFD(s); 
     434      s.close(); 
     435      core[0].sizeX = (int) TiffTools.getImageWidth(ifd); 
     436      core[0].sizeY = (int) TiffTools.getImageLength(ifd); 
     437 
    428438      core[0].sizeZ = zc; 
    429439      core[0].sizeC = cc; 
     
    449459          newCore[i].orderCertain = true; 
    450460        } 
    451         newCore[0].sizeC = stks[0].length / getSizeT(); 
    452         newCore[1].sizeC = stks[1].length / newCore[1].sizeT; 
    453         newCore[1].sizeZ = 1; 
    454         newCore[0].imageCount = 
    455           newCore[0].sizeC * newCore[0].sizeT * newCore[0].sizeZ; 
    456         newCore[1].imageCount = newCore[1].sizeC * newCore[1].sizeT; 
     461        if (stks.length > nstages) { 
     462          int ns = nstages == 0 ? 1 : nstages; 
     463          for (int j=0; j<ns; j++) { 
     464            newCore[j * 2].sizeC = stks[j * 2].length / getSizeT(); 
     465            newCore[j * 2 + 1].sizeC = 
     466              stks[j * 2 + 1].length / newCore[j * 2 + 1].sizeT; 
     467            newCore[j * 2 + 1].sizeZ = 1; 
     468            newCore[j * 2].imageCount = newCore[j * 2].sizeC * 
     469              newCore[j * 2].sizeT * newCore[j * 2].sizeZ; 
     470            newCore[j * 2 + 1].imageCount = 
     471              newCore[j * 2 + 1].sizeC * newCore[j * 2 + 1].sizeT; 
     472          } 
     473        } 
    457474        core = newCore; 
    458475      } 
     
    507524        store.setPlaneTimingDeltaT(new Float((ms - startDate) / 1000f), 
    508525          0, 0, i); 
    509         store.setPlaneTimingExposureTime((Float) exposureTimes.get(i), 0, 0, i); 
     526        if (coords[2] < exposureTimes.size()) { 
     527          store.setPlaneTimingExposureTime( 
     528            (Float) exposureTimes.get(coords[2]), 0, 0, i); 
     529        } 
    510530      } 
    511531      else if (internalStamps != null && i < internalStamps.length) { 
Note: See TracChangeset for help on using the changeset viewer.