Changeset 3013 for trunk


Ignore:
Timestamp:
07/26/07 10:15:29 (13 years ago)
Author:
melissa
Message:

Added OME-TIFF writer. Also added API for writing multi-series files, which will be implemented...eventually.

Location:
trunk/loci
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/ConsoleTools.java

    r2857 r3013  
    300300      LogTools.println("\tPixel type = " + 
    301301        FormatTools.getPixelTypeString(pixelType)); 
     302      LogTools.println("\tMetadata complete = " + reader.isMetadataComplete()); 
    302303      if (doMeta) { 
    303304        LogTools.println("\t-----"); 
     
    569570    LogTools.print(in + " "); 
    570571    ImageReader reader = new ImageReader(); 
     572    reader.setOriginalMetadataPopulated(true);  
     573 
     574    try { 
     575      Class c = Class.forName("loci.formats.ome.OMEXMLMetadataStore"); 
     576      MetadataStore ms = (MetadataStore) c.newInstance(); 
     577      reader.setMetadataStore(ms); 
     578    } 
     579    catch (Throwable t) {  
     580      LogTools.println("OME-Java library not found.");  
     581    } 
     582 
    571583    reader.setId(in); 
    572584    LogTools.print("[" + reader.getFormat() + "] -> " + out + " "); 
     585     
     586    MetadataStore store = reader.getMetadataStore();  
     587    if (store instanceof MetadataRetrieve) { 
     588      writer.setMetadataRetrieve((MetadataRetrieve) store); 
     589    } 
     590 
    573591    writer.setId(out); 
    574592    LogTools.print("[" + writer.getFormat() + "] "); 
  • trunk/loci/formats/FormatTools.java

    r2966 r3013  
    447447  } 
    448448 
     449  // -- Utility methods -- metadata conversion -- 
     450 
     451  public static void convertMetadata(MetadataRetrieve source,  
     452    MetadataStore dest) 
     453  { 
     454    Integer ii = null; 
     455    int globalPixCount = 0; 
     456 
     457    for (int i=0; i<source.getImageCount(); i++) {   
     458      ii = new Integer(i);  
     459      dest.setImage(source.getImageName(ii), source.getCreationDate(ii), 
     460        source.getDescription(ii), ii); 
     461     
     462      dest.setDimensions(source.getPixelSizeX(ii),  
     463        source.getPixelSizeY(ii), source.getPixelSizeZ(ii), 
     464        source.getPixelSizeC(ii), source.getPixelSizeT(ii), ii); 
     465     
     466      for (int j=0; j<source.getPixelsCount(ii); j++) { 
     467        Integer p = new Integer(j);  
     468        dest.setPixels(source.getSizeX(ii), source.getSizeY(ii), 
     469          source.getSizeZ(ii), source.getSizeC(ii),  
     470          source.getSizeT(ii),  
     471          new Integer(pixelTypeFromString(source.getPixelType(ii))),  
     472          source.getBigEndian(ii), source.getDimensionOrder(ii), ii, p); 
     473    
     474        dest.setDisplayOptions(source.getZoom(ii), 
     475          source.isRedChannelOn(ii), source.isGreenChannelOn(ii), 
     476          source.isBlueChannelOn(ii), source.isDisplayRGB(ii), 
     477          source.getColorMap(ii), source.getZStart(ii), 
     478          source.getZStop(ii), source.getTStart(ii), 
     479          source.getTStop(ii), ii, p, new Integer(0), new Integer(1), 
     480            new Integer(2), new Integer(0)); 
     481 
     482        Integer globalPix = new Integer(globalPixCount); 
     483        for (int ch=0; ch<source.getChannelCount(globalPix); ch++) { 
     484          Integer c = new Integer(ch); 
     485          dest.setLogicalChannel(ch, source.getChannelName(globalPix, c), 
     486            source.getChannelNDFilter(globalPix, c),  
     487            source.getEmWave(globalPix, c), source.getExWave(globalPix, c), 
     488            source.getPhotometricInterpretation(globalPix, c), 
     489            source.getMode(globalPix, c), globalPix); 
     490         
     491          dest.setChannelGlobalMinMax(ch, source.getGlobalMin(globalPix, c), 
     492            source.getGlobalMax(globalPix, c), globalPix); 
     493         
     494          dest.setDisplayChannel(c, source.getBlackLevel(globalPix, c), 
     495            source.getWhiteLevel(globalPix, c), source.getGamma(globalPix, c),  
     496            globalPix); 
     497        }  
     498 
     499        globalPixCount++;  
     500      } 
     501   
     502      dest.setImagingEnvironment(source.getTemperature(ii), 
     503        source.getAirPressure(ii), source.getHumidity(ii), 
     504        source.getCO2Percent(ii), ii); 
     505    } 
     506 
     507    for (int i=0; i<source.getExperimenterCount(); i++) { 
     508      ii = new Integer(i);  
     509      dest.setExperimenter(source.getFirstName(ii),  
     510        source.getLastName(ii), source.getEmail(ii), 
     511        source.getInstitution(ii), source.getDataDirectory(ii), 
     512        source.getGroup(ii), ii); 
     513    } 
     514 
     515    for (int i=0; i<source.getGroupCount(); i++) { 
     516      ii = new Integer(i);  
     517      dest.setGroup(source.getGroupName(ii), source.getLeader(ii), 
     518        source.getContact(ii), ii); 
     519    } 
     520 
     521    for (int i=0; i<source.getInstrumentCount(); i++) { 
     522      ii = new Integer(i);  
     523      dest.setInstrument(source.getManufacturer(ii), 
     524        source.getModel(ii), source.getSerialNumber(ii), 
     525        source.getType(ii), ii); 
     526    } 
     527 
     528    for (int i=0; i<source.getDisplayROICount(); i++) { 
     529      ii = new Integer(i);  
     530      dest.setDisplayROI(source.getX0(ii), source.getY0(ii), 
     531        source.getZ0(ii), source.getX1(ii), source.getY1(ii), 
     532        source.getZ1(ii), source.getT0(ii), source.getT1(ii), 
     533        source.getDisplayOptions(ii), ii); 
     534    } 
     535 
     536    for (int i=0; i<source.getStageLabelCount(); i++) {  
     537      ii = new Integer(i);  
     538      dest.setStageLabel(source.getStageName(ii), source.getStageX(ii), 
     539        source.getStageY(ii), source.getStageZ(ii), ii); 
     540    } 
     541 
     542    ii = null; 
     543 
     544    dest.setPlaneInfo(0, 0, 0, source.getTimestamp(ii, ii, ii, ii), 
     545      source.getExposureTime(ii, ii, ii, ii), ii); 
     546 
     547    dest.setLightSource(source.getLightManufacturer(ii), 
     548      source.getLightModel(ii), source.getLightSerial(ii), ii, ii); 
     549 
     550    dest.setLaser(source.getLaserType(ii), source.getLaserMedium(ii), 
     551      source.getLaserWavelength(ii), source.isFrequencyDoubled(ii), 
     552      source.isTunable(ii), source.getPulse(ii), 
     553      source.getPower(ii), ii, ii, ii, ii); 
     554 
     555    dest.setFilament(source.getFilamentType(ii), 
     556      source.getFilamentPower(ii), ii, ii); 
     557 
     558    dest.setArc(source.getArcType(ii), source.getArcPower(ii), ii, ii); 
     559 
     560    dest.setDetector(source.getDetectorManufacturer(ii), 
     561      source.getDetectorModel(ii), source.getDetectorSerial(ii), 
     562      source.getDetectorType(ii), source.getDetectorGain(ii), 
     563      source.getDetectorVoltage(ii), 
     564      source.getDetectorOffset(ii), ii, ii); 
     565 
     566    dest.setObjective(source.getObjectiveManufacturer(ii), 
     567      source.getObjectiveModel(ii), source.getObjectiveSerial(ii),  
     568      source.getLensNA(ii), 
     569      source.getObjectiveMagnification(ii), ii, ii); 
     570 
     571    dest.setExcitationFilter(source.getExcitationManufacturer(ii), 
     572      source.getExcitationModel(ii), source.getExcitationLotNumber(ii), 
     573      source.getExcitationType(ii), ii); 
     574 
     575    dest.setDichroic(source.getDichroicManufacturer(ii), 
     576      source.getDichroicModel(ii), source.getDichroicLotNumber(ii), ii); 
     577 
     578    dest.setEmissionFilter(source.getEmissionManufacturer(ii), 
     579      source.getEmissionModel(ii), source.getEmissionLotNumber(ii), 
     580      source.getEmissionType(ii), ii); 
     581 
     582    dest.setFilterSet(source.getFilterSetManufacturer(ii), 
     583      source.getFilterSetModel(ii),  
     584      source.getFilterSetLotNumber(ii), ii, ii); 
     585 
     586    dest.setOTF(source.getOTFSizeX(ii), source.getOTFSizeY(ii), 
     587      source.getOTFPixelType(ii), source.getOTFPath(ii), 
     588      source.getOTFOpticalAxisAverage(ii), ii, ii, ii, ii); 
     589  } 
     590 
    449591} 
  • trunk/loci/formats/FormatWriter.java

    r2796 r3013  
    5151  protected boolean initialized; 
    5252 
     53  protected MetadataRetrieve retrieve; 
     54 
    5355  // -- Constructors -- 
    5456 
     
    7072  } 
    7173 
     74  /* @see IFormatWriter#saveBytes(byte[], int, boolean, boolean) */ 
     75  public void saveBytes(byte[] bytes, int series, boolean lastInSeries,  
     76    boolean last) throws FormatException, IOException 
     77  { 
     78    throw new FormatException("Not implemented yet."); 
     79  } 
     80 
     81  /* @see IFormatWriter#saveImage(Image, int, boolean, boolean) */ 
     82  public void saveImage(Image image, int series, boolean lastInSeries,  
     83    boolean last) throws FormatException, IOException 
     84  { 
     85    throw new FormatException("Not implemented yet."); 
     86  } 
     87 
    7288  /* @see IFormatWriter#canDoStacks() */ 
    7389  public boolean canDoStacks() { return false; } 
     90 
     91  /* @see IFormatWriter#setMetadataRetrieve(MetadataRetrieve) */ 
     92  public void setMetadataRetrieve(MetadataRetrieve r) { 
     93    FormatTools.assertId(currentId, false, 1); 
     94    retrieve = r; 
     95  } 
    7496 
    7597  /* @see IFormatWriter#setColorModel(ColorModel) */ 
  • trunk/loci/formats/IFormatWriter.java

    r2796 r3013  
    3939 
    4040  /** 
     41   * Saves the given image to the given series in the current file. 
     42   * If this image is the last one in the series, the lastInSeries flag 
     43   * must be set. 
     44   * If this image is the last one in the file, the last flag must be set. 
     45   */ 
     46  void saveImage(Image image, int series, boolean lastInSeries, boolean last)  
     47    throws FormatException, IOException; 
     48 
     49  /** 
    4150   * Saves the given byte array to the current file. 
    4251   * If this is the last array to be written, the last flag must be set. 
     
    4554    throws FormatException, IOException; 
    4655 
     56  /** 
     57   * Saves the given byte array to the given series in the current file. 
     58   * If this is the last array in the series, the lastInSeries flag must be set. 
     59   * If this is the last array to be written, the last flag must be set. 
     60   */ 
     61  void saveBytes(byte[] bytes, int series, boolean lastInSeries, boolean last) 
     62    throws FormatException, IOException; 
     63 
    4764  /** Reports whether the writer can save multiple images to a single file. */ 
    4865  boolean canDoStacks(); 
     66 
     67  /** Sets the retrievable metadata. */ 
     68  void setMetadataRetrieve(MetadataRetrieve r); 
    4969 
    5070  /** Sets the color model. */ 
  • trunk/loci/formats/ImageWriter.java

    r2857 r3013  
    170170  } 
    171171 
     172  /* @see IFormatWriter#saveBytes(byte[], int, boolean, boolean) */ 
     173  public void saveBytes(byte[] bytes, int series, boolean lastInSeries,  
     174    boolean last) throws FormatException, IOException 
     175  { 
     176    getWriter().saveBytes(bytes, series, lastInSeries, last); 
     177  }  
     178 
    172179  /* @see IFormatWriter#saveImage(Image, boolean) */ 
    173180  public void saveImage(Image image, boolean last) 
     
    175182  { 
    176183    getWriter().saveImage(image, last); 
     184  } 
     185 
     186  /* @see IFormatWriter#saveImage(Image, int, boolean, boolean) */ 
     187  public void saveImage(Image image, int series, boolean lastInSeries,  
     188    boolean last) throws FormatException, IOException 
     189  { 
     190    getWriter().saveImage(image, series, lastInSeries, last); 
    177191  } 
    178192 
     
    180194  public boolean canDoStacks() { 
    181195    return getWriter().canDoStacks(); 
     196  } 
     197 
     198  /* @see IFormatWriter#setMetadataRetrieve(MetadataRetrieve) */ 
     199  public void setMetadataRetrieve(MetadataRetrieve r) { 
     200    for (int i=0; i<writers.length; i++) writers[i].setMetadataRetrieve(r); 
    182201  } 
    183202 
  • trunk/loci/formats/ome/OMEWriter.java

    r2867 r3013  
    6363  private int planesWritten = 0; 
    6464 
    65   private OMEXMLMetadataStore metadata; 
     65  private MetadataRetrieve metadata; 
    6666 
    6767  private DataServices rs; 
     
    8181  // -- OMEWriter API methods -- 
    8282 
    83   public void setMetadataStore(OMEXMLMetadataStore store) { 
     83  public void setMetadataStore(MetadataRetrieve store) { 
    8484    metadata = store; 
    8585  } 
     
    438438    reader.setMetadataStore(new OMEXMLMetadataStore()); 
    439439    reader.setId(id); 
    440     uploader.setMetadataStore((OMEXMLMetadataStore) reader.getMetadataStore()); 
     440    uploader.setMetadataStore((MetadataRetrieve) reader.getMetadataStore()); 
    441441    for (int i=0; i<reader.getImageCount(); i++) { 
    442442      uploader.saveImage(reader.openImage(i), i == reader.getImageCount() - 1); 
  • trunk/loci/formats/ome/OMEXMLMetadataStore.java

    r3011 r3013  
    4343 * @author Melissa Linkert linkert at wisc.edu 
    4444 */ 
    45 public class OMEXMLMetadataStore implements MetadataStore { 
     45public class OMEXMLMetadataStore implements MetadataStore, MetadataRetrieve { 
     46 
     47  // -- Static fields -- 
     48 
     49  /** Logger for this class. */ 
     50  //private static Log log = LogFactory.getLog(OMEXMLMetadataStore.class); 
    4651 
    4752  // -- Fields -- 
     
    129134  } 
    130135 
    131   // -- OMEXMLMetadataStore methods - individual attribute retrieval -- 
    132  
    133   /** 
    134    * Gets the nth OME/Image element's Name attribute. 
    135    * @param n the index of the element. If <code>null</code> the default index 
    136    * of 0 will be used. 
    137    */ 
     136  // -- MetadataRetrieve API methods -- 
     137 
     138  /* @see loci.formats.MetadataRetrieve#getImageCount() */ 
     139  public int getImageCount() { 
     140    return getNodeCount("Image");  
     141  } 
     142 
     143  /* @see loci.formats.MetadataRetrieve#getImageName(Integer) */  
    138144  public String getImageName(Integer n) { 
    139145    int ndx = n == null ? 0 : n.intValue(); 
     
    141147  } 
    142148 
    143   /** 
    144    * Gets the nth OME/Image element's CreationDate attribute. 
    145    * @param n the index of the element. If <code>null</code> the default index 
    146    * of 0 will be used. 
    147    */ 
     149  /* @see loci.formats.MetadataRetrieve#getCreationDate(Integer) */  
    148150  public String getCreationDate(Integer n) { 
    149151    int ndx = n == null ? 0 : n.intValue(); 
     
    151153  } 
    152154 
    153   /** 
    154    * Gets the nth OME/Image element's Description attribute. 
    155    * @param n the index of the element. If <code>null</code> the default index 
    156    * of 0 will be used. 
    157    */ 
     155  /* @see loci.formats.MetadataRetrieve#getDescription(Integer) */  
    158156  public String getDescription(Integer n) { 
    159157    int ndx = n == null ? 0 : n.intValue(); 
     
    161159  } 
    162160 
    163   /** 
    164    * Gets the nth OME/Image/CA/Dimensions element's PixelSizeX attribute. 
    165    * @param n the index of the element. If <code>null</code> the default index 
    166    * of 0 will be used. 
    167    */ 
     161  /* @see loci.formats.MetadataRetrieve#getExperimenterCount() */ 
     162  public int getExperimenterCount() { 
     163    return getNodeCount("Experimenter"); 
     164  } 
     165 
     166  /* @see loci.formats.MetadataRetrieve#getFirstName(Integer) */ 
     167  public String getFirstName(Integer n) { 
     168    int ndx = n == null ? 0 : n.intValue(); 
     169    return getAttribute("Experimenter", "FirstName", ndx); 
     170  } 
     171 
     172  /* @see loci.formats.MetadataRetrieve#getLastName(Integer) */ 
     173  public String getLastName(Integer n) { 
     174    int ndx = n == null ? 0 : n.intValue(); 
     175    return getAttribute("Experimenter", "LastName", ndx); 
     176  } 
     177 
     178  /* @see loci.formats.MetadataRetrieve#getEmail(Integer) */ 
     179  public String getEmail(Integer n) { 
     180    int ndx = n == null ? 0 : n.intValue(); 
     181    return getAttribute("Experimenter", "Email", ndx); 
     182  } 
     183   
     184  /* @see loci.formats.MetadataRetrieve#getInstitution(Integer) */ 
     185  public String getInstitution(Integer n) { 
     186    int ndx = n == null ? 0 : n.intValue(); 
     187    return getAttribute("Experimenter", "Institution", ndx);  
     188  } 
     189 
     190  /* @see loci.formats.MetadataRetrieve#getDataDirectory(Integer) */ 
     191  public String getDataDirectory(Integer n) { 
     192    int ndx = n == null ? 0 : n.intValue(); 
     193    return getAttribute("Experimenter", "DataDirectory", ndx);  
     194  } 
     195 
     196  /* @see loci.formats.MetadataRetrieve#getGroup(Integer) */ 
     197  public Object getGroup(Integer n) { 
     198    int ndx = n == null ? 0 : n.intValue(); 
     199    return getAttribute("Experimenter", "Group", ndx);  
     200  } 
     201 
     202  /* @see loci.formats.MetadataRetrieve#getGroupCount() */ 
     203  public int getGroupCount() { 
     204    return getNodeCount("Group");  
     205  } 
     206 
     207  /* @see loci.formats.MetadataRetrieve#getGroupName(Integer) */ 
     208  public String getGroupName(Integer n) { 
     209    int ndx = n == null ? 0 : n.intValue(); 
     210    return getAttribute("Group", "Name", ndx);  
     211  } 
     212 
     213  /* @see loci.formats.MetadataRetrieve#getLeader(Integer) */ 
     214  public Object getLeader(Integer n) { 
     215    int ndx = n == null ? 0 : n.intValue(); 
     216    return getAttribute("Group", "Leader", ndx);  
     217  } 
     218 
     219  /* @see loci.formats.MetadataRetrieve#getContact(Integer) */ 
     220  public Object getContact(Integer n) { 
     221    int ndx = n == null ? 0 : n.intValue(); 
     222    return getAttribute("Group", "Contact", ndx);  
     223  } 
     224 
     225  /* @see loci.formats.MetadataRetrieve#getInstrumentCount() */ 
     226  public int getInstrumentCount() { 
     227    return getNodeCount("Instrument");  
     228  } 
     229 
     230  /* @see loci.formats.MetadataRetrieve#getManufacturer(Integer) */ 
     231  public String getManufacturer(Integer n) { 
     232    int ndx = n == null ? 0 : n.intValue(); 
     233    return getAttribute("Instrument", "Manufacturer", ndx);  
     234  } 
     235 
     236  /* @see loci.formats.MetadataRetrieve#getModel(Integer) */ 
     237  public String getModel(Integer n) { 
     238    int ndx = n == null ? 0 : n.intValue(); 
     239    return getAttribute("Instrument", "Model", ndx);  
     240  } 
     241 
     242  /* @see loci.formats.MetadataRetrieve#getSerialNumber(Integer) */ 
     243  public String getSerialNumber(Integer n) { 
     244    int ndx = n == null ? 0 : n.intValue(); 
     245    return getAttribute("Instrument", "SerialNumber", ndx);  
     246  } 
     247 
     248  /* @see loci.formats.MetadataRetrieve#getType(Integer) */ 
     249  public String getType(Integer n) { 
     250    int ndx = n == null ? 0 : n.intValue(); 
     251    return getAttribute("Instrument", "Type", ndx);  
     252  } 
     253 
     254  /* @see loci.formats.MetadataRetrieve#getPixelSizeX(Integer) */  
    168255  public Float getPixelSizeX(Integer n) { 
    169256    int ndx = n == null ? 0 : n.intValue(); 
     
    172259  } 
    173260 
    174   /** 
    175    * Gets the nth OME/Image/CA/Dimensions element's PixelSizeY attribute. 
    176    * @param n the index of the element. If <code>null</code> the default index 
    177    * of 0 will be used. 
    178    */ 
     261  /* @see loci.formats.MetadataRetrieve#getPixelSizeY(Integer) */  
    179262  public Float getPixelSizeY(Integer n) { 
    180263    int ndx = n == null ? 0 : n.intValue(); 
     
    183266  } 
    184267 
    185   /** 
    186    * Gets the nth OME/Image/CA/Dimensions element's PixelSizeZ attribute. 
    187    * @param n the index of the element. If <code>null</code> the default index 
    188    * of 0 will be used. 
    189    */ 
     268  /* @see loci.formats.MetadataRetrieve#getPixelSizeZ(Integer) */  
    190269  public Float getPixelSizeZ(Integer n) { 
    191270    int ndx = n == null ? 0 : n.intValue(); 
     
    194273  } 
    195274 
    196   /** 
    197    * Gets the nth OME/Image/CA/Dimensions element's PixelSizeC attribute. 
    198    * @param n the index of the element. If <code>null</code> the default index 
    199    * of 0 will be used. 
    200    */ 
     275  /* @see loci.formats.MetadataRetrieve#getPixelSizeC(Integer) */  
    201276  public Float getPixelSizeC(Integer n) { 
    202277    int ndx = n == null ? 0 : n.intValue(); 
     
    205280  } 
    206281 
    207   /** 
    208    * Gets the nth OME/Image/CA/Dimensions element's PixelSizeT attribute. 
    209    * @param n the index of the element. If <code>null</code> the default index 
    210    * of 0 will be used. 
    211    */ 
     282  /* @see loci.formats.MetadataRetrieve#getPixelSizeT(Integer) */  
    212283  public Float getPixelSizeT(Integer n) { 
    213284    int ndx = n == null ? 0 : n.intValue(); 
     
    216287  } 
    217288 
    218   /** 
    219    * Gets the nth OME/Image/CA/Pixels element's SizeX attribute. 
    220    * @param n the index of the element. If <code>null</code> the default index 
    221    * of 0 will be used. 
    222    */ 
    223   public Integer getSizeX(Integer n) { 
    224     int ndx = n == null ? 0 : n.intValue(); 
     289  /* @see loci.formats.MetadataRetrieve#getDisplayROICount() */ 
     290  public int getDisplayROICount() { 
     291    return getNodeCount("DisplayROI");  
     292  } 
     293 
     294  /* @see loci.formats.MetadataRetrieve#getX0(Integer) */ 
     295  public Integer getX0(Integer n) { 
     296    int ndx = n == null ? 0 : n.intValue(); 
     297    String x0 = getAttribute("DisplayROI", "X0", ndx);  
     298    return x0 == null ? null : new Integer(x0);  
     299  } 
     300 
     301  /* @see loci.formats.MetadataRetrieve#getY0(Integer) */ 
     302  public Integer getY0(Integer n) { 
     303    int ndx = n == null ? 0 : n.intValue(); 
     304    String y0 = getAttribute("DisplayROI", "Y0", ndx);  
     305    return y0 == null ? null : new Integer(y0);  
     306  } 
     307 
     308  /* @see loci.formats.MetadataRetrieve#getZ0(Integer) */ 
     309  public Integer getZ0(Integer n) { 
     310    int ndx = n == null ? 0 : n.intValue(); 
     311    String z0 = getAttribute("DisplayROI", "Z0", ndx);  
     312    return z0 == null ? null : new Integer(z0);  
     313  } 
     314 
     315  /* @see loci.formats.MetadataRetrieve#getT0(Integer) */ 
     316  public Integer getT0(Integer n) { 
     317    int ndx = n == null ? 0 : n.intValue(); 
     318    String t0 = getAttribute("DisplayROI", "T0", ndx);  
     319    return t0 == null ? null : new Integer(t0);  
     320  } 
     321 
     322  /* @see loci.formats.MetadataRetrieve#getX1(Integer) */ 
     323  public Integer getX1(Integer n) { 
     324    int ndx = n == null ? 0 : n.intValue(); 
     325    String x1 = getAttribute("DisplayROI", "X1", ndx);  
     326    return x1 == null ? null : new Integer(x1);  
     327  } 
     328 
     329  /* @see loci.formats.MetadataRetrieve#getY1(Integer) */ 
     330  public Integer getY1(Integer n) { 
     331    int ndx = n == null ? 0 : n.intValue(); 
     332    String y1 = getAttribute("DisplayROI", "Y1", ndx);  
     333    return y1 == null ? null : new Integer(y1);  
     334  } 
     335 
     336  /* @see loci.formats.MetadataRetrieve#getZ1(Integer) */ 
     337  public Integer getZ1(Integer n) { 
     338    int ndx = n == null ? 0 : n.intValue(); 
     339    String z1 = getAttribute("DisplayROI", "Z1", ndx);  
     340    return z1 == null ? null : new Integer(z1);  
     341  } 
     342 
     343  /* @see loci.formats.MetadataRetrieve#getT1(Integer) */ 
     344  public Integer getT1(Integer n) { 
     345    int ndx = n == null ? 0 : n.intValue(); 
     346    String t1 = getAttribute("DisplayROI", "T1", ndx);  
     347    return t1 == null ? null : new Integer(t1);  
     348  } 
     349 
     350  /* @see loci.formats.MetadataRetrieve#tgetDisplayOptions(Integer) */ 
     351  public Object getDisplayOptions(Integer n) { 
     352    int ndx = n == null ? 0 : n.intValue(); 
     353    return getAttribute("DisplayROI", "DisplayOptions", ndx);  
     354  } 
     355 
     356  /* @see loci.formats.MetadataRetrieve#getPixelsCount(Integer) */ 
     357  public int getPixelsCount(Integer n) { 
     358    return getNodeCount("Image") / getNodeCount("Pixels");  
     359  } 
     360 
     361  /* @see loci.formats.MetadataRetrieve#getSizeX(Integer) */  
     362  public Integer getSizeX(Integer image) { 
     363    int ndx = image == null ? 0 : image.intValue(); 
    225364    String sizeX = getAttribute("Pixels", "SizeX", ndx); 
    226365    return sizeX == null ? null : new Integer(sizeX); 
    227366  } 
    228367 
    229   /** 
    230    * Gets the nth OME/Image/CA/Pixels element's SizeY attribute. 
    231    * @param n the index of the element. If <code>null</code> the default index 
    232    * of 0 will be used. 
    233    */ 
    234   public Integer getSizeY(Integer n) { 
    235     int ndx = n == null ? 0 : n.intValue(); 
     368  /* @see loci.formats.MetadataRetrieve#getSizeY(Integer) */  
     369  public Integer getSizeY(Integer image) { 
     370    int ndx = image == null ? 0 : image.intValue(); 
    236371    String sizeY = getAttribute("Pixels", "SizeY", ndx); 
    237372    return sizeY == null ? null : new Integer(sizeY); 
    238373  } 
    239374 
    240   /** 
    241    * Gets the nth OME/Image/CA/Pixels element's SizeZ attribute. 
    242    * @param n the index of the element. If <code>null</code> the default index 
    243    * of 0 will be used. 
    244    */ 
    245   public Integer getSizeZ(Integer n) { 
    246     int ndx = n == null ? 0 : n.intValue(); 
     375  /* @see loci.formats.MetadataRetrieve#getSizeZ(Integer) */  
     376  public Integer getSizeZ(Integer image) { 
     377    int ndx = image == null ? 0 : image.intValue(); 
    247378    String sizeZ = getAttribute("Pixels", "SizeZ", ndx); 
    248379    return sizeZ == null ? null : new Integer(sizeZ); 
    249380  } 
    250381 
    251   /** 
    252    * Gets the nth OME/Image/CA/Pixels element's SizeC attribute. 
    253    * @param n the index of the element. If <code>null</code> the default index 
    254    * of 0 will be used. 
    255    */ 
    256   public Integer getSizeC(Integer n) { 
    257     int ndx = n == null ? 0 : n.intValue(); 
     382  /* @see loci.formats.MetadataRetrieve#getSizeC(Integer) */  
     383  public Integer getSizeC(Integer image) { 
     384    int ndx = image == null ? 0 : image.intValue(); 
    258385    String sizeC = getAttribute("Pixels", "SizeC", ndx); 
    259386    return sizeC == null ? null : new Integer(sizeC); 
    260387  } 
    261388 
    262   /** 
    263    * Gets the nth OME/Image/CA/Pixels element's SizeT attribute. 
    264    * @param n the index of the element. If <code>null</code> the default index 
    265    * of 0 will be used. 
    266    */ 
    267   public Integer getSizeT(Integer n) { 
    268     int ndx = n == null ? 0 : n.intValue(); 
     389  /* @see loci.formats.MetadataRetrieve#getSizeT(Integer) */  
     390  public Integer getSizeT(Integer image) { 
     391    int ndx = image == null ? 0 : image.intValue(); 
    269392    String sizeT = getAttribute("Pixels", "SizeT", ndx); 
    270393    return sizeT == null ? null : new Integer(sizeT); 
    271394  } 
    272395 
    273   /** Gets the nth OME/Image/CA/Pixels element's PixelType attribute. */ 
    274   public String getPixelType(Integer n) { 
    275     int ndx = n == null ? 0 : n.intValue(); 
     396  /* @see loci.formats.MetadataRetrieve#getPixelType(Integer) */  
     397  public String getPixelType(Integer image) { 
     398    int ndx = image == null ? 0 : image.intValue(); 
    276399    return getAttribute("Pixels", "PixelType", ndx); 
    277400  } 
    278401 
    279   /** 
    280    * Gets the nth OME/Image/CA/Pixels element's BigEndian attribute. 
    281    * @param n the index of the element. If <code>null</code> the default index 
    282    * of 0 will be used. 
    283    */ 
    284   public Boolean getBigEndian(Integer n) { 
    285     int ndx = n == null ? 0 : n.intValue(); 
     402  /* @see loci.formats.MetadataRetrieve#getBigEndian(Integer) */  
     403  public Boolean getBigEndian(Integer image) { 
     404    int ndx = image == null ? 0 : image.intValue(); 
    286405    String bigEndian = getAttribute("Pixels", "BigEndian", ndx); 
    287406    return bigEndian == null ? null : 
     
    289408  } 
    290409 
    291   /** 
    292    * Gets the nth OME/Image/CA/Pixels element's DimensionOrder attribute. 
    293    * @param n the index of the element. If <code>null</code> the default index 
    294    * of 0 will be used. 
    295    */ 
    296   public String getDimensionOrder(Integer n) { 
    297     int ndx = n == null ? 0 : n.intValue(); 
     410  /* @see loci.formats.MetadataRetrieve#getDimensionOrder(Integer) */  
     411  public String getDimensionOrder(Integer image) { 
     412    int ndx = image == null ? 0 : image.intValue(); 
    298413    return getAttribute("Pixels", "DimensionOrder", ndx); 
    299414  } 
    300415 
    301   /** 
    302    * Gets the nth OME/Image/CA/StageLabel element's Name attribute. 
    303    * @param n the index of the element. If <code>null</code> the default index 
    304    * of 0 will be used. 
    305    */ 
    306   public String getStageName(String name, Integer n) { 
     416  /* @see loci.formats.MetadataRetrieve#getStageLabelCount() */ 
     417  public int getStageLabelCount() { 
     418    return getNodeCount("StageLabel");  
     419  } 
     420 
     421  /* @see loci.formats.MetadataRetrieve(Integer) */  
     422  public String getStageName(Integer n) { 
    307423    int ndx = n == null ? 0 : n.intValue(); 
    308424    return getAttribute("StageLabel", "Name", ndx); 
    309425  } 
    310426 
    311   /** 
    312    * Gets the nth OME/Image/CA/StageLabel element's X attribute. 
    313    * @param n the index of the element. If <code>null</code> the default index 
    314    * of 0 will be used. 
    315    */ 
     427  /* @see loci.formats.MetadataRetrieve(Integer) */  
    316428  public Float getStageX(Integer n) { 
    317429    int ndx = n == null ? 0 : n.intValue(); 
     
    320432  } 
    321433 
    322   /** 
    323    * Gets the nth OME/Image/CA/StageLabel element's Y attribute. 
    324    * @param n the index of the element. If <code>null</code> the default index 
    325    * of 0 will be used. 
    326    */ 
     434  /* @see loci.formats.MetadataRetrieve(Integer) */  
    327435  public Float getStageY(Integer n) { 
    328436    int ndx = n == null ? 0 : n.intValue(); 
     
    331439  } 
    332440 
    333   /** 
    334    * Gets the nth OME/Image/CA/StageLabel element's Z attribute. 
    335    * @param n the index of the element. If <code>null</code> the default index 
    336    * of 0 will be used. 
    337    */ 
     441  /* @see loci.formats.MetadataRetrieve(Integer) */  
    338442  public Float getStageZ(Integer n) { 
    339443    int ndx = n == null ? 0 : n.intValue(); 
    340444    String stageZ = getAttribute("StageLabel", "Z", ndx); 
    341445    return stageZ == null ? null : new Float(stageZ); 
     446  } 
     447 
     448  /* @see loci.formats.MetadataRetrieve#getChannelCount(Integer) */ 
     449  public int getChannelCount(Integer n) { 
     450    int ndx = n == null ? 0 : n.intValue(); 
     451    ImageNode image = (ImageNode) getChild(root, "Image", ndx); 
     452    CustomAttributesNode ca =  
     453      (CustomAttributesNode) getChild(image, "CustomAttributes", 0); 
     454    Vector v = DOMUtil.getChildElements("LogicalChannel", ca.getDOMElement()); 
     455    return v.size(); 
     456  } 
     457 
     458  /* @see loci.formats.MetadataRetrieve#getChannelName(Integer, Integer) */ 
     459  public String getChannelName(Integer pixels, Integer channel) { 
     460    int ndx = pixels == null ? 0 : pixels.intValue(); 
     461    ImageNode image = (ImageNode) getChild(root, "Image", ndx); 
     462    CustomAttributesNode ca =  
     463      (CustomAttributesNode) getChild(image, "CustomAttributes", 0); 
     464    LogicalChannelNode ch = (LogicalChannelNode)  
     465      getChild(ca, "LogicalChannel", channel == null ? 0 : channel.intValue());  
     466    return ch.getName();  
     467  } 
     468 
     469  /* @see loci.formats.MetadataRetrieve#getChannelNDFilter(Integer, Integer) */ 
     470  public Float getChannelNDFilter(Integer pixels, Integer channel) { 
     471    int ndx = pixels == null ? 0 : pixels.intValue(); 
     472    ImageNode image = (ImageNode) getChild(root, "Image", ndx); 
     473    CustomAttributesNode ca =  
     474      (CustomAttributesNode) getChild(image, "CustomAttributes", 0); 
     475    LogicalChannelNode ch = (LogicalChannelNode)  
     476      getChild(ca, "LogicalChannel", channel == null ? 0 : channel.intValue());  
     477    return ch.getNDFilter();  
     478  } 
     479 
     480  /* @see loci.formats.MetadataRetrieve#getEmWave(Integer, Integer) */ 
     481  public Integer getEmWave(Integer pixels, Integer channel) { 
     482    int ndx = pixels == null ? 0 : pixels.intValue(); 
     483    ImageNode image = (ImageNode) getChild(root, "Image", ndx); 
     484    CustomAttributesNode ca =  
     485      (CustomAttributesNode) getChild(image, "CustomAttributes", 0); 
     486    LogicalChannelNode ch = (LogicalChannelNode)  
     487      getChild(ca, "LogicalChannel", channel == null ? 0 : channel.intValue());  
     488    return ch.getEmissionWavelength();  
     489  } 
     490 
     491  /* @see loci.formats.MetadataRetrieve#getExWave(Integer, Integer) */ 
     492  public Integer getExWave(Integer pixels, Integer channel) { 
     493    int ndx = pixels == null ? 0 : pixels.intValue(); 
     494    ImageNode image = (ImageNode) getChild(root, "Image", ndx); 
     495    CustomAttributesNode ca =  
     496      (CustomAttributesNode) getChild(image, "CustomAttributes", 0); 
     497    LogicalChannelNode ch = (LogicalChannelNode)  
     498      getChild(ca, "LogicalChannel", channel == null ? 0 : channel.intValue());  
     499    return ch.getExcitationWavelength();  
     500  } 
     501 
     502  /**  
     503   * @see loci.formats.MetadataRetrieve#getPhotometricInterpretation(Integer,  
     504   * Integer)  
     505   */ 
     506  public String getPhotometricInterpretation(Integer pixels, Integer channel) { 
     507    int ndx = pixels == null ? 0 : pixels.intValue(); 
     508    ImageNode image = (ImageNode) getChild(root, "Image", ndx); 
     509    CustomAttributesNode ca =  
     510      (CustomAttributesNode) getChild(image, "CustomAttributes", 0); 
     511    LogicalChannelNode ch = (LogicalChannelNode)  
     512      getChild(ca, "LogicalChannel", channel == null ? 0 : channel.intValue());  
     513    return ch.getPhotometricInterpretation();  
     514  } 
     515 
     516  /* @see loci.formats.MetadataRetrieve#getMode(Integer, Integer) */ 
     517  public String getMode(Integer pixels, Integer channel) { 
     518    int ndx = pixels == null ? 0 : pixels.intValue(); 
     519    ImageNode image = (ImageNode) getChild(root, "Image", ndx); 
     520    CustomAttributesNode ca =  
     521      (CustomAttributesNode) getChild(image, "CustomAttributes", 0); 
     522    LogicalChannelNode ch = (LogicalChannelNode)  
     523      getChild(ca, "LogicalChannel", channel == null ? 0 : channel.intValue());  
     524    return ch.getMode();  
     525  } 
     526 
     527  /* @see loci.formats.MetadataRetrieve#getGlobalMin(Integer, Integer) */ 
     528  public Double getGlobalMin(Integer pixels, Integer channel) { 
     529    int ndx = channel == null ? 0 : channel.intValue(); 
     530    if (ndx >= channelMinimum.length) return null; 
     531    return new Double(channelMinimum[ndx]); 
     532  } 
     533 
     534  /* @see loci.formats.MetadataRetrieve#getGlobalMax(Integer, Integer) */ 
     535  public Double getGlobalMax(Integer pixels, Integer channel) { 
     536    int ndx = channel == null ? 0 : channel.intValue(); 
     537    if (ndx >= channelMaximum.length) return null; 
     538    return new Double(channelMaximum[ndx]); 
     539  } 
     540 
     541  /**  
     542   * @see loci.formats.MetadataRetrieve#getTimestamp(Integer, Integer,  
     543   * Integer, Integer)  
     544   */ 
     545  public Float getTimestamp(Integer pixels, Integer z, Integer c, Integer t) { 
     546    // TODO 
     547    return null; 
     548  } 
     549 
     550  /** 
     551   * @see loci.formats.MetadataRetrieve#getExposureTime(Integer, Integer, 
     552   * Integer, Integer) 
     553   */ 
     554  public Float getExposureTime(Integer pixels, Integer z, Integer c, Integer t) 
     555  { 
     556    // TODO 
     557    return null; 
     558  } 
     559 
     560  /* @see loci.formats.MetadataRetrieve#getTemperature(Integer) */ 
     561  public Float getTemperature(Integer n) { 
     562    int ndx = n == null ? 0 : n.intValue(); 
     563    String temperature = getAttribute("ImagingEnvironment", "Temperature", ndx); 
     564    return temperature == null ? null : new Float(temperature); 
     565  } 
     566   
     567  /* @see loci.formats.MetadataRetrieve#getAirPressure(Integer) */ 
     568  public Float getAirPressure(Integer n) { 
     569    int ndx = n == null ? 0 : n.intValue(); 
     570    String pressure = getAttribute("ImagingEnvironment", "AirPressure", ndx); 
     571    return pressure == null ? null : new Float(pressure); 
     572  } 
     573 
     574  /* @see loci.formats.MetadataRetrieve#getHumidity(Integer) */ 
     575  public Float getHumidity(Integer n) { 
     576    int ndx = n == null ? 0 : n.intValue(); 
     577    String humidity = getAttribute("ImagingEnvironment", "Humidity", ndx); 
     578    return humidity == null ? null : new Float(humidity); 
     579  } 
     580 
     581  /* @see loci.formats.MetadataRetrieve#getCO2Percent(Integer) */ 
     582  public Float getCO2Percent(Integer n) { 
     583    int ndx = n == null ? 0 : n.intValue(); 
     584    String co2 = getAttribute("ImagingEnvironment", "CO2Percent", ndx); 
     585    return co2 == null ? null : new Float(co2); 
     586  } 
     587 
     588  /* @see loci.formats.MetadataRetrieve#getBlackLevel(Integer, Integer) */ 
     589  public Double getBlackLevel(Integer pixels, Integer channel) { 
     590    int ndx = pixels == null ? 0 : pixels.intValue(); 
     591    ImageNode image = (ImageNode) getChild(root, "Image", ndx); 
     592    CustomAttributesNode ca =  
     593      (CustomAttributesNode) getChild(image, "CustomAttributes", 0); 
     594    DisplayChannelNode display = (DisplayChannelNode)  
     595      getChild(ca, "DisplayChannel", channel == null ? 0 : channel.intValue());  
     596    return display.getBlackLevel();  
     597  } 
     598 
     599  /* @see loci.formats.MetadataRetrieve#getWhiteLevel(Integer, Integer) */ 
     600  public Double getWhiteLevel(Integer pixels, Integer channel) { 
     601    int ndx = pixels == null ? 0 : pixels.intValue(); 
     602    ImageNode image = (ImageNode) getChild(root, "Image", ndx); 
     603    CustomAttributesNode ca =  
     604      (CustomAttributesNode) getChild(image, "CustomAttributes", 0); 
     605    DisplayChannelNode display = (DisplayChannelNode)  
     606      getChild(ca, "DisplayChannel", channel == null ? 0 : channel.intValue());  
     607    return display.getWhiteLevel();  
     608  } 
     609 
     610  /* @see loci.formats.MetadataRetrieve#getGamma(Integer, Integer) */ 
     611  public Float getGamma(Integer pixels, Integer channel) { 
     612    int ndx = pixels == null ? 0 : pixels.intValue(); 
     613    ImageNode image = (ImageNode) getChild(root, "Image", ndx); 
     614    CustomAttributesNode ca =  
     615      (CustomAttributesNode) getChild(image, "CustomAttributes", 0); 
     616    DisplayChannelNode display = (DisplayChannelNode)  
     617      getChild(ca, "DisplayChannel", channel == null ? 0 : channel.intValue());  
     618    return display.getGamma();  
     619  } 
     620 
     621  /* @see loci.formats.MetadataRetrieve#getZoom(Integer) */ 
     622  public Float getZoom(Integer image) { 
     623    int ndx = image == null ? 0 : image.intValue(); 
     624    String zoom = getAttribute("DisplayOptions", "Zoom", ndx);  
     625    return zoom == null ? null : new Float(zoom);  
     626  } 
     627 
     628  /* @see loci.formats.MetadataRetrieve#isRedChannelOn(Integer) */ 
     629  public Boolean isRedChannelOn(Integer image) { 
     630    int ndx = image == null ? 0 : image.intValue(); 
     631    String redOn = getAttribute("DisplayOptions", "RedChannelOn", ndx);  
     632    return redOn == null ? null : new Boolean(redOn);  
     633  } 
     634 
     635  /* @see loci.formats.MetadataRetrieve#isGreenChannelOn(Integer) */ 
     636  public Boolean isGreenChannelOn(Integer image) { 
     637    int ndx = image == null ? 0 : image.intValue(); 
     638    String greenOn = getAttribute("DisplayOptions", "GreenChannelOn", ndx);  
     639    return greenOn == null ? null : new Boolean(greenOn);  
     640  } 
     641 
     642  /* @see loci.formats.MetadataRetrieve#isBlueChannelOn(Integer) */ 
     643  public Boolean isBlueChannelOn(Integer image) { 
     644    int ndx = image == null ? 0 : image.intValue(); 
     645    String blueOn = getAttribute("DisplayOptions", "BlueChannelOn", ndx);  
     646    return blueOn == null ? null : new Boolean(blueOn);  
     647  } 
     648 
     649  /* @see loci.formats.MetadataRetrieve#isDisplayRGB(Integer) */ 
     650  public Boolean isDisplayRGB(Integer image) { 
     651    int ndx = image == null ? 0 : image.intValue(); 
     652    String displayRGB = getAttribute("DisplayOptions", "DisplayRGB", ndx); 
     653    return displayRGB == null ? null : new Boolean(displayRGB); 
     654  } 
     655 
     656  /* @see loci.formats.MetadataRetrieve#getColorMap(Integer) */ 
     657  public String getColorMap(Integer image) { 
     658    int ndx = image == null ? 0 : image.intValue(); 
     659    return getAttribute("DisplayOptions", "ColorMap", ndx);  
     660  } 
     661 
     662  /* @see loci.formats.MetadataRetrieve#getZStart(Integer) */ 
     663  public Integer getZStart(Integer image) { 
     664    int ndx = image == null ? 0 : image.intValue(); 
     665    String zstart = getAttribute("DisplayOptions", "ZStart", ndx); 
     666    return zstart == null ? null : new Integer(zstart); 
     667  } 
     668 
     669  /* @see loci.formats.MetadataRetrieve#getZStop(Integer) */ 
     670  public Integer getZStop(Integer image) { 
     671    int ndx = image == null ? 0 : image.intValue(); 
     672    String zstop = getAttribute("DisplayOptions", "ZStop", ndx); 
     673    return zstop == null ? null : new Integer(zstop); 
     674  } 
     675  
     676  /* @see loci.formats.MetadataRetrieve#getTStart(Integer) */ 
     677  public Integer getTStart(Integer image) { 
     678    int ndx = image == null ? 0 : image.intValue();  
     679    String tstart = getAttribute("DisplayOptions", "TStart", ndx); 
     680    return tstart == null ? null : new Integer(tstart); 
     681  } 
     682 
     683  /* @see loci.formats.MetadataRetrieve#getTStop(Integer) */ 
     684  public Integer getTStop(Integer image) { 
     685    int ndx = image == null ? 0 : image.intValue();  
     686    String tstop = getAttribute("DisplayOptions", "TStop", ndx); 
     687    return tstop == null ? null : new Integer(tstop); 
     688  } 
     689 
     690  /* @see loci.formats.MetadataRetrieve#getLightManufacturer(Integer) */ 
     691  public String getLightManufacturer(Integer light) { 
     692    int ndx = light == null ? 0 : light.intValue(); 
     693    return getAttribute("LightSource", "Manufacturer", ndx); 
     694  } 
     695 
     696  /* @see loci.formats.MetadataRetrieve#getLightModel(Integer) */ 
     697  public String getLightModel(Integer light) { 
     698    int ndx = light == null ? 0 : light.intValue(); 
     699    return getAttribute("LightSource", "Model", ndx); 
     700  } 
     701 
     702  /* @see loci.formats.MetadataRetrieve#getLightSerial(Integer) */ 
     703  public String getLightSerial(Integer light) { 
     704    int ndx = light == null ? 0 : light.intValue(); 
     705    return getAttribute("LightSource", "SerialNumber", ndx); 
     706  } 
     707 
     708  /* @see loci.formats.MetadataRetrieve#getLaserType(Integer) */ 
     709  public String getLaserType(Integer laser) { 
     710    int ndx = laser == null ? 0 : laser.intValue(); 
     711    return getAttribute("Laser", "Type", ndx); 
     712  } 
     713 
     714  /* @see loci.formats.MetadataRetrieve#getLaserMedium(Integer) */ 
     715  public String getLaserMedium(Integer laser) { 
     716    int ndx = laser == null ? 0 : laser.intValue(); 
     717    return getAttribute("Laser", "Medium", ndx); 
     718  } 
     719 
     720  /* @see loci.formats.MetadataRetrieve#getLaserWavelength(Integer) */ 
     721  public Integer getLaserWavelength(Integer laser) { 
     722    int ndx = laser == null ? 0 : laser.intValue(); 
     723    String wave = getAttribute("Laser", "Wavelength", ndx); 
     724    return wave == null ? null : new Integer(wave);  
     725  } 
     726 
     727  /* @see loci.formats.MetadataRetrieve#isFrequencyDoubled(Integer) */ 
     728  public Boolean isFrequencyDoubled(Integer laser) { 
     729    int ndx = laser == null ? 0 : laser.intValue(); 
     730    String freq = getAttribute("Laser", "FrequencyDoubled", ndx); 
     731    return freq == null ? null : new Boolean(freq);  
     732  } 
     733 
     734  /* @see loci.formats.MetadataRetrieve#isTunable(Integer) */ 
     735  public Boolean isTunable(Integer laser) { 
     736    int ndx = laser == null ? 0 : laser.intValue(); 
     737    String tunable = getAttribute("Laser", "Tunable", ndx); 
     738    return tunable == null ? null : new Boolean(tunable);  
     739  } 
     740 
     741  /* @see loci.formats.MetadataRetrieve#getPulse(Integer) */ 
     742  public String getPulse(Integer laser) { 
     743    int ndx = laser == null ? 0 : laser.intValue(); 
     744    return getAttribute("Laser", "Pulse", ndx); 
     745  } 
     746 
     747  /* @see loci.formats.MetadataRetrieve#getPower(Integer) */ 
     748  public Float getPower(Integer laser) { 
     749    int ndx = laser == null ? 0 : laser.intValue(); 
     750    String power = getAttribute("Laser", "Power", ndx); 
     751    return power == null ? null : new Float(power);  
     752  } 
     753 
     754  /* @see loci.formats.MetadataRetrieve#getFilamentType(Integer) */ 
     755  public String getFilamentType(Integer filament) { 
     756    int ndx = filament == null ? 0 : filament.intValue(); 
     757    return getAttribute("Filament", "Type", ndx); 
     758  } 
     759 
     760  /* @see loci.formats.MetadataRetrieve#getFilamentPower(Integer) */ 
     761  public Float getFilamentPower(Integer filament) { 
     762    int ndx = filament == null ? 0 : filament.intValue(); 
     763    String power = getAttribute("Filament", "Power", ndx); 
     764    return power == null ? null : new Float(power);  
     765  } 
     766 
     767  /* @see loci.formats.MetadataRetrieve#getArcType(Integer) */ 
     768  public String getArcType(Integer arc) { 
     769    int ndx = arc == null ? 0 : arc.intValue(); 
     770    return getAttribute("Arc", "Type", ndx); 
     771  } 
     772 
     773  /* @see loci.formats.MetadataRetrieve#getArcPower(Integer) */ 
     774  public Float getArcPower(Integer arc) { 
     775    int ndx = arc == null ? 0 : arc.intValue(); 
     776    String power = getAttribute("Arc", "Power", ndx); 
     777    return power == null ? null : new Float(power);  
     778  } 
     779 
     780  /* @see loci.formats.MetadataRetrieve#getDetectorManufacturer(Integer) */ 
     781  public String getDetectorManufacturer(Integer detector) { 
     782    int ndx = detector == null ? 0 : detector.intValue(); 
     783    return getAttribute("Detector", "Manufacturer", ndx); 
     784  } 
     785 
     786  /* @see loci.formats.MetadataRetrieve#getDetectorModel(Integer) */ 
     787  public String getDetectorModel(Integer detector) { 
     788    int ndx = detector == null ? 0 : detector.intValue(); 
     789    return getAttribute("Detector", "Model", ndx); 
     790  } 
     791 
     792  /* @see loci.formats.MetadataRetrieve#getDetectorSerial(Integer) */ 
     793  public String getDetectorSerial(Integer detector) { 
     794    int ndx = detector == null ? 0 : detector.intValue(); 
     795    return getAttribute("Detector", "SerialNumber", ndx); 
     796  } 
     797 
     798  /* @see loci.formats.MetadataRetrieve#getDetectorType(Integer) */ 
     799  public String getDetectorType(Integer detector) { 
     800    int ndx = detector == null ? 0 : detector.intValue(); 
     801    return getAttribute("Detector", "Type", ndx); 
     802  } 
     803 
     804  /* @see loci.formats.MetadataRetrieve#getDetectorGain(Integer) */ 
     805  public Float getDetectorGain(Integer detector) { 
     806    int ndx = detector == null ? 0 : detector.intValue(); 
     807    String gain = getAttribute("Detector", "Gain", ndx); 
     808    return gain == null ? null : new Float(gain);  
     809  } 
     810   
     811  /* @see loci.formats.MetadataRetrieve#getDetectorVoltage(Integer) */ 
     812  public Float getDetectorVoltage(Integer detector) { 
     813    int ndx = detector == null ? 0 : detector.intValue(); 
     814    String voltage = getAttribute("Detector", "Voltage", ndx); 
     815    return voltage == null ? null : new Float(voltage);  
     816  } 
     817 
     818  /* @see loci.formats.MetadataRetrieve#getDetectorOffset(Integer) */ 
     819  public Float getDetectorOffset(Integer detector) { 
     820    int ndx = detector == null ? 0 : detector.intValue(); 
     821    String offset = getAttribute("Detector", "Offset", ndx); 
     822    return offset == null ? null : new Float(offset);  
     823  } 
     824 
     825  /* @see loci.formats.MetadataRetrieve#getObjectiveManufacturer(Integer) */ 
     826  public String getObjectiveManufacturer(Integer objective) { 
     827    int ndx = objective == null ? 0 : objective.intValue(); 
     828    return getAttribute("Objective", "Manufacturer", ndx); 
     829  } 
     830 
     831  /* @see loci.formats.MetadataRetrieve#getObjectiveModel(Integer) */ 
     832  public String getObjectiveModel(Integer objective) { 
     833    int ndx = objective == null ? 0 : objective.intValue(); 
     834    return getAttribute("Objective", "Model", ndx); 
     835  }  
     836 
     837  /* @see loci.formats.MetadataRetrieve#getObjectiveSerial(Integer) */ 
     838  public String getObjectiveSerial(Integer objective) { 
     839    int ndx = objective == null ? 0 : objective.intValue(); 
     840    return getAttribute("Objective", "SerialNumber", ndx); 
     841  } 
     842 
     843  /* @see loci.formats.MetadataRetrieve#getLensNA(Integer) */ 
     844  public Float getLensNA(Integer objective) { 
     845    int ndx = objective == null ? 0 : objective.intValue(); 
     846    String na = getAttribute("Objective", "LensNA", ndx); 
     847    return na == null ? null : new Float(na);  
     848  } 
     849 
     850  /* @see loci.formats.MetadataRetrieve#getObjectiveMagnification(Integer) */ 
     851  public Float getObjectiveMagnification(Integer objective) { 
     852    int ndx = objective == null ? 0 : objective.intValue(); 
     853    String mag = getAttribute("Objective", "Magnification", ndx); 
     854    return mag == null ? null : new Float(mag);  
     855  } 
     856 
     857  /* @see loci.formats.MetadataRetrieve#getExcitationManufacturer(Integer) */ 
     858  public String getExcitationManufacturer(Integer filter) { 
     859    int ndx = filter == null ? 0 : filter.intValue(); 
     860    return getAttribute("ExcitationFilter", "Manufacturer", ndx); 
     861  } 
     862 
     863  /* @see loci.formats.MetadataRetrieve#getExcitationModel(Integer) */ 
     864  public String getExcitationModel(Integer filter) { 
     865    int ndx = filter == null ? 0 : filter.intValue(); 
     866    return getAttribute("ExcitationFilter", "Model", ndx); 
     867  } 
     868 
     869  /* @see loci.formats.MetadataRetrieve#getExcitationLotNumber(Integer) */ 
     870  public String getExcitationLotNumber(Integer filter) { 
     871    int ndx = filter == null ? 0 : filter.intValue(); 
     872    return getAttribute("Objective", "LotNumber", ndx); 
     873  } 
     874 
     875  /* @see loci.formats.MetadataRetrieve#getExcitationType(Integer) */ 
     876  public String getExcitationType(Integer filter) { 
     877    int ndx = filter == null ? 0 : filter.intValue(); 
     878    return getAttribute("Objective", "Type", ndx); 
     879  } 
     880 
     881  /* @see loci.formats.MetadataRetrieve#getDichroicManufacturer(Integer) */ 
     882  public String getDichroicManufacturer(Integer dichroic) { 
     883    int ndx = dichroic == null ? 0 : dichroic.intValue(); 
     884    return getAttribute("Dichroic", "Manufacturer", ndx); 
     885  } 
     886 
     887  /* @see loci.formats.MetadataRetrieve#getDichroicModel(Integer) */ 
     888  public String getDichroicModel(Integer dichroic) { 
     889    int ndx = dichroic == null ? 0 : dichroic.intValue(); 
     890    return getAttribute("Dichroic", "Model", ndx); 
     891  } 
     892 
     893  /* @see loci.formats.MetadataRetrieve#getDichroicLotNumber(Integer) */ 
     894  public String getDichroicLotNumber(Integer dichroic) { 
     895    int ndx = dichroic == null ? 0 : dichroic.intValue(); 
     896    return getAttribute("Dichroic", "LotNumber", ndx); 
     897  } 
     898 
     899  /* @see loci.formats.MetadataRetrieve#getEmissionManufacturer(Integer) */ 
     900  public String getEmissionManufacturer(Integer filter) { 
     901    int ndx = filter == null ? 0 : filter.intValue(); 
     902    return getAttribute("EmissionFilter", "Manufacturer", ndx); 
     903  } 
     904 
     905  /* @see loci.formats.MetadataRetrieve#getEmissionModel(Integer) */ 
     906  public String getEmissionModel(Integer filter) { 
     907    int ndx = filter == null ? 0 : filter.intValue(); 
     908    return getAttribute("EmissionFilter", "Model", ndx); 
     909  } 
     910 
     911  /* @see loci.formats.MetadataRetrieve#getEmissionLotNumber(Integer) */ 
     912  public String getEmissionLotNumber(Integer filter) { 
     913    int ndx = filter == null ? 0 : filter.intValue(); 
     914    return getAttribute("EmissionFilter", "LotNumber", ndx); 
     915  } 
     916 
     917  /* @see loci.formats.MetadataRetrieve#getEmissionType(Integer) */ 
     918  public String getEmissionType(Integer filter) { 
     919    int ndx = filter == null ? 0 : filter.intValue(); 
     920    return getAttribute("EmissionFilter", "Type", ndx); 
     921  } 
     922 
     923  /* @see loci.formats.MetadataRetrieve#getFilterSetManufacturer(Integer) */ 
     924  public String getFilterSetManufacturer(Integer filterSet) { 
     925    int ndx = filterSet == null ? 0 : filterSet.intValue(); 
     926    return getAttribute("FilterSet", "Manufacturer", ndx); 
     927  } 
     928 
     929  /* @see loci.formats.MetadataRetrieve#getFilterSetModel(Integer) */ 
     930  public String getFilterSetModel(Integer filterSet) { 
     931    int ndx = filterSet == null ? 0 : filterSet.intValue(); 
     932    return getAttribute("FilterSet", "Model", ndx); 
     933  } 
     934 
     935  /* @see loci.formats.MetadataRetrieve#getFilterSetLotNumber(Integer) */ 
     936  public String getFilterSetLotNumber(Integer filterSet) { 
     937    int ndx = filterSet == null ? 0 : filterSet.intValue(); 
     938    return getAttribute("FilterSet", "LotNumber", ndx); 
     939  } 
     940 
     941  /* @see loci.formats.MetadataRetrieve#getOTFSizeX(Integer) */ 
     942  public Integer getOTFSizeX(Integer otf) { 
     943    int ndx = otf == null ? 0 : otf.intValue();  
     944    String x = getAttribute("OTF", "SizeX", ndx); 
     945    return x == null ? null : new Integer(x); 
     946  } 
     947 
     948  /* @see loci.formats.MetadataRetrieve#getOTFSizeY(Integer) */ 
     949  public Integer getOTFSizeY(Integer otf) { 
     950    int ndx = otf == null ? 0 : otf.intValue();  
     951    String y = getAttribute("OTF", "SizeY", ndx); 
     952    return y == null ? null : new Integer(y); 
     953  } 
     954 
     955  /* @see loci.formats.MetadataRetrieve#getOTFPixelType(Integer) */ 
     956  public String getOTFPixelType(Integer otf) { 
     957    int ndx = otf == null ? 0 : otf.intValue();  
     958    return getAttribute("OTF", "PixelType", ndx); 
     959  } 
     960 
     961  /* @see loci.formats.MetadataRetrieve#getOTFPath(Integer) */ 
     962  public String getOTFPath(Integer otf) { 
     963    int ndx = otf == null ? 0 : otf.intValue();  
     964    return getAttribute("OTF", "Path", ndx); 
     965  } 
     966 
     967  /* @see loci.formats.MetadataRetrieve#getOTFOpticalAxisAverage(Integer) */ 
     968  public Boolean getOTFOpticalAxisAverage(Integer otf) { 
     969    int ndx = otf == null ? 0 : otf.intValue();  
     970    String x = getAttribute("OTF", "SizeX", ndx); 
     971    return x == null ? null : new Boolean(x); 
    342972  } 
    343973 
     
    360990 
    361991  /* 
    362    * @see loci.formats.MetadataStore#setImage(String, 
    363    *   String, String, Integer) 
     992   * @see loci.formats.MetadataStore#setImage(String, String, String, Integer) 
    364993   */ 
    365994  public void setImage(String name, 
     
    5451174    // Now populate the channel component 
    5461175    PixelChannelComponentNode channel = (PixelChannelComponentNode) 
    547       getChild(ca, "PixelChannelComponent", channelIdx); 
     1176      getChild(ca, "PixelChannelComponent", 0); 
    5481177    channel.setLogicalChannel(logicalChannel); 
    5491178    channel.setIndex(new Integer(channelIdx)); 
     
    11441773  } 
    11451774 
     1775  /** 
     1776   * Retrieves the number of nodes associated with the given DOM element name. 
     1777   * @param name the DOM element name 
     1778   */ 
     1779  private int getNodeCount(String name) { 
     1780    Element rel = root.getDOMElement(); 
     1781    Vector elements = DOMUtil.findElementList(name, rel.getOwnerDocument()); 
     1782    return elements.size();  
     1783  } 
     1784 
    11461785  /** Issues the given message as a warning. */ 
    11471786  private void warn(String msg) { 
  • trunk/loci/formats/out/TiffWriter.java

    r2857 r3013  
    3030import java.util.*; 
    3131import loci.formats.*; 
    32 //import org.openmicroscopy.xml.*; 
    33 //import org.openmicroscopy.xml.st.*; 
    34 //import loci.formats.ome.OMEXMLMetadataStore; 
    3532 
    3633/** TiffWriter is the file format writer for TIFF files. */ 
     
    4037 
    4138  /** The last offset written to. */ 
    42   private int lastOffset; 
     39  protected int lastOffset; 
    4340 
    4441  /** Current output stream. */ 
    45   private BufferedOutputStream out; 
     42  protected BufferedOutputStream out; 
    4643 
    47   // -- Constructor -- 
     44  /** Image counts for each open series. */ 
     45  protected Vector imageCounts; 
     46 
     47  // -- Constructors -- 
    4848 
    4949  public TiffWriter() { 
    50     super("Tagged Image File Format", new String[] {"tif", "tiff"}); 
     50    this("Tagged Image File Format", new String[] {"tif", "tiff"}); 
     51  } 
     52 
     53  public TiffWriter(String format, String[] exts) { 
     54    super(format, exts); 
    5155    lastOffset = 0; 
    52     compressionTypes = new String[] {"Uncompressed", "LZW"}; 
     56    compressionTypes = new String[] {"Uncompressed", "LZW"};  
    5357  } 
    5458 
     
    6468    throws IOException, FormatException 
    6569  { 
     70    saveImage(image, ifd, 0, last, last); 
     71  } 
     72 
     73  /** 
     74   * Saves the given image to the specified series in the current file. 
     75   * The IFD hashtable allows specification of TIFF parameters such as bit 
     76   * depth, compression and units. If this image is the last one in the series, 
     77   * the lastInSeries flag must be set. If this image is the last one in the  
     78   * file, the last flag must be set. 
     79   */ 
     80  public void saveImage(Image image, Hashtable ifd, int series,  
     81    boolean lastInSeries, boolean last) throws IOException, FormatException 
     82  { 
    6683    if (!initialized) { 
     84      imageCounts = new Vector(); 
    6785      initialized = true; 
    6886      out = 
     
    103121  // -- IFormatWriter API methods -- 
    104122 
    105   /* @see loci.formats.IFormatWriter#save(String, Image, boolean) */ 
    106   public void saveImage(Image image, boolean last) 
    107     throws FormatException, IOException 
     123  /* @see loci.formats.IFormatWriter#saveImage(Image, boolean) */ 
     124  public void saveImage(Image image, boolean last)  
     125    throws FormatException, IOException  
     126  { 
     127    saveImage(image, 0, last, last); 
     128  } 
     129 
     130  /* @see loci.formats.IFormatWriter#saveImage(Image, int, boolean, boolean) */ 
     131  public void saveImage(Image image, int series, boolean lastInSeries,  
     132    boolean last) throws FormatException, IOException 
    108133  { 
    109134    Hashtable h = new Hashtable(); 
     
    111136    h.put(new Integer(TiffTools.COMPRESSION), compression.equals("LZW") ? 
    112137      new Integer(TiffTools.LZW) : new Integer(TiffTools.UNCOMPRESSED)); 
    113     saveImage(image, h, last); 
     138    saveImage(image, h, series, lastInSeries, last); 
    114139  } 
    115140 
     
    121146  /* @see loci.formats.IFormatHandler#close() */ 
    122147  public void close() throws IOException { 
    123     // write the metadata, if enabled 
    124  
    125     /* 
    126     if (metadataEnabled && store != null && currentId != null) { 
    127       // TODO : use reflection to access the OMEXMLMetadataStore 
    128       if (store instanceof OMEXMLMetadataStore) { 
    129         try { 
    130           // writes valid OME-TIFF 
    131           RandomAccessFile raf = new RandomAccessFile(currentId, "rw"); 
    132           RandomAccessStream in = new RandomAccessStream(currentId); 
    133           OMENode xml = (OMENode) ((OMEXMLMetadataStore) store).getRoot(); 
    134           Vector images = xml.getChildNodes("Image"); 
    135           for (int p=0; p<images.size(); p++) { 
    136             PixelsNode pix = 
    137               (PixelsNode) ((ImageNode) images.get(p)).getDefaultPixels(); 
    138             DOMUtil.createChild(pix.getDOMElement(), "TiffData"); 
    139           } 
    140  
    141           Hashtable[] ifds = TiffTools.getIFDs(in); 
    142           TiffTools.overwriteIFDValue(raf, 0, TiffTools.IMAGE_DESCRIPTION, 
    143             xml.writeOME(true)); 
    144         } 
    145         catch (Exception e) { trace(e); } 
    146       } 
    147       else { 
    148         throw new FormatException("Expecting an OMEXMLMetadataStore; got a " + 
    149           store.getClass()); 
    150       } 
    151     } 
    152     */ 
    153  
    154148    if (out != null) out.close(); 
    155149    out = null; 
  • trunk/loci/formats/test/ReaderTest.java

    r2976 r3013  
    290290        boolean failC = reader.getSizeC() != store.getSizeC(ii).intValue(); 
    291291        boolean failT = reader.getSizeT() != store.getSizeT(ii).intValue(); 
    292         boolean failBE = 
    293           reader.isLittleEndian() == store.getBigEndian(ii).booleanValue(); 
     292        boolean failBE = reader.isLittleEndian() ==  
     293          store.getBigEndian(ii).booleanValue(); 
    294294        boolean failDE = 
    295295          !reader.getDimensionOrder().equals(store.getDimensionOrder(ii)); 
  • trunk/loci/formats/writers.txt

    r2444 r3013  
    2525# Please do not edit unless you know what you are doing. 
    2626 
     27loci.formats.out.OMETiffWriter # ome.tif, ome.tiff 
    2728loci.formats.out.TiffWriter # tif, tiff 
    2829loci.formats.out.JPEGWriter # jpg, jpeg 
  • trunk/loci/visbio/ome/ImageUploader.java

    r2725 r3013  
    7070      for (int i=0; i<numFiles; i++) { 
    7171        for (int j=0; j<numImages; j++) { 
    72           int[] coords = FormatTools.getZCTCoords(store.getDimensionOrder(null), 
    73             store.getSizeZ(null).intValue(), store.getSizeC(null).intValue(), 
     72          int[] coords = FormatTools.getZCTCoords( 
     73            store.getDimensionOrder(null), 
     74            store.getSizeZ(null).intValue(),  
     75            store.getSizeC(null).intValue(), 
    7476            store.getSizeT(null).intValue(), 
    7577            numImages*numFiles, numImages*i + j); 
Note: See TracChangeset for help on using the changeset viewer.