Changeset 6117


Ignore:
Timestamp:
04/12/10 18:04:59 (10 years ago)
Author:
melissa
Message:
  • Updated Imaris readers to respect MetadataOptions.
  • Fixed a couple of bugs in the NetCDF service.
Location:
trunk/components/bio-formats/src/loci/formats
Files:
5 edited

Legend:

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

    r6055 r6117  
    5757  public static final String HDF_MAGIC_STRING = "HDF"; 
    5858 
     59  private static final String[] DELIMITERS = {" ", "-", "."}; 
     60 
    5961  // -- Fields -- 
    6062 
     
    9496    FormatTools.checkPlaneParameters(this, no, buf.length, x, y, w, h); 
    9597 
    96     int[] zct = FormatTools.getZCTCoords(this, no); 
    97  
    9898    // pixel data is stored in XYZ blocks 
    9999 
    100     String path = "/DataSet/ResolutionLevel_" + series + "/TimePoint_" + 
    101       zct[2] + "/Channel_" + zct[1] + "/Data"; 
    102     Object image; 
    103     try { 
    104       image = netcdf.getArray(path, new int[] {zct[0], 0, 0}, 
    105           new int[] {1, getSizeY(), getSizeX()}); 
    106     } 
    107     catch (ServiceException e) { 
    108       throw new FormatException(e); 
    109     } 
     100    Object image = getImageData(no); 
    110101 
    111102    boolean big = !isLittleEndian(); 
     103    int bpp = FormatTools.getBytesPerPixel(getPixelType()); 
    112104    for (int row=0; row<h; row++) { 
     105      int base = row * w * bpp; 
    113106      if (image instanceof byte[][]) { 
    114107        byte[][] data = (byte[][]) image; 
     
    119112        short[][] data = (short[][]) image; 
    120113        short[] rowData = data[row + y]; 
    121         int base = row * w * 2; 
    122114        for (int i=0; i<w; i++) { 
    123115          DataTools.unpackBytes(rowData[x + i], buf, base + 2*i, 2, big); 
     
    127119        int[][] data = (int[][]) image; 
    128120        int[] rowData = data[row + y]; 
    129         int base = row * w * 4; 
    130121        for (int i=0; i<w; i++) { 
    131122          DataTools.unpackBytes(rowData[x + i], buf, base + i*4, 4, big); 
     
    135126        float[][] data = (float[][]) image; 
    136127        float[] rowData = data[row + y]; 
    137         int base = row * w * 4; 
    138128        for (int i=0; i<w; i++) { 
    139129          int v = Float.floatToIntBits(rowData[x + i]); 
     
    144134        double[][] data = (double[][]) image; 
    145135        double[] rowData = data[row + y]; 
    146         int base = row * w * 8; 
    147136        for (int i=0; i<w; i++) { 
    148137          long v = Double.doubleToLongBits(rowData[x + i]); 
     
    201190    // read all of the metadata key/value pairs 
    202191 
    203     Vector<String> attributes = netcdf.getAttributeList(); 
    204     for (int i=0; i<attributes.size(); i++) { 
    205       String attr = attributes.get(i); 
    206       String name = attr.substring(attr.lastIndexOf("/") + 1); 
    207       String value = netcdf.getAttributeValue(attr); 
    208       if (value == null) continue; 
    209       value = value.trim(); 
    210  
    211       if (name.equals("X")) { 
    212         core[0].sizeX = Integer.parseInt(value); 
    213       } 
    214       else if (name.equals("Y")) { 
    215         core[0].sizeY = Integer.parseInt(value); 
    216       } 
    217       else if (name.equals("Z")) { 
    218         core[0].sizeZ = Integer.parseInt(value); 
    219       } 
    220       else if (name.equals("FileTimePoints")) { 
    221         core[0].sizeT = Integer.parseInt(value); 
    222       } 
    223       else if (name.equals("RecordingEntrySampleSpacing")) { 
    224         pixelSizeX = Double.parseDouble(value); 
    225       } 
    226       else if (name.equals("RecordingEntryLineSpacing")) { 
    227         pixelSizeY = Double.parseDouble(value); 
    228       } 
    229       else if (name.equals("RecordingEntryPlaneSpacing")) { 
    230         pixelSizeZ = Double.parseDouble(value); 
    231       } 
    232       else if (name.equals("ExtMax0")) maxX = Double.parseDouble(value); 
    233       else if (name.equals("ExtMax1")) maxY = Double.parseDouble(value); 
    234       else if (name.equals("ExtMax2")) maxZ = Double.parseDouble(value); 
    235       else if (name.equals("ExtMin0")) minX = Double.parseDouble(value); 
    236       else if (name.equals("ExtMin1")) minY = Double.parseDouble(value); 
    237       else if (name.equals("ExtMin2")) minZ = Double.parseDouble(value); 
    238  
    239       if (attr.startsWith("/DataSet/ResolutionLevel_")) { 
    240         int slash = attr.indexOf("/", 25); 
    241         int n = Integer.parseInt(attr.substring(25, slash == -1 ? 
    242           attr.length() : slash)); 
    243         if (n == seriesCount) seriesCount++; 
    244       } 
    245  
    246       if (attr.startsWith("/DataSetInfo/Channel_")) { 
    247         if (value.indexOf(" ") != -1) { 
    248           value = value.substring(value.indexOf(" ") + 1); 
    249         } 
    250         if (value.indexOf("-") != -1) { 
    251           value = value.substring(value.indexOf("-") + 1); 
    252         } 
    253         if (value.indexOf(".") != -1) { 
    254           value = value.substring(0, value.indexOf(".")); 
    255         } 
    256  
    257         int underscore = attr.indexOf("_") + 1; 
    258         int cIndex = Integer.parseInt(attr.substring(underscore, 
    259           attr.indexOf("/", underscore))); 
    260         if (cIndex == getSizeC()) core[0].sizeC++; 
    261  
    262         if (name.equals("Gain")) gain.add(value); 
    263         else if (name.equals("LSMEmissionWavelength")) emWave.add(value); 
    264         else if (name.equals("LSMExcitationWavelength")) exWave.add(value); 
    265         else if (name.equals("Max")) channelMax.add(value); 
    266         else if (name.equals("Min")) channelMin.add(value); 
    267         else if (name.equals("Pinhole")) pinhole.add(value); 
    268         else if (name.equals("Name")) channelName.add(value); 
    269         else if (name.equals("MicroscopyMode")) microscopyMode.add(value); 
    270       } 
    271  
    272       if (value != null) addGlobalMeta(name, value); 
    273     } 
     192    parseAttributes(); 
    274193 
    275194    if (seriesCount > 1) { 
     
    298217    core[0].imageCount = getSizeZ() * getSizeC() * getSizeT(); 
    299218    core[0].thumbnail = false; 
     219    core[0].dimensionOrder = "XYZCT"; 
    300220 
    301221    // determine pixel type - this isn't stored in the metadata, so we need 
     
    304224    int type = -1; 
    305225 
    306     Object pix; 
    307     try { 
    308       pix = netcdf.getVariableValue("/DataSet/ResolutionLevel_" + 
    309           (getSeriesCount() - 1) + "/TimePoint_0/Channel_0/Data"); 
    310     } 
    311     catch (ServiceException e) { 
    312       throw new FormatException(e); 
    313     } 
    314     if (pix instanceof byte[][][]) type = FormatTools.UINT8; 
    315     else if (pix instanceof short[][][]) type = FormatTools.UINT16; 
    316     else if (pix instanceof int[][][]) type = FormatTools.UINT32; 
    317     else if (pix instanceof float[][][]) type = FormatTools.FLOAT; 
    318     else if (pix instanceof double[][][]) type = FormatTools.DOUBLE; 
     226    Object pix = getImageData(0); 
     227    if (pix instanceof byte[][]) type = FormatTools.UINT8; 
     228    else if (pix instanceof short[][]) type = FormatTools.UINT16; 
     229    else if (pix instanceof int[][]) type = FormatTools.UINT32; 
     230    else if (pix instanceof float[][]) type = FormatTools.FLOAT; 
     231    else if (pix instanceof double[][]) type = FormatTools.DOUBLE; 
    319232    else { 
    320233      throw new FormatException("Unknown pixel type: " + pix); 
     
    336249      new FilterMetadata(getMetadataStore(), isMetadataFiltered()); 
    337250    MetadataTools.populatePixels(store, this); 
    338     for (int i=0; i<getSeriesCount(); i++) { 
    339       double px = pixelSizeX, py = pixelSizeY, pz = pixelSizeZ; 
    340       if (px == 1) px = (maxX - minX) / core[i].sizeX; 
    341       if (py == 1) py = (maxY - minY) / core[i].sizeY; 
    342       if (pz == 1) pz = (maxZ - minZ) / core[i].sizeZ; 
    343       store.setDimensionsPhysicalSizeX(px, i, 0); 
    344       store.setDimensionsPhysicalSizeY(py, i, 0); 
    345       store.setDimensionsPhysicalSizeZ(pz, i, 0); 
    346     } 
    347  
    348     int cIndex = 0; 
     251 
    349252    String imageName = new Location(getCurrentFile()).getName(); 
    350253    for (int s=0; s<getSeriesCount(); s++) { 
    351254      store.setImageName(imageName + " Resolution Level " + (s + 1), s); 
    352255      MetadataTools.setDefaultCreationDate(store, id, s); 
     256    } 
     257 
     258    if (getMetadataOptions().getMetadataLevel() != MetadataLevel.ALL) return; 
     259 
     260    int cIndex = 0; 
     261    for (int s=0; s<getSeriesCount(); s++) { 
     262      double px = pixelSizeX, py = pixelSizeY, pz = pixelSizeZ; 
     263      if (px == 1) px = (maxX - minX) / core[s].sizeX; 
     264      if (py == 1) py = (maxY - minY) / core[s].sizeY; 
     265      if (pz == 1) pz = (maxZ - minZ) / core[s].sizeZ; 
     266      store.setDimensionsPhysicalSizeX(px, s, 0); 
     267      store.setDimensionsPhysicalSizeY(py, s, 0); 
     268      store.setDimensionsPhysicalSizeZ(pz, s, 0); 
     269 
    353270      for (int i=0; i<core[s].sizeC; i++, cIndex++) { 
    354271        Float gainValue = null; 
     
    408325  } 
    409326 
     327  // -- Helper methods -- 
     328 
     329  private Object getImageData(int no) throws FormatException { 
     330    int[] zct = getZCTCoords(no); 
     331    String path = "/DataSet/ResolutionLevel_" + series + "/TimePoint_" + 
     332      zct[2] + "/Channel_" + zct[1] + "/Data"; 
     333    Object image = null; 
     334    int[] dimensions = new int[] {1, getSizeY(), getSizeX()}; 
     335    int[] indices = new int[] {zct[0], 0, 0}; 
     336    try { 
     337      image = netcdf.getArray(path, indices, dimensions); 
     338    } 
     339    catch (ServiceException e) { 
     340      throw new FormatException(e); 
     341    } 
     342    return image; 
     343  } 
     344 
     345  private void parseAttributes() { 
     346    Vector<String> attributes = netcdf.getAttributeList(); 
     347    for (String attr : attributes) { 
     348      String name = attr.substring(attr.lastIndexOf("/") + 1); 
     349      String value = netcdf.getAttributeValue(attr); 
     350      if (value == null) continue; 
     351      value = value.trim(); 
     352 
     353      if (name.equals("X")) { 
     354        core[0].sizeX = Integer.parseInt(value); 
     355      } 
     356      else if (name.equals("Y")) { 
     357        core[0].sizeY = Integer.parseInt(value); 
     358      } 
     359      else if (name.equals("Z")) { 
     360        core[0].sizeZ = Integer.parseInt(value); 
     361      } 
     362      else if (name.equals("FileTimePoints")) { 
     363        core[0].sizeT = Integer.parseInt(value); 
     364      } 
     365      else if (name.equals("RecordingEntrySampleSpacing")) { 
     366        pixelSizeX = Double.parseDouble(value); 
     367      } 
     368      else if (name.equals("RecordingEntryLineSpacing")) { 
     369        pixelSizeY = Double.parseDouble(value); 
     370      } 
     371      else if (name.equals("RecordingEntryPlaneSpacing")) { 
     372        pixelSizeZ = Double.parseDouble(value); 
     373      } 
     374      else if (name.equals("ExtMax0")) maxX = Double.parseDouble(value); 
     375      else if (name.equals("ExtMax1")) maxY = Double.parseDouble(value); 
     376      else if (name.equals("ExtMax2")) maxZ = Double.parseDouble(value); 
     377      else if (name.equals("ExtMin0")) minX = Double.parseDouble(value); 
     378      else if (name.equals("ExtMin1")) minY = Double.parseDouble(value); 
     379      else if (name.equals("ExtMin2")) minZ = Double.parseDouble(value); 
     380 
     381      if (attr.startsWith("/DataSet/ResolutionLevel_")) { 
     382        int slash = attr.indexOf("/", 25); 
     383        int n = Integer.parseInt(attr.substring(25, slash == -1 ? 
     384          attr.length() : slash)); 
     385        if (n == seriesCount) seriesCount++; 
     386      } 
     387 
     388      if (attr.startsWith("/DataSetInfo/Channel_")) { 
     389        for (String d : DELIMITERS) { 
     390          if (value.indexOf(d) != -1) { 
     391            value = value.substring(value.indexOf(d) + 1); 
     392          } 
     393        } 
     394 
     395        int underscore = attr.indexOf("_") + 1; 
     396        int cIndex = Integer.parseInt(attr.substring(underscore, 
     397          attr.indexOf("/", underscore))); 
     398        if (cIndex == getSizeC()) core[0].sizeC++; 
     399 
     400        if (name.equals("Gain")) gain.add(value); 
     401        else if (name.equals("LSMEmissionWavelength")) emWave.add(value); 
     402        else if (name.equals("LSMExcitationWavelength")) exWave.add(value); 
     403        else if (name.equals("Max")) channelMax.add(value); 
     404        else if (name.equals("Min")) channelMin.add(value); 
     405        else if (name.equals("Pinhole")) pinhole.add(value); 
     406        else if (name.equals("Name")) channelName.add(value); 
     407        else if (name.equals("MicroscopyMode")) microscopyMode.add(value); 
     408      } 
     409 
     410      if (value != null) addGlobalMeta(name, value); 
     411    } 
     412  } 
     413 
    410414} 
  • trunk/components/bio-formats/src/loci/formats/in/ImarisReader.java

    r6055 r6117  
    122122    LOGGER.info("Reading header"); 
    123123 
    124     addGlobalMeta("Version", in.readInt()); 
     124    int version = in.readInt(); 
    125125    in.skipBytes(4); 
    126126 
    127     addGlobalMeta("Image name", in.readString(128)); 
     127    String imageName = in.readString(128); 
    128128 
    129129    core[0].sizeX = in.readShort(); 
     
    136136    in.skipBytes(2); 
    137137 
    138     addGlobalMeta("Original date", in.readString(32)); 
     138    String date = in.readString(32); 
    139139 
    140140    float dx = in.readFloat(); 
     
    143143    int mag = in.readShort(); 
    144144 
    145     addGlobalMeta("Image comment", in.readString(128)); 
     145    String description = in.readString(128); 
    146146    int isSurvey = in.readInt(); 
    147     addGlobalMeta("Survey performed", isSurvey == 0); 
    148147 
    149148    LOGGER.info("Calculating image offsets"); 
     
    156155    float[] pinholes = new float[getSizeC()]; 
    157156 
     157    if (getMetadataOptions().getMetadataLevel() == MetadataLevel.ALL) { 
     158      for (int i=0; i<getSizeC(); i++) { 
     159        addGlobalMeta("Channel #" + i + " Comment", in.readString(128)); 
     160        gains[i] = in.readFloat(); 
     161        detectorOffsets[i] = in.readFloat(); 
     162        pinholes[i] = in.readFloat(); 
     163        in.skipBytes(24); 
     164      } 
     165    } 
     166 
     167    int offset = 336 + (164 * getSizeC()); 
    158168    for (int i=0; i<getSizeC(); i++) { 
    159       addGlobalMeta("Channel #" + i + " Comment", in.readString(128)); 
    160       gains[i] = in.readFloat(); 
    161       detectorOffsets[i] = in.readFloat(); 
    162       pinholes[i] = in.readFloat(); 
    163       in.skipBytes(24); 
    164       int offset = 336 + (164 * getSizeC()) + 
    165         (i * getSizeX() * getSizeY() * getSizeZ()); 
    166169      for (int j=0; j<getSizeZ(); j++) { 
    167170        offsets[i*getSizeZ() + j] = offset + (j * getSizeX() * getSizeY()); 
    168171      } 
    169     } 
     172      offset += getSizeX() * getSizeY() * getSizeZ(); 
     173    } 
     174 
     175    addGlobalMeta("Version", version); 
     176    addGlobalMeta("Image name", imageName); 
     177    addGlobalMeta("Image comment", description); 
     178    addGlobalMeta("Survey performed", isSurvey == 0); 
     179    addGlobalMeta("Original date", date); 
    170180 
    171181    LOGGER.info("Populating metadata"); 
     
    188198    // populate Image data 
    189199 
    190     MetadataTools.setDefaultCreationDate(store, id, 0); 
    191  
    192     // link Instrument and Image 
    193     String instrumentID = MetadataTools.createLSID("Instrument", 0); 
    194     store.setInstrumentID(instrumentID, 0); 
    195     store.setImageInstrumentRef(instrumentID, 0); 
    196  
    197     // populate Dimensions data 
    198  
    199     store.setDimensionsPhysicalSizeX(new Double(dx), 0, 0); 
    200     store.setDimensionsPhysicalSizeY(new Double(dy), 0, 0); 
    201     store.setDimensionsPhysicalSizeZ(new Double(dz), 0, 0); 
    202     store.setDimensionsTimeIncrement(1.0, 0, 0); 
    203     store.setDimensionsWaveIncrement(1, 0, 0); 
    204  
    205     // populate LogicalChannel data 
    206  
    207     for (int i=0; i<getSizeC(); i++) { 
    208       if (pinholes[i] > 0) { 
    209         store.setLogicalChannelPinholeSize(new Double(pinholes[i]), 0, i); 
    210       } 
    211     } 
    212  
    213     // populate Detector data 
    214  
    215     for (int i=0; i<getSizeC(); i++) { 
    216       if (gains[i] > 0) { 
    217         store.setDetectorSettingsGain(new Double(gains[i]), 0, i); 
    218       } 
    219       store.setDetectorSettingsOffset(new Double(offsets[i]), i, 0); 
    220  
    221       // link DetectorSettings to an actual Detector 
    222       String detectorID = MetadataTools.createLSID("Detector", 0, i); 
    223       store.setDetectorID(detectorID, 0, i); 
    224       store.setDetectorType("Unknown", 0, i); 
    225       store.setDetectorSettingsDetector(detectorID, 0, i); 
    226     } 
    227  
    228     // CTR CHECK 
    229     //store.setObjectiveCalibratedMagnification(new Double(mag), 0, 0); 
     200    store.setImageName(imageName, 0); 
     201    MetadataTools.setDefaultCreationDate(store, currentId, 0); 
     202 
     203    if (getMetadataOptions().getMetadataLevel() == MetadataLevel.ALL) { 
     204      store.setImageDescription(description, 0); 
     205 
     206      // link Instrument and Image 
     207      String instrumentID = MetadataTools.createLSID("Instrument", 0); 
     208      store.setInstrumentID(instrumentID, 0); 
     209      store.setImageInstrumentRef(instrumentID, 0); 
     210 
     211      // populate Dimensions data 
     212 
     213      store.setDimensionsPhysicalSizeX(new Double(dx), 0, 0); 
     214      store.setDimensionsPhysicalSizeY(new Double(dy), 0, 0); 
     215      store.setDimensionsPhysicalSizeZ(new Double(dz), 0, 0); 
     216      store.setDimensionsTimeIncrement(1.0, 0, 0); 
     217      store.setDimensionsWaveIncrement(1, 0, 0); 
     218 
     219      // populate LogicalChannel data 
     220 
     221      for (int i=0; i<getSizeC(); i++) { 
     222        if (pinholes[i] > 0) { 
     223          store.setLogicalChannelPinholeSize(new Double(pinholes[i]), 0, i); 
     224        } 
     225      } 
     226 
     227      // populate Detector data 
     228 
     229      for (int i=0; i<getSizeC(); i++) { 
     230        if (gains[i] > 0) { 
     231          store.setDetectorSettingsGain(new Double(gains[i]), 0, i); 
     232        } 
     233        store.setDetectorSettingsOffset(new Double(offsets[i]), i, 0); 
     234 
     235        // link DetectorSettings to an actual Detector 
     236        String detectorID = MetadataTools.createLSID("Detector", 0, i); 
     237        store.setDetectorID(detectorID, 0, i); 
     238        store.setDetectorType("Unknown", 0, i); 
     239        store.setDetectorSettingsDetector(detectorID, 0, i); 
     240      } 
     241    } 
    230242  } 
    231243 
  • trunk/components/bio-formats/src/loci/formats/in/ImarisTiffReader.java

    r6026 r6117  
    7474    IFDList tmp = new IFDList(); 
    7575 
    76     for (int i=0; i<ifds.size(); i++) { 
    77       IFD ifd = ifds.get(i); 
     76    for (IFD ifd : ifds) { 
    7877      long[] byteCounts = ifd.getStripByteCounts(); 
    7978      long[] offsets = ifd.getStripOffsets(); 
    8079 
    81       for (int j=0; j<byteCounts.length; j++) { 
     80      for (int i=0; i<byteCounts.length; i++) { 
    8281        IFD t = new IFD(ifd); 
    83         t.putIFDValue(IFD.TILE_BYTE_COUNTS, byteCounts[j]); 
    84         t.putIFDValue(IFD.TILE_OFFSETS, offsets[j]); 
     82        t.putIFDValue(IFD.TILE_BYTE_COUNTS, byteCounts[i]); 
     83        t.putIFDValue(IFD.TILE_OFFSETS, offsets[i]); 
    8584        tmp.add(t); 
    8685      } 
     
    112111    MetadataTools.populatePixels(store, this); 
    113112 
    114     String description = null, creationDate = null; 
    115     Vector<Integer> emWave = new Vector<Integer>(); 
    116     Vector<Integer> exWave = new Vector<Integer>(); 
    117     Vector<String> channelNames = new Vector<String>(); 
     113    if (getMetadataOptions().getMetadataLevel() == MetadataLevel.ALL) { 
     114      String description = null, creationDate = null; 
     115      Vector<Integer> emWave = new Vector<Integer>(); 
     116      Vector<Integer> exWave = new Vector<Integer>(); 
     117      Vector<String> channelNames = new Vector<String>(); 
    118118 
    119     if (comment != null && comment.startsWith("[")) { 
    120       // parse key/value pairs 
    121       StringTokenizer st = new StringTokenizer(comment, "\n"); 
    122       while (st.hasMoreTokens()) { 
    123         String line = st.nextToken(); 
    124         int equals = line.indexOf("="); 
    125         if (equals < 0) continue; 
    126         String key = line.substring(0, equals).trim(); 
    127         String value = line.substring(equals + 1).trim(); 
    128         addGlobalMeta(key, value); 
     119      if (comment != null && comment.startsWith("[")) { 
     120        // parse key/value pairs 
     121        StringTokenizer st = new StringTokenizer(comment, "\n"); 
     122        while (st.hasMoreTokens()) { 
     123          String line = st.nextToken(); 
     124          int equals = line.indexOf("="); 
     125          if (equals < 0) continue; 
     126          String key = line.substring(0, equals).trim(); 
     127          String value = line.substring(equals + 1).trim(); 
     128          addGlobalMeta(key, value); 
    129129 
    130         if (key.equals("Description")) { 
    131           description = value; 
     130          if (key.equals("Description")) { 
     131            description = value; 
     132          } 
     133          else if (key.equals("LSMEmissionWavelength") && !value.equals("0")) { 
     134            emWave.add(new Integer(value)); 
     135          } 
     136          else if (key.equals("LSMExcitationWavelength") && !value.equals("0")) 
     137          { 
     138            exWave.add(new Integer(value)); 
     139          } 
     140          else if (key.equals("Name") && !currentId.endsWith(value)) { 
     141            channelNames.add(value); 
     142          } 
     143          else if (key.equals("RecordingDate")) { 
     144            value = value.replaceAll(" ", "T"); 
     145            creationDate = value.substring(0, value.indexOf(".")); 
     146          } 
    132147        } 
    133         else if (key.equals("LSMEmissionWavelength") && !value.equals("0")) { 
    134           emWave.add(new Integer(value)); 
    135         } 
    136         else if (key.equals("LSMExcitationWavelength") && !value.equals("0")) { 
    137           exWave.add(new Integer(value)); 
    138         } 
    139         else if (key.equals("Name") && !currentId.endsWith(value)) { 
    140           channelNames.add(value); 
    141         } 
    142         else if (key.equals("RecordingDate")) { 
    143           value = value.replaceAll(" ", "T"); 
    144           creationDate = value.substring(0, value.indexOf(".")); 
    145         } 
     148        metadata.remove("Comment"); 
    146149      } 
    147       metadata.remove("Comment"); 
    148     } 
    149150 
    150     // populate Image data 
    151     store.setImageDescription(description, 0); 
    152     store.setImageCreationDate(creationDate, 0); 
     151      // populate Image data 
     152      store.setImageDescription(description, 0); 
     153      store.setImageCreationDate(creationDate, 0); 
    153154 
    154     // populate LogicalChannel data 
    155     for (int i=0; i<emWave.size(); i++) { 
    156       store.setLogicalChannelEmWave(emWave.get(i), 0, i); 
    157       store.setLogicalChannelExWave(exWave.get(i), 0, i); 
    158       store.setLogicalChannelName(channelNames.get(i), 0, i); 
     155      // populate LogicalChannel data 
     156      for (int i=0; i<emWave.size(); i++) { 
     157        store.setLogicalChannelEmWave(emWave.get(i), 0, i); 
     158        store.setLogicalChannelExWave(exWave.get(i), 0, i); 
     159        store.setLogicalChannelName(channelNames.get(i), 0, i); 
     160      } 
    159161    } 
    160162  } 
  • trunk/components/bio-formats/src/loci/formats/services/NetCDFService.java

    r6026 r6117  
    9595   * all zeroes. 
    9696   * @param shape Array specifying the extents in each dimension. This 
    97    * becomes the shape of the returned Array.  
     97   * becomes the shape of the returned Array. 
    9898   * @return The Java n-dimensional array representation of the path's values. 
    9999   * @throws ServiceException If there is an error with the range of values 
  • trunk/components/bio-formats/src/loci/formats/services/NetCDFServiceImpl.java

    r6026 r6117  
    9797  public void setFile(String file) throws IOException { 
    9898    this.currentFile = file; 
    99     // HACK - NetCDF prints a fair number of warning messages to stdout 
    100     // we need to filter these out so that they don't interfere with omebf 
    101     // FIXME: Get rid of this. 
    102     PrintStream out = new PrintStream(System.out) { 
    103       public void print(String s) { 
    104         if (s == null || !s.trim().startsWith("WARN:")) super.print(s); 
    105       } 
    106       public void println(String s) { 
    107         if (s == null || !s.trim().startsWith("WARN:")) super.println(s); 
    108       } 
    109     }; 
    110     System.setOut(out); 
    11199 
    112100    String currentId = Location.getMappedId(currentFile); 
     
    166154   */ 
    167155  public Object getArray(String path, int[] origin, int[] shape) 
    168     throws ServiceException { 
     156    throws ServiceException 
     157  { 
    169158    String groupName = getDirectory(path); 
    170159    String variableName = getName(path); 
     
    174163    try { 
    175164      if (origin != null && shape != null) { 
    176         return variable.read(origin, shape).reduce(); 
     165        return variable.read(origin, shape).reduce().copyToNDJavaArray(); 
    177166      } 
    178167      else { 
Note: See TracChangeset for help on using the changeset viewer.