//
// CoreMetadata.java
//
/*
OME Bio-Formats package for reading and converting biological file formats.
Copyright (C) 2005-@year@ UW-Madison LOCI and Glencoe Software, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package loci.formats;
import java.util.Hashtable;
/**
* Encompasses core metadata values.
*
* <dl><dt><b>Source code:</b></dt>
* <dd><a href="http://trac.openmicroscopy.org.uk/ome/browser/bioformats.git/components/bio-formats/src/loci/formats/CoreMetadata.java">Trac</a>,
* <a href="http://git.openmicroscopy.org/?p=bioformats.git;a=blob;f=components/bio-formats/src/loci/formats/CoreMetadata.java;hb=HEAD">Gitweb</a></dd></dl>
*/
public class CoreMetadata {
// -- Fields --
// TODO: We may want to consider refactoring the FormatReader getter methods
// that populate missing CoreMetadata fields on the fly
// (getChannelDimLengths, getChannelDimTypes, getThumbSizeX, getThumbSizeY)
// to avoid doing so -- one alternate approach would be to have this class
// use getter methods instead of public fields.
/** Width (in pixels) of images in this series. */
public int sizeX;
/** Height (in pixels) of images in this series. */
public int sizeY;
/** Number of Z sections. */
public int sizeZ;
/** Number of channels. */
public int sizeC;
/** Number of timepoints. */
public int sizeT;
/** Width (in pixels) of thumbnail images in this series. */
public int thumbSizeX;
/** Height (in pixels) of thumbnail images in this series. */
public int thumbSizeY;
/**
* Describes the number of bytes per pixel. Must be one of the <i>static</i>
* pixel types (e.g. <code>INT8</code>) in {@link loci.formats.FormatTools}.
*/
public int pixelType;
/** Number of valid bits per pixel. */
public int bitsPerPixel;
/** Total number of images. */
public int imageCount;
/** Length of each subdimension of C. */
public int[] cLengths;
/** Name of each subdimension of C. */
public String[] cTypes;
/**
* Order in which dimensions are stored. Must be one of the following:<ul>
* <li>XYCZT</li>
* <li>XYCTZ</li>
* <li>XYZCT</li>
* <li>XYZTC</li>
* <li>XYTCZ</li>
* <li>XYTZC</li>
* </ul>
*/
public String dimensionOrder;
/**
* Indicates whether or not we are confident that the
* dimension order is correct.
*/
public boolean orderCertain;
/**
* Indicates whether or not the images are stored as RGB
* (multiple channels per plane).
*/
public boolean rgb;
/** Indicates whether or not each pixel's bytes are in little endian order. */
public boolean littleEndian;
/**
* True if channels are stored RGBRGBRGB...; false if channels are stored
* RRR...GGG...BBB...
*/
public boolean interleaved;
/** Indicates whether or not the images are stored as indexed color. */
public boolean indexed;
/** Indicates whether or not we can ignore the color map (if present). */
public boolean falseColor = true;
/**
* Indicates whether or not we are confident that all of the metadata stored
* within the file has been parsed.
*/
public boolean metadataComplete;
/** Non-core metadata associated with this series. */
public Hashtable<String, Object> seriesMetadata;
/**
* Indicates whether or not this series is a lower-resolution copy of
* another series.
*/
public boolean thumbnail;
// -- Constructors --
public CoreMetadata() {
seriesMetadata = new Hashtable<String, Object>();
}
public CoreMetadata(IFormatReader r, int seriesNo) {
int series = r.getSeries();
r.setSeries(seriesNo);
sizeX = r.getSizeX();
sizeY = r.getSizeY();
sizeZ = r.getSizeZ();
sizeC = r.getSizeC();
sizeT = r.getSizeT();
thumbSizeX = r.getThumbSizeX();
thumbSizeY = r.getThumbSizeY();
pixelType = r.getPixelType();
bitsPerPixel = r.getBitsPerPixel();
imageCount = r.getImageCount();
cLengths = r.getChannelDimLengths();
cTypes = r.getChannelDimTypes();
dimensionOrder = r.getDimensionOrder();
orderCertain = r.isOrderCertain();
rgb = r.isRGB();
littleEndian = r.isLittleEndian();
interleaved = r.isInterleaved();
indexed = r.isIndexed();
falseColor = r.isFalseColor();
metadataComplete = r.isMetadataComplete();
seriesMetadata = r.getSeriesMetadata();
thumbnail = r.isThumbnailSeries();
r.setSeries(series);
}
// -- Object methods --
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(super.toString() + ":");
sb.append("\n\tsizeX = " + sizeX);
sb.append("\n\tsizeY = " + sizeY);
sb.append("\n\tsizeZ = " + sizeZ);
sb.append("\n\tsizeC = " + sizeC);
sb.append("\n\tsizeT = " + sizeT);
sb.append("\n\tthumbSizeX = " + thumbSizeX);
sb.append("\n\tthumbSizeY = " + thumbSizeY);
sb.append("\n\tpixelType = " + FormatTools.getPixelTypeString(pixelType));
sb.append("\n\tbitsPerPixel = " + bitsPerPixel);
sb.append("\n\timageCount = " + imageCount);
sb.append("\n\tcLengths =");
if (cLengths == null) sb.append(" null");
else for (int i=0; i<cLengths.length; i++) sb.append(" " + cLengths[i]);
sb.append("\n\tcTypes =");
if (cTypes == null) sb.append(" null");
else for (int i=0; i<cTypes.length; i++) sb.append(" " + cTypes[i]);
sb.append("\n\tdimensionOrder = " + dimensionOrder);
sb.append("\n\torderCertain = " + orderCertain);
sb.append("\n\trgb = " + rgb);
sb.append("\n\tlittleEndian = " + littleEndian);
sb.append("\n\tinterleaved = " + interleaved);
sb.append("\n\tindexed = " + indexed);
sb.append("\n\tfalseColor = " + falseColor);
sb.append("\n\tmetadataComplete = " + metadataComplete);
sb.append("\n\tseriesMetadata = " + seriesMetadata.size() + " keys");
sb.append("\n\tthumbnail = " + thumbnail);
return sb.toString();
}
}