Changeset 5664


Ignore:
Timestamp:
11/04/09 09:52:06 (10 years ago)
Author:
melissa
Message:

Several minor bugfixes. Closes #430.

Files:
12 edited

Legend:

Unmodified
Added
Removed
  • branches/4.1/components/bio-formats/src/loci/formats/FileStitcher.java

    r5615 r5664  
    925925    fp = findPattern(currentId); 
    926926 
    927     reader.setId(fp.getFiles()[0]); 
    928     if (reader.fileGroupOption(fp.getFiles()[0]) == FormatTools.MUST_GROUP) { 
     927    if (reader.fileGroupOption(id) == FormatTools.MUST_GROUP) { 
    929928      // reader subclass is handling file grouping 
    930929      noStitch = true; 
     930      reader.setId(currentId); 
    931931      return; 
    932932    } 
     933    reader.setId(fp.getFiles()[0]); 
    933934 
    934935    AxisGuesser guesser = new AxisGuesser(fp, reader.getDimensionOrder(), 
  • branches/4.1/components/bio-formats/src/loci/formats/in/BioRadReader.java

    r5601 r5664  
    144144  /* @see loci.formats.IFormatReader#fileGroupOption(String) */ 
    145145  public int fileGroupOption(String id) throws FormatException, IOException { 
    146     Location parent = new Location(id).getParentFile(); 
     146    Location parent = new Location(id).getAbsoluteFile().getParentFile(); 
    147147    String[] list = parent.list(); 
    148148    for (String f : list) { 
     
    498498            else if (key.equals("INFO_OBJECTIVE_MAGNIFICATION")) { 
    499499              store.setObjectiveNominalMagnification( 
    500                 new Integer((int) Double.parseDouble(value)), 0, 0); 
     500                new Integer((int) Float.parseFloat(value)), 0, 0); 
    501501            } 
    502502            else if (key.equals("LENS_MAGNIFICATION")) { 
    503503              store.setObjectiveNominalMagnification( 
    504                 new Integer((int) Double.parseDouble(value)), 0, 0); 
     504                new Integer((int) Float.parseFloat(value)), 0, 0); 
    505505            } 
    506506            else if (key.startsWith("SETTING")) { 
     
    599599 
    600600                store.setObjectiveNominalMagnification( 
    601                   new Integer((int) Double.parseDouble(values[11])), 0, 0); 
     601                  new Integer((int) Float.parseFloat(values[11])), 0, 0); 
    602602                store.setDimensionsPhysicalSizeZ(new Float(values[14]), 0, 0); 
    603603                break; 
  • branches/4.1/components/bio-formats/src/loci/formats/in/InCellReader.java

    r5543 r5664  
    427427        } 
    428428        if (q < emWaves.size()) { 
    429           store.setLogicalChannelEmWave(emWaves.get(q), i, q); 
     429          int wave = emWaves.get(q).intValue(); 
     430          if (wave > 0) { 
     431            store.setLogicalChannelEmWave(emWaves.get(q), i, q); 
     432          } 
    430433        } 
    431434        if (q < exWaves.size()) { 
    432           store.setLogicalChannelExWave(exWaves.get(q), i, q); 
     435          int wave = exWaves.get(q).intValue(); 
     436          if (wave > 0) { 
     437            store.setLogicalChannelExWave(exWaves.get(q), i, q); 
     438          } 
    433439        } 
    434440      } 
     
    448454      int well = getWellFromSeries(i); 
    449455      int field = getFieldFromSeries(i); 
     456      int totalTimepoints = 
     457        oneTimepointPerSeries ? channelsPerTimepoint.size() : 1; 
     458      int timepoint = i % totalTimepoints; 
     459 
     460      int sampleIndex = field * totalTimepoints + timepoint; 
    450461 
    451462      String imageID = MetadataTools.createLSID("Image", i); 
    452       store.setWellSampleIndex(new Integer(i), 0, well, field); 
    453       store.setWellSampleImageRef(imageID, 0, well, field); 
    454       store.setWellSamplePosX(posX.get(field), 0, well, field); 
    455       store.setWellSamplePosY(posY.get(field), 0, well, field); 
     463      store.setWellSampleIndex(new Integer(i), 0, well, sampleIndex); 
     464      store.setWellSampleImageRef(imageID, 0, well, sampleIndex); 
     465      store.setWellSamplePosX(posX.get(field), 0, well, sampleIndex); 
     466      store.setWellSamplePosY(posY.get(field), 0, well, sampleIndex); 
    456467    } 
    457468 
     
    511522              double area = 0d; 
    512523 
     524              if (cellIndex < 0) continue; 
    513525              String cell = values[cellIndex].trim(); 
    514526 
    515527              try { 
    516528                roiIndex = Integer.parseInt(cell) - 1; 
     529                if (areaIndex < 0) continue; 
    517530                area = Double.parseDouble(values[areaIndex].trim()); 
    518531              } 
     
    525538 
    526539              // "Cell cg X", "Cell cg Y" 
    527               store.setCircleCx(values[xIndex].trim(), image, roiIndex, 0); 
    528               store.setCircleCy(values[yIndex].trim(), image, roiIndex, 0); 
     540              if (xIndex >= 0) { 
     541                store.setCircleCx(values[xIndex].trim(), image, roiIndex, 0); 
     542              } 
     543              if (yIndex >= 0) { 
     544                store.setCircleCy(values[yIndex].trim(), image, roiIndex, 0); 
     545              } 
    529546              store.setCircleR(String.valueOf(radius), image, roiIndex, 0); 
    530547 
     
    751768      } 
    752769      else if (qName.equals("ObjectiveCalibration")) { 
    753         store.setObjectiveNominalMagnification(new Integer( 
    754           (int) Float.parseFloat(attributes.getValue("magnification"))), 0, 0); 
     770        store.setObjectiveNominalMagnification(new Integer((int) 
     771          Double.parseDouble(attributes.getValue("magnification"))), 0, 0); 
    755772        store.setObjectiveLensNA(new Float( 
    756773          attributes.getValue("numerical_aperture")), 0, 0); 
  • branches/4.1/components/bio-formats/src/loci/formats/in/MetamorphReader.java

    r5620 r5664  
    9393 
    9494  private String binning; 
    95   private float zoom, stepSize; 
     95  private double zoom, stepSize; 
    9696  private Float exposureTime; 
    9797  private Vector<String> waveNames; 
     
    582582        new Float(handler.getPixelSizeY()), i, 0); 
    583583      if (zDistances != null) { 
    584         stepSize = (float) zDistances[0]; 
     584        stepSize = zDistances[0]; 
    585585      } 
    586586      store.setDimensionsPhysicalSizeZ(new Float(stepSize), i, 0); 
     
    657657      for (int p=0; p<getImageCount(); p++) { 
    658658        int[] coords = getZCTCoords(p); 
    659         Float deltaT = 0f; 
    660         Float exposureTime = 0f; 
     659        Float deltaT = new Float(0); 
     660        Float exposureTime = new Float(0); 
    661661 
    662662        if (coords[2] > 0 && stks != null && lastFile >= 0 && 
     
    687687          String stamp = timestamps.get(index); 
    688688          long ms = DateTools.getTime(stamp, MEDIUM_DATE_FORMAT); 
    689           deltaT = new Float((ms - startDate) / 1000f); 
     689          deltaT = new Float((ms - startDate) / 1000.0); 
    690690        } 
    691691        else if (internalStamps != null && p < internalStamps.length) { 
    692692          long delta = internalStamps[p] - internalStamps[0]; 
    693           deltaT = new Float(delta / 1000f); 
     693          deltaT = new Float(delta / 1000.0); 
    694694          if (coords[2] < exposureTimes.size()) index = coords[2]; 
    695695        } 
     
    703703 
    704704        if (stageX != null && p < stageX.length) { 
    705           store.setStagePositionPositionX( 
    706             new Float((float) stageX[p]), i, 0, p); 
     705          store.setStagePositionPositionX(new Float(stageX[p]), i, 0, p); 
    707706        } 
    708707        if (stageY != null && p < stageY.length) { 
    709           store.setStagePositionPositionY( 
    710             new Float((float) stageY[p]), i, 0, p); 
     708          store.setStagePositionPositionY(new Float(stageY[p]), i, 0, p); 
    711709        } 
    712710      } 
     
    716714    store.setDetectorID(detectorID, 0, 0); 
    717715    store.setDetectorZoom(new Float(zoom), 0, 0); 
    718     if (handler != null && handler.getZoom() != 0f) { 
     716    if (handler != null && handler.getZoom() != 0) { 
    719717      store.setDetectorZoom(new Float(handler.getZoom()), 0, 0); 
    720718    } 
     
    744742        uic1tagEntry.getValueCount()); 
    745743      in.seek(uic4tagEntry.getValueOffset()); 
    746  
     744    } 
     745    catch (IllegalArgumentException exc) { traceDebug(exc); } // unknown tag 
     746    catch (NullPointerException exc) { traceDebug(exc); } 
     747    catch (IOException exc) { traceDebug(exc); } 
     748 
     749    try { 
    747750      // copy ifds into a new array of Hashtables that will accommodate the 
    748751      // additional image planes 
     
    822825    catch (IllegalArgumentException exc) { traceDebug(exc); } // unknown tag 
    823826    catch (NullPointerException exc) { traceDebug(exc); } 
    824     catch (IOException exc) { traceDebug(exc); } 
    825827    catch (FormatException exc) { traceDebug(exc); } 
    826828 
     
    940942    for (int i=0; i<mmPlanes; i++) { 
    941943      iAsString = intFormatMax(i, mmPlanes); 
     944      if (in.getFilePointer() + 8 > in.length()) break; 
    942945      zDistances[i] = readRational(in).doubleValue(); 
    943946      addSeriesMeta("zDistance[" + iAsString + "]", zDistances[i]); 
     
    974977    long saveLoc = in.getFilePointer(); 
    975978    in.seek(uic4offset); 
     979    if (in.getFilePointer() + 2 >= in.length()) return; 
    976980    short id = in.readShort(); 
    977981    while (id != 0) { 
  • branches/4.1/components/bio-formats/src/loci/formats/in/ZeissLSMReader.java

    r5625 r5664  
    158158  private int nextDataChannel = 0, nextIllumChannel = 0, nextDetectChannel = 0; 
    159159  private boolean splitPlanes = false; 
    160   private float zoom; 
     160  private double zoom; 
    161161  private Vector<String> imageNames; 
    162162  private String binning; 
     163 
     164  private int totalROIs = 0; 
    163165 
    164166  // -- Constructor -- 
     
    202204    super.close(fileOnly); 
    203205    if (!fileOnly) { 
    204       pixelSizeX = pixelSizeY = pixelSizeZ = 0f; 
     206      pixelSizeX = pixelSizeY = pixelSizeZ = 0; 
    205207      lut = null; 
    206208      timestamps = null; 
     
    213215      nextDataChannel = nextIllumChannel = nextDetectChannel = 0; 
    214216      splitPlanes = false; 
    215       zoom = 0f; 
     217      zoom = 0; 
    216218      imageNames = null; 
    217219      binning = null; 
     220      totalROIs = 0; 
    218221    } 
    219222  } 
     
    227230    return TiffTools.isValidHeader(check) || 
    228231      (check[2] == 0x53 && check[3] == 0x74); 
     232  } 
     233 
     234  /* @see loci.formats.IFormatReader#fileGroupOption(String) */ 
     235  public int fileGroupOption(String id) throws FormatException, IOException { 
     236    return FormatTools.MUST_GROUP; 
    229237  } 
    230238 
     
    647655    } 
    648656 
     657    totalROIs = 0; 
     658 
    649659    addSeriesMeta("ToolbarFlags", ras.readInt()); 
    650660 
     
    813823    int nLogicalChannels = nextDataChannel == 0 ? 1 : nextDataChannel; 
    814824    if (nLogicalChannels == getSizeC()) { 
    815       splitPlanes = isRGB(); 
     825      if (!splitPlanes) splitPlanes = isRGB(); 
    816826      core[series].rgb = false; 
    817827      if (splitPlanes) core[series].imageCount *= getSizeC(); 
     
    822832    imageNames.add(imageName); 
    823833 
    824     Float pixX = new Float((float) pixelSizeX); 
    825     Float pixY = new Float((float) pixelSizeY); 
    826     Float pixZ = new Float((float) pixelSizeZ); 
     834    Float pixX = new Float(pixelSizeX); 
     835    Float pixY = new Float(pixelSizeY); 
     836    Float pixZ = new Float(pixelSizeZ); 
    827837 
    828838    store.setDimensionsPhysicalSizeX(pixX, series, 0); 
     
    830840    store.setDimensionsPhysicalSizeZ(pixZ, series, 0); 
    831841 
    832     float firstStamp = 0f; 
     842    double firstStamp = 0; 
    833843    if (timestamps.size() > 0) { 
    834       firstStamp = timestamps.get(0).floatValue(); 
     844      firstStamp = timestamps.get(0).doubleValue(); 
    835845    } 
    836846 
     
    839849 
    840850      if (zct[2] < timestamps.size()) { 
    841         float thisStamp = timestamps.get(zct[2]).floatValue(); 
     851        double thisStamp = timestamps.get(zct[2]).doubleValue(); 
    842852        store.setPlaneTimingDeltaT(new Float(thisStamp - firstStamp), 
    843853          series, 0, i); 
    844854        int index = zct[2] + 1; 
    845         float nextStamp = index < timestamps.size() ? 
    846           timestamps.get(index).floatValue() : thisStamp; 
     855        double nextStamp = index < timestamps.size() ? 
     856          timestamps.get(index).doubleValue() : thisStamp; 
    847857        if (i == getSizeT() - 1 && zct[2] > 0) { 
    848           thisStamp = timestamps.get(zct[2] - 1).floatValue(); 
     858          thisStamp = timestamps.get(zct[2] - 1).doubleValue(); 
    849859        } 
    850860        store.setPlaneTimingExposureTime(new Float(nextStamp - thisStamp), 
     
    906916    else if (block instanceof DetectionChannel) { 
    907917      DetectionChannel channel = (DetectionChannel) block; 
    908       if (channel.pinhole != null && channel.pinhole.floatValue() != 0f && 
     918      if (channel.pinhole != null && channel.pinhole.doubleValue() != 0f && 
    909919        nextDetectChannel < getSizeC() && channel.acquire) 
    910920      { 
     
    10041014    in.skipBytes(164); 
    10051015 
    1006     for (int i=0; i<numberOfShapes; i++) { 
     1016    for (int i=totalROIs; i<totalROIs+numberOfShapes; i++) { 
    10071017      long offset = in.getFilePointer(); 
    10081018      int type = in.readInt(); 
     
    10341044      in.skipBytes(34); 
    10351045 
    1036       // populate shape attributes 
    1037  
    1038       store.setShapeFontFamily(fontName, series, 0, i); 
    1039       store.setShapeFontSize(new Integer(fontHeight), series, 0, i); 
    1040       store.setShapeFontStyle(fontItalic ? "normal" : "italic", series, 0, i); 
    1041       store.setShapeFontWeight(String.valueOf(fontWeight), series, 0, i); 
    1042       store.setShapeLocked(new Boolean(moveable), series, 0, i); 
    1043       store.setShapeStrokeColor(String.valueOf(color), series, 0, i); 
    1044       store.setShapeStrokeWidth(new Integer(lineWidth), series, 0, i); 
    1045       store.setShapeTextDecoration(fontUnderlined ? "underline" : 
    1046         fontStrikeout ? "line-through" : "normal", series, 0, i); 
    1047       store.setShapeVisibility(new Boolean(enabled), series, 0, i); 
    1048  
    10491046      switch (type) { 
    10501047        case TEXT: 
     
    10521049          double y = in.readDouble(); 
    10531050          String text = DataTools.stripString(in.readCString()); 
    1054           store.setShapeText(text, series, 0, i); 
     1051          store.setShapeText(text, series, i, 0); 
    10551052          break; 
    10561053        case LINE: 
     
    10611058          double endY = in.readDouble(); 
    10621059 
    1063           store.setLineX1(String.valueOf(startX), series, 0, i); 
    1064           store.setLineY1(String.valueOf(startY), series, 0, i); 
    1065           store.setLineX2(String.valueOf(endX), series, 0, i); 
    1066           store.setLineY2(String.valueOf(endY), series, 0, i); 
     1060          store.setLineX1(String.valueOf(startX), series, i, 0); 
     1061          store.setLineY1(String.valueOf(startY), series, i, 0); 
     1062          store.setLineX2(String.valueOf(endX), series, i, 0); 
     1063          store.setLineY2(String.valueOf(endY), series, i, 0); 
    10671064          break; 
    10681065        case SCALE_BAR: 
     
    10841081          topY = Math.min(topY, bottomY); 
    10851082 
    1086           store.setRectX(String.valueOf(topX), series, 0, i); 
    1087           store.setRectY(String.valueOf(topY), series, 0, i); 
    1088           store.setRectWidth(String.valueOf(width), series, 0, i); 
    1089           store.setRectHeight(String.valueOf(height), series, 0, i); 
     1083          store.setRectX(String.valueOf(topX), series, i, 0); 
     1084          store.setRectY(String.valueOf(topY), series, i, 0); 
     1085          store.setRectWidth(String.valueOf(width), series, i, 0); 
     1086          store.setRectHeight(String.valueOf(height), series, i, 0); 
    10901087 
    10911088          break; 
     
    11351132 
    11361133            store.setEllipseTransform("rotate(" + theta + " " + centerX + 
    1137               " " + centerY + ")", series, 0, i); 
    1138           } 
    1139  
    1140           store.setEllipseCx(String.valueOf(centerX), series, 0, i); 
    1141           store.setEllipseCy(String.valueOf(centerY), series, 0, i); 
    1142           store.setEllipseRx(String.valueOf(rx), series, 0, i); 
    1143           store.setEllipseRy(String.valueOf(ry), series, 0, i); 
     1134              " " + centerY + ")", series, i, 0); 
     1135          } 
     1136 
     1137          store.setEllipseCx(String.valueOf(centerX), series, i, 0); 
     1138          store.setEllipseCy(String.valueOf(centerY), series, i, 0); 
     1139          store.setEllipseRx(String.valueOf(rx), series, i, 0); 
     1140          store.setEllipseRy(String.valueOf(ry), series, i, 0); 
    11441141 
    11451142          break; 
     
    11541151            Math.pow(curveY - centerY, 2)); 
    11551152 
    1156           store.setCircleCx(String.valueOf(centerX), series, 0, i); 
    1157           store.setCircleCy(String.valueOf(centerY), series, 0, i); 
    1158           store.setCircleR(String.valueOf(radius), series, 0, i); 
     1153          store.setCircleCx(String.valueOf(centerX), series, i, 0); 
     1154          store.setCircleCy(String.valueOf(centerY), series, i, 0); 
     1155          store.setCircleR(String.valueOf(radius), series, i, 0); 
    11591156 
    11601157          break; 
     
    11861183            Math.pow(points[0][1] - cy, 2)); 
    11871184 
    1188           store.setCircleCx(String.valueOf(cx), series, 0, i); 
    1189           store.setCircleCy(String.valueOf(cy), series, 0, i); 
    1190           store.setCircleR(String.valueOf(r), series, 0, i); 
     1185          store.setCircleCx(String.valueOf(cx), series, i, 0); 
     1186          store.setCircleCy(String.valueOf(cy), series, i, 0); 
     1187          store.setCircleR(String.valueOf(r), series, i, 0); 
    11911188 
    11921189          break; 
     
    12081205          } 
    12091206 
    1210           store.setPolylinePoints(p.toString(), series, 0, i); 
     1207          store.setPolylinePoints(p.toString(), series, i, 0); 
    12111208 
    12121209          break; 
     
    12311228 
    12321229          if (type == CLOSED_POLYLINE) { 
    1233             store.setPolygonPoints(p.toString(), series, 0, i); 
    1234           } 
    1235           else store.setPolylinePoints(p.toString(), series, 0, i); 
     1230            store.setPolygonPoints(p.toString(), series, i, 0); 
     1231          } 
     1232          else store.setPolylinePoints(p.toString(), series, i, 0); 
    12361233 
    12371234          break; 
     
    12461243            } 
    12471244          } 
     1245 
     1246          p = new StringBuffer(); 
     1247          for (int j=0; j<points.length; j++) { 
     1248            p.append(points[j][0]); 
     1249            p.append(","); 
     1250            p.append(points[j][1]); 
     1251            if (j < points.length - 1) p.append(" "); 
     1252          } 
     1253 
     1254          if (type == OPEN_BEZIER) { 
     1255            store.setPolylinePoints(p.toString(), series, i, 0); 
     1256          } 
     1257          else store.setPolygonPoints(p.toString(), series, i, 0); 
     1258 
    12481259          break; 
    1249       } 
     1260        default: 
     1261          i--; 
     1262          numberOfShapes--; 
     1263          continue; 
     1264      } 
     1265 
     1266      // populate shape attributes 
     1267 
     1268      store.setShapeFontFamily(fontName, series, i, 0); 
     1269      store.setShapeFontSize(new Integer(fontHeight), series, i, 0); 
     1270      store.setShapeFontStyle(fontItalic ? "normal" : "italic", series, i, 0); 
     1271      store.setShapeFontWeight(String.valueOf(fontWeight), series, i, 0); 
     1272      store.setShapeLocked(new Boolean(moveable), series, i, 0); 
     1273      store.setShapeStrokeColor(String.valueOf(color), series, i, 0); 
     1274      store.setShapeStrokeWidth(new Integer(lineWidth), series, i, 0); 
     1275      store.setShapeTextDecoration(fontUnderlined ? "underline" : 
     1276        fontStrikeout ? "line-through" : "normal", series, i, 0); 
     1277      store.setShapeVisibility(new Boolean(enabled), series, i, 0); 
    12501278 
    12511279      in.seek(offset + blockLength); 
    12521280    } 
     1281    totalROIs += numberOfShapes; 
    12531282  } 
    12541283 
     
    15931622      } 
    15941623 
    1595       zoom = (float) getDoubleValue(RECORDING_ZOOM); 
     1624      zoom = (Float) getFloatValue(RECORDING_ZOOM); 
    15961625 
    15971626      String objective = getStringValue(RECORDING_OBJECTIVE); 
     
    16281657  class Laser extends SubBlock { 
    16291658    public String medium, type; 
    1630     public Double power; 
     1659    public Float power; 
    16311660 
    16321661    protected void read() throws IOException { 
     
    16581687 
    16591688      acquire = getIntValue(LASER_ACQUIRE) != 0; 
    1660       power = getDoubleValue(LASER_POWER); 
     1689      power = getFloatValue(LASER_POWER); 
    16611690    } 
    16621691  } 
  • branches/4.1/components/bio-formats/src/loci/formats/in/ZeissZVIReader.java

    r5619 r5664  
    9797  private Vector<RandomAccessInputStream> tagsToParse; 
    9898  private int nextEmWave = 0, nextExWave = 0, nextChName = 0; 
    99   private float stageX = 0f, stageY = 0f; 
     99  private double stageX = 0, stageY = 0; 
    100100 
    101101  private int[] channelColors; 
    102102  private int lastPlane; 
     103  private Vector<Integer> tiles = new Vector<Integer>(); 
    103104 
    104105  // -- Constructor -- 
     
    276277                ii = row*tileColumns + (tileColumns - col - 1); 
    277278              } 
     279              if (!tiles.contains(new Integer(ii))) { 
     280                colOffset += tileW; 
     281                if (colOffset >= w) { 
     282                  colOffset = 0; 
     283                  rowOffset += tileH; 
     284                } 
     285                continue; 
     286              } 
     287              else ii = tiles.indexOf(new Integer(ii)); 
    278288              ii *= count; 
    279289              ii += firstTile; 
     
    346356      channelColors = null; 
    347357      lastPlane = 0; 
     358      tiles.clear(); 
    348359    } 
    349360  } 
     
    501512    status("Populating metadata"); 
    502513 
     514    for (RandomAccessInputStream s : tagsToParse) { 
     515      s.order(true); 
     516      parseTags(-1, s, store); 
     517      s.close(); 
     518    } 
     519 
    503520    core[0].sizeZ = zIndices.size(); 
    504521    core[0].sizeT = tIndices.size(); 
     
    522539    if (getSizeY() * tileRows != realHeight) tileRows++; 
    523540    if (getSizeX() * tileColumns != realWidth) tileColumns++; 
    524  
    525     while (totalTiles < tileRows * tileColumns && tileRows > 1) { 
    526       tileRows--; 
    527     } 
    528     if (tileRows > 0) tileColumns = totalTiles / tileRows; 
    529541 
    530542    if (totalTiles <= 1) { 
     
    614626    } 
    615627 
    616     for (RandomAccessInputStream s : tagsToParse) { 
    617       s.order(true); 
    618       parseTags(-1, s, store); 
    619       s.close(); 
    620     } 
    621628    core[0].indexed = !isRGB() && channelColors != null; 
    622629 
     
    723730        else if (key.equals("ImageWidth")) { 
    724731          int v = Integer.parseInt(value); 
    725           if (getSizeX() == 0) { 
     732          if (getSizeX() == 0 || v < getSizeX()) { 
    726733            core[0].sizeX = v; 
    727734          } 
     
    730737        else if (key.equals("ImageHeight")) { 
    731738          int v = Integer.parseInt(value); 
    732           if (getSizeY() == 0) core[0].sizeY = v; 
     739          if (getSizeY() == 0 || v < getSizeY()) core[0].sizeY = v; 
    733740          if (realHeight == 0 || v > realHeight) realHeight = v; 
    734741        } 
     
    737744        addGlobalMeta(key, value); 
    738745 
     746        if (key.startsWith("ImageTile")) { 
     747          if (!tiles.contains(new Integer(value))) { 
     748            tiles.add(new Integer(value)); 
     749          } 
     750        } 
     751 
    739752        if (key.equals("ImageTile Index") || key.equals("ImageTile Index 0")) { 
    740           firstImageTile = value; 
     753          if (firstImageTile == null) { 
     754            firstImageTile = value; 
     755          } 
    741756        } 
    742757        else if (key.equals("ImageTile Index 1")) secondImageTile = value; 
     
    786801        else if (key.startsWith("BlackValue")) { 
    787802          if (cIndex != -1) { 
    788             // store.setGreyChannelBlackValue(new Float(value), 0); 
     803            // store.setGreyChannelBlackValue(new Double(value), 0); 
    789804          } 
    790805        } 
    791806        else if (key.startsWith("WhiteValue")) { 
    792807          if (cIndex != -1) { 
    793             // store.setGreyChannelWhiteValue(new Float(value), 0); 
     808            // store.setGreyChannelWhiteValue(new Double(value), 0); 
    794809          } 
    795810        } 
    796811        else if (key.startsWith("GammaValue")) { 
    797812          if (cIndex != -1) { 
    798             // store.setGreyChannelGammaValue(new Float(value), 0); 
     813            // store.setGreyChannelGammaValue(new Double(value), 0); 
    799814          } 
    800815        } 
     
    820835        } 
    821836        else if (key.startsWith("Objective Magnification")) { 
    822           float mag = Float.parseFloat(value); 
     837          double mag = Double.parseDouble(value); 
    823838          store.setObjectiveNominalMagnification(new Integer((int) mag), 0, 0); 
    824839        } 
     
    836851            int slash = tokens[q].indexOf("/"); 
    837852            if (slash != -1) { 
    838               int mag = 
    839                 (int) Float.parseFloat(tokens[q].substring(0, slash - q)); 
     853              int mag = (int) 
     854                Double.parseDouble(tokens[q].substring(0, slash - q)); 
    840855              String na = tokens[q].substring(slash + 1); 
    841856              store.setObjectiveNominalMagnification(new Integer(mag), 0, 0); 
     
    949964 
    950965      s.seek(nameBlock); 
    951       String roiName = DataTools.stripString(s.readString(s.readInt())); 
     966      int strlen = s.readInt(); 
     967      if (strlen + s.getFilePointer() > s.length()) continue; 
     968      String roiName = DataTools.stripString(s.readString(strlen)); 
    952969 
    953970      s.seek(fontBlock); 
     
    10151032  } 
    10161033 
    1017   private float getScaleUnit(String value) { 
     1034  // TODO: this method is never called; eliminate? 
     1035  private double getScaleUnit(String value) { 
    10181036    int v = Integer.parseInt(value); 
    10191037    switch (v) { 
    10201038      case 72: // meters 
    1021         return 1000000f; 
     1039        return 1000000; 
    10221040      case 77: // nanometers 
    1023         return 0.001f; 
     1041        return 0.001; 
    10241042      case 81: // inches 
    1025         return 25400f; 
    1026     } 
    1027     return 1f; 
     1043        return 25400; 
     1044    } 
     1045    return 1; 
    10281046  } 
    10291047 
  • trunk/components/bio-formats/src/loci/formats/FileStitcher.java

    r5590 r5664  
    925925    fp = findPattern(currentId); 
    926926 
    927     reader.setId(fp.getFiles()[0]); 
    928     if (reader.fileGroupOption(fp.getFiles()[0]) == FormatTools.MUST_GROUP) { 
     927    if (reader.fileGroupOption(id) == FormatTools.MUST_GROUP) { 
    929928      // reader subclass is handling file grouping 
    930929      noStitch = true; 
     930      reader.setId(currentId); 
    931931      return; 
    932932    } 
     933    reader.setId(fp.getFiles()[0]); 
    933934 
    934935    AxisGuesser guesser = new AxisGuesser(fp, reader.getDimensionOrder(), 
  • trunk/components/bio-formats/src/loci/formats/in/BioRadReader.java

    r5624 r5664  
    144144  /* @see loci.formats.IFormatReader#fileGroupOption(String) */ 
    145145  public int fileGroupOption(String id) throws FormatException, IOException { 
    146     Location parent = new Location(id).getParentFile(); 
     146    Location parent = new Location(id).getAbsoluteFile().getParentFile(); 
    147147    String[] list = parent.list(); 
    148148    for (String f : list) { 
  • trunk/components/bio-formats/src/loci/formats/in/InCellReader.java

    r5633 r5664  
    427427        } 
    428428        if (q < emWaves.size()) { 
    429           store.setLogicalChannelEmWave(emWaves.get(q), i, q); 
     429          int wave = emWaves.get(q).intValue(); 
     430          if (wave > 0) { 
     431            store.setLogicalChannelEmWave(emWaves.get(q), i, q); 
     432          } 
    430433        } 
    431434        if (q < exWaves.size()) { 
    432           store.setLogicalChannelExWave(exWaves.get(q), i, q); 
     435          int wave = exWaves.get(q).intValue(); 
     436          if (wave > 0) { 
     437            store.setLogicalChannelExWave(exWaves.get(q), i, q); 
     438          } 
    433439        } 
    434440      } 
     
    448454      int well = getWellFromSeries(i); 
    449455      int field = getFieldFromSeries(i); 
     456      int totalTimepoints = 
     457        oneTimepointPerSeries ? channelsPerTimepoint.size() : 1; 
     458      int timepoint = i % totalTimepoints; 
     459 
     460      int sampleIndex = field * totalTimepoints + timepoint; 
    450461 
    451462      String imageID = MetadataTools.createLSID("Image", i); 
    452       store.setWellSampleIndex(new Integer(i), 0, well, field); 
    453       store.setWellSampleImageRef(imageID, 0, well, field); 
    454       store.setWellSamplePosX(posX.get(field), 0, well, field); 
    455       store.setWellSamplePosY(posY.get(field), 0, well, field); 
     463      store.setWellSampleIndex(new Integer(i), 0, well, sampleIndex); 
     464      store.setWellSampleImageRef(imageID, 0, well, sampleIndex); 
     465      store.setWellSamplePosX(posX.get(field), 0, well, sampleIndex); 
     466      store.setWellSamplePosY(posY.get(field), 0, well, sampleIndex); 
    456467    } 
    457468 
  • trunk/components/bio-formats/src/loci/formats/in/MetamorphReader.java

    r5624 r5664  
    742742        uic1tagEntry.getValueCount()); 
    743743      in.seek(uic4tagEntry.getValueOffset()); 
    744  
     744    } 
     745    catch (IllegalArgumentException exc) { traceDebug(exc); } // unknown tag 
     746    catch (NullPointerException exc) { traceDebug(exc); } 
     747    catch (IOException exc) { traceDebug(exc); } 
     748 
     749    try { 
    745750      // copy ifds into a new array of Hashtables that will accommodate the 
    746751      // additional image planes 
     
    820825    catch (IllegalArgumentException exc) { traceDebug(exc); } // unknown tag 
    821826    catch (NullPointerException exc) { traceDebug(exc); } 
    822     catch (IOException exc) { traceDebug(exc); } 
    823827    catch (FormatException exc) { traceDebug(exc); } 
    824828 
     
    938942    for (int i=0; i<mmPlanes; i++) { 
    939943      iAsString = intFormatMax(i, mmPlanes); 
     944      if (in.getFilePointer() + 8 > in.length()) break; 
    940945      zDistances[i] = readRational(in).doubleValue(); 
    941946      addSeriesMeta("zDistance[" + iAsString + "]", zDistances[i]); 
     
    972977    long saveLoc = in.getFilePointer(); 
    973978    in.seek(uic4offset); 
     979    if (in.getFilePointer() + 2 >= in.length()) return; 
    974980    short id = in.readShort(); 
    975981    while (id != 0) { 
  • trunk/components/bio-formats/src/loci/formats/in/ZeissLSMReader.java

    r5659 r5664  
    823823    int nLogicalChannels = nextDataChannel == 0 ? 1 : nextDataChannel; 
    824824    if (nLogicalChannels == getSizeC()) { 
    825       splitPlanes = isRGB(); 
     825      if (!splitPlanes) splitPlanes = isRGB(); 
    826826      core[series].rgb = false; 
    827827      if (splitPlanes) core[series].imageCount *= getSizeC(); 
  • trunk/components/bio-formats/src/loci/formats/in/ZeissZVIReader.java

    r5631 r5664  
    964964 
    965965      s.seek(nameBlock); 
    966       String roiName = DataTools.stripString(s.readString(s.readInt())); 
     966      int strlen = s.readInt(); 
     967      if (strlen + s.getFilePointer() > s.length()) continue; 
     968      String roiName = DataTools.stripString(s.readString(strlen)); 
    967969 
    968970      s.seek(fontBlock); 
Note: See TracChangeset for help on using the changeset viewer.