Skip to content

Commit

Permalink
More OME-XML validation fixes, see #520.
Browse files Browse the repository at this point in the history
  • Loading branch information
melissalinkert committed Aug 13, 2010
1 parent 0a451b0 commit 1fafa68
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 10 deletions.
21 changes: 15 additions & 6 deletions components/bio-formats/src/loci/formats/MetadataTools.java
Original file line number Diff line number Diff line change
Expand Up @@ -118,22 +118,31 @@ public static void populatePixels(MetadataStore store, IFormatReader r,
store.setPixelsSizeZ(new PositiveInteger(r.getSizeZ()), i);
store.setPixelsSizeC(new PositiveInteger(r.getSizeC()), i);
store.setPixelsSizeT(new PositiveInteger(r.getSizeT()), i);
store.setPixelsBinDataBigEndian(new Boolean(!r.isLittleEndian()), i, 0);

int tiffDataCount = 0;
OMEXMLService service = null;
try {
OMEXMLService service =
new ServiceFactory().getInstance(OMEXMLService.class);
service = new ServiceFactory().getInstance(OMEXMLService.class);
if (service.isOMEXMLRoot(store.getRoot())) {
OME root = (OME) store.getRoot();
BinData bin = root.getImage(i).getPixels().getBinData(0);
bin.setLength(new NonNegativeLong(0L));
store.setRoot(root);
tiffDataCount = root.getImage(i).getPixels().sizeOfTiffDataList();
}
}
catch (DependencyException exc) {
LOGGER.debug("Failed to set BinData.Length", exc);
}

if (tiffDataCount == 0) {
store.setPixelsBinDataBigEndian(new Boolean(!r.isLittleEndian()), i, 0);

if (service != null && service.isOMEXMLRoot(store.getRoot())) {
OME root = (OME) store.getRoot();
BinData bin = root.getImage(i).getPixels().getBinData(0);
bin.setLength(new NonNegativeLong(0L));
store.setRoot(root);
}
}

try {
store.setPixelsType(PixelType.fromString(
FormatTools.getPixelTypeString(r.getPixelType())), i);
Expand Down
6 changes: 6 additions & 0 deletions components/bio-formats/src/loci/formats/in/BDReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -279,9 +279,12 @@ protected void initFile(String id) throws FormatException, IOException {
String row = name.substring(0, 1);
Integer col = Integer.parseInt(name.substring(1));

store.setWellID(MetadataTools.createLSID("Well", 0, i), 0, i);
store.setWellColumn(new NonNegativeInteger(col - 1), 0, i);
store.setWellRow(new NonNegativeInteger(row.charAt(0) - 'A'), 0, i);

String wellSampleID = MetadataTools.createLSID("WellSample", 0, i, 0);
store.setWellSampleID(wellSampleID, 0, i, 0);
store.setWellSampleIndex(new NonNegativeInteger(i), 0, i, 0);

String imageID = MetadataTools.createLSID("Image", i);
Expand Down Expand Up @@ -346,6 +349,7 @@ protected void initFile(String id) throws FormatException, IOException {
}
}

store.setPlateID(MetadataTools.createLSID("Plate", 0), 0);
store.setPlateRowNamingConvention(getNamingConvention("Letter"), 0);
store.setPlateColumnNamingConvention(getNamingConvention("Number"), 0);
store.setPlateName(plateName, 0);
Expand Down Expand Up @@ -523,6 +527,8 @@ private void parseROIs(MetadataStore store) throws IOException {
if (cols.length < 6) break;

if (cols[2].trim().length() > 0) {
String rectangleID = MetadataTools.createLSID("Shape", i - firstRow, 0);
store.setRectangleID(rectangleID, i - firstRow, 0);
store.setRectangleX(new Double(cols[2]), i - firstRow, 0);
store.setRectangleY(new Double(cols[3]), i - firstRow, 0);
store.setRectangleWidth(new Double(cols[4]), i - firstRow, 0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,8 @@ protected void initMetadataStore() throws FormatException {
store.setExperimenterFirstName(firstName, 0);
store.setExperimenterLastName(lastName, 0);
store.setExperimenterEmail(email, 0);
store.setExperimenterDisplayName(artist, 0);
store.setExperimenterID(MetadataTools.createLSID("Experimenter", 0), 0);
}

store.setImageDescription(firstIFD.getComment(), 0);
Expand Down
6 changes: 6 additions & 0 deletions components/bio-formats/src/loci/formats/in/InCellReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,9 @@ protected void initFile(String id) throws FormatException, IOException {
if (timepoint < 0) timepoint = 0;
int sampleIndex = (field - 1) * totalTimepoints + timepoint;

String wellSampleID =
MetadataTools.createLSID("WellSample", 0, well, sampleIndex);
store.setWellSampleID(wellSampleID, 0 ,well, sampleIndex);
store.setWellSampleIndex(new NonNegativeInteger(i), 0, well, sampleIndex);
store.setWellSampleImageRef(imageID, 0, well, sampleIndex);
if (field < posX.size()) {
Expand Down Expand Up @@ -503,6 +506,7 @@ protected void initFile(String id) throws FormatException, IOException {
String colNaming =
Character.isDigit(colName.charAt(0)) ? "Number" : "Letter";

store.setPlateID(MetadataTools.createLSID("Plate", 0), 0);
store.setPlateRowNamingConvention(getNamingConvention(rowNaming), 0);
store.setPlateColumnNamingConvention(getNamingConvention(colNaming), 0);
store.setPlateWellOriginX(0.5, 0);
Expand Down Expand Up @@ -872,6 +876,8 @@ else if (qName.equals("Plate")) {
for (int r=0; r<wellRows; r++) {
for (int c=0; c<wellCols; c++) {
int well = r * wellCols + c;
String wellID = MetadataTools.createLSID("Well", nextPlate, well);
store.setWellID(wellID, nextPlate, well);
store.setWellRow(new NonNegativeInteger(r), nextPlate, well);
store.setWellColumn(new NonNegativeInteger(c), nextPlate, well);
}
Expand Down
7 changes: 7 additions & 0 deletions components/bio-formats/src/loci/formats/in/LEOReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import loci.common.RandomAccessInputStream;
import loci.formats.FormatException;
import loci.formats.FormatTools;
import loci.formats.MetadataTools;
import loci.formats.meta.MetadataStore;
import loci.formats.tiff.IFD;
import loci.formats.tiff.TiffParser;
Expand Down Expand Up @@ -120,6 +121,12 @@ protected void initMetadataStore() throws FormatException {
if (getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) {
store.setPixelsPhysicalSizeX(xSize, 0);
store.setPixelsPhysicalSizeY(xSize, 0);

String instrument = MetadataTools.createLSID("Instrument", 0);
store.setInstrumentID(instrument, 0);
store.setImageInstrumentRef(instrument, 0);

store.setObjectiveID(MetadataTools.createLSID("Objective", 0, 0), 0, 0);
store.setObjectiveWorkingDistance(workingDistance, 0, 0);
store.setObjectiveImmersion(getImmersion("Other"), 0, 0);
store.setObjectiveCorrection(getCorrection("Other"), 0, 0);
Expand Down
19 changes: 16 additions & 3 deletions components/bio-formats/src/loci/formats/in/MIASReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -677,10 +677,13 @@ else if (nWells == 384) {
int wellCol = (wellIndex % wellColumns) + 1;
char wellRow = (char) ('A' + row);

store.setWellID(MetadataTools.createLSID("Well", 0, well), 0, well);
store.setWellRow(new NonNegativeInteger(row), 0, well);
store.setWellColumn(new NonNegativeInteger(wellCol - 1), 0, well);

String imageID = MetadataTools.createLSID("Image", well);
String wellSampleID = MetadataTools.createLSID("WellSample", 0, well, 0);
store.setWellSampleID(wellSampleID, 0, well, 0);
store.setWellSampleIndex(new NonNegativeInteger(well), 0, well, 0);

store.setImageID(imageID, well);
Expand All @@ -693,10 +696,13 @@ else if (nWells == 384) {
MetadataLevel level = getMetadataOptions().getMetadataLevel();

if (level != MetadataLevel.MINIMUM) {
store.setExperimentID("Experiment:" + experiment.getName(), 0);
String experimentID = MetadataTools.createLSID("Experiment", 0);
store.setExperimentID(experimentID, 0);
store.setExperimentType(getExperimentType("Other"), 0);
store.setExperimentDescription(experiment.getName(), 0);

// populate SPW metadata
store.setPlateID(MetadataTools.createLSID("Plate", 0), 0);
store.setPlateColumnNamingConvention(getNamingConvention("Number"), 0);
store.setPlateRowNamingConvention(getNamingConvention("Letter"), 0);

Expand All @@ -708,7 +714,7 @@ else if (nWells == 384) {

for (int well=0; well<nWells; well++) {
// populate Image/Pixels metadata
store.setImageExperimentRef("Experiment:" + experiment.getName(), well);
store.setImageExperimentRef(experimentID, well);

String instrumentID = MetadataTools.createLSID("Instrument", 0);
store.setInstrumentID(instrumentID, 0);
Expand Down Expand Up @@ -848,6 +854,7 @@ private void populateROI(List<String> columns, String[] data, int series,
store.setROIID(roiID, roi);
store.setImageROIRef(roiID, series, roi);

store.setEllipseID(MetadataTools.createLSID("Shape", roi, 0), roi, 0);
store.setEllipseTheT(new NonNegativeInteger(tv), roi, 0);
store.setEllipseTheZ(new NonNegativeInteger(zv), roi, 0);
store.setEllipseX(new Double(data[columns.indexOf("Col")]), roi, 0);
Expand Down Expand Up @@ -915,6 +922,8 @@ else if (key.equals("Pixel_Y")) {
physicalSizeY = new Double(value);
}
else if (key.equals("Objective_ID")) {
store.setObjectiveID(
MetadataTools.createLSID("Objective", 0, 0), 0, 0);
store.setObjectiveModel(value, 0, 0);
}
else if (key.equals("Magnification")) {
Expand Down Expand Up @@ -969,13 +978,17 @@ private int parseMasks(MetadataStore store, int series, int roi,
int nOverlays = 0;
for (int i=0; i<3; i++) {
String roiId = MetadataTools.createLSID("ROI", series, roi + nOverlays);
String maskId = MetadataTools.createLSID("Mask", series, roi + nOverlays, 0);
String maskId =
MetadataTools.createLSID("Mask", series, roi + nOverlays, 0);
overlayFiles.put(maskId, overlayTiff);
overlayPlanes.put(maskId, new Integer(i));

boolean validMask = populateMaskPixels(series, roi + nOverlays, 0);
if (validMask) {
store.setROIID(roiId, roi + nOverlays);

String maskID = MetadataTools.createLSID("Shape", roi + nOverlays, 0);
store.setMaskID(maskID, roi + nOverlays, 0);
store.setMaskX(new Double(0), roi + nOverlays, 0);
store.setMaskY(new Double(0), roi + nOverlays, 0);
store.setMaskWidth(new Double(getSizeX()), roi + nOverlays, 0);
Expand Down
3 changes: 3 additions & 0 deletions components/bio-formats/src/loci/formats/in/OMETiffReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import loci.formats.FormatReader;
import loci.formats.FormatTools;
import loci.formats.IFormatReader;
import loci.formats.MetadataTools;
import loci.formats.MissingLibraryException;
import loci.formats.ome.OMEXMLMetadata;
import loci.formats.services.OMEXMLService;
Expand Down Expand Up @@ -607,6 +608,8 @@ else if (core[s].sizeC == core[s].imageCount) {
}
core = series.toArray(new CoreMetadata[series.size()]);
info = planeInfo.toArray(new OMETiffPlane[0][0]);

MetadataTools.populatePixels(metadataStore, this);
}

// -- Helper methods --
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,7 @@ public void testSaneOMEXML() {
// if CreationDate is before 1995, it's probably invalid
String date = retrieve.getImageAcquiredDate(i);
if (date != null) {
date = date.trim();
long acquiredDate = DateTools.getTime(date, DateTools.ISO8601_FORMAT);
long saneDate =
DateTools.getTime("1995-01-01T00:00:00", DateTools.ISO8601_FORMAT);
Expand Down Expand Up @@ -943,7 +944,6 @@ private boolean initFile() {
if (reader == null) {
reader = new BufferedImageReader(new FileStitcher());
reader.setNormalized(true);
reader.setOriginalMetadataPopulated(true);
reader.setMetadataFiltered(true);
MetadataStore store = null;
try {
Expand Down

0 comments on commit 1fafa68

Please sign in to comment.