Changeset 6323


Ignore:
Timestamp:
05/15/10 15:08:53 (10 years ago)
Author:
melissa
Message:

Fixed a couple of dimension calculation bugs.

File:
1 edited

Legend:

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

    r6230 r6323  
    7070  private String creationDate; 
    7171  private int binning; 
     72  private boolean hasZ = false; 
    7273 
    7374  // -- Constructor -- 
     
    9697    FormatTools.checkPlaneParameters(this, no, buf.length, x, y, w, h); 
    9798 
    98     RandomAccessInputStream s = poi.getDocumentStream(imageFiles.get(no)); 
     99    String file = imageFiles.get(no); 
     100    RandomAccessInputStream s = poi.getDocumentStream(file); 
    99101    TiffParser tp = new TiffParser(s); 
    100102 
     
    126128      binning = 0; 
    127129      creationDate = null; 
     130      hasZ = false; 
    128131    } 
    129132  } 
     
    173176      else if (relativePath.startsWith("Bitmap") || relativePath.equals("Data")) 
    174177      { 
    175         Integer index = getImageIndex(parent); 
    176         if (index == null) continue; 
    177         imageFiles.put(index, name); 
     178        imageFiles.put(imageFiles.size(), name); 
    178179 
    179180        if (getSizeX() != 0 && getSizeY() != 0) { 
     
    207208      } 
    208209      else if (relativePath.indexOf("Time_From_Start") != -1) { 
    209         Integer index = getImageIndex(parent); 
    210         if (index == null) continue; 
    211         timestamps.put(index, stream.readDouble()); 
     210        timestamps.put(getTimestampIndex(parent), stream.readDouble()); 
     211      } 
     212      else if (relativePath.indexOf("Position_Z") != -1) { 
     213        hasZ = true; 
    212214      } 
    213215      else if (relativePath.equals("First Field Date & Time")) { 
     
    244246    if (getSizeC() == 0) core[0].sizeC = 1; 
    245247 
    246     if (timestamps.size() > 0) { 
    247       core[0].sizeZ = getImageCount() / timestamps.size(); 
    248       core[0].sizeT = timestamps.size(); 
    249     } 
    250     if (timestamps.size() == 0 || getSizeZ() * getSizeT() != getImageCount()) { 
    251       core[0].sizeZ = getImageCount(); 
    252       core[0].sizeT = 1; 
    253     } 
     248    core[0].sizeZ = getImageCount(); 
     249    core[0].sizeT = 1; 
    254250    core[0].rgb = getSizeC() > 1; 
     251    if (imageFiles.size() > getImageCount() && getSizeC() == 1) { 
     252      core[0].sizeC = imageFiles.size() / getImageCount(); 
     253      core[0].imageCount *= getSizeC(); 
     254    } 
    255255    core[0].interleaved = false; 
    256256    core[0].dimensionOrder = "XYCTZ"; 
     
    259259    core[0].falseColor = false; 
    260260    core[0].metadataComplete = true; 
     261 
     262    // re-index image files 
     263    String[] files = imageFiles.values().toArray(new String[imageFiles.size()]); 
     264    for (String file : files) { 
     265      int separator = file.lastIndexOf(File.separator); 
     266      String parent = file.substring(0, separator); 
     267      imageFiles.put(getImageIndex(parent), file); 
     268    } 
     269 
     270    if (timestamps.size() >= 3 && !hasZ) { 
     271      double one = timestamps.get(0); 
     272      double two = timestamps.get(1); 
     273      double three = timestamps.get(2); 
     274 
     275      if ((int) (three - two) == (int) (two - one)) { 
     276        core[0].sizeT = getSizeZ(); 
     277        core[0].sizeZ = 1; 
     278      } 
     279    } 
    261280 
    262281    MetadataStore store = makeFilterMetadata(); 
     
    309328    if (space >= path.length()) return null; 
    310329    int end = path.indexOf(File.separator, space); 
    311     String s = path.substring(space, end); 
    312     return Integer.parseInt(s) - 1; 
     330    String field = path.substring(space, end); 
     331    String image = "1"; 
     332    int imageIndex = path.indexOf("Image") + 5; 
     333    if (imageIndex >= 0) { 
     334      end = path.indexOf(File.separator, imageIndex); 
     335      if (end < 0) end = path.length(); 
     336      image = path.substring(imageIndex, end); 
     337    } 
     338    try { 
     339      int channel = Integer.parseInt(image) - 1; 
     340      return getEffectiveSizeC() * (Integer.parseInt(field) - 1) + channel; 
     341    } 
     342    catch (NumberFormatException e) { } 
     343    return null; 
     344  } 
     345 
     346  private Integer getTimestampIndex(String path) { 
     347    int space = path.lastIndexOf(" ") + 1; 
     348    if (space >= path.length()) return null; 
     349    int end = path.indexOf(File.separator, space); 
     350    return Integer.parseInt(path.substring(space , end)) - 1; 
    313351  } 
    314352 
Note: See TracChangeset for help on using the changeset viewer.