Search in sources :

Example 71 with Time

use of ome.units.quantity.Time in project bioformats by openmicroscopy.

the class FormatReaderTest method testSaneOMEXML.

@Test(groups = { "all", "xml", "automated" })
public void testSaneOMEXML() {
    String testName = "testSaneOMEXML";
    if (!initFile())
        result(testName, false, "initFile");
    if (!config.hasValidXML()) {
        LOGGER.debug("Skipping valid XML test");
        result(testName, true);
        return;
    }
    String msg = null;
    try {
        MetadataRetrieve retrieve = (MetadataRetrieve) reader.getMetadataStore();
        boolean success = omexmlService.isOMEXMLMetadata(retrieve);
        if (!success)
            msg = TestTools.shortClassName(retrieve);
        for (int i = 0; i < reader.getSeriesCount() && msg == null; i++) {
            // total number of ChannelComponents should match SizeC
            int sizeC = retrieve.getPixelsSizeC(i).getValue().intValue();
            int nChannelComponents = retrieve.getChannelCount(i);
            int samplesPerPixel = retrieve.getChannelSamplesPerPixel(i, 0).getValue();
            if (sizeC != nChannelComponents * samplesPerPixel) {
                msg = "ChannelComponent";
            }
            // Z, C and T indices should be populated if PlaneTiming is present
            Time deltaT = null;
            Time exposure = null;
            Integer z = null, c = null, t = null;
            if (retrieve.getPlaneCount(i) > 0) {
                deltaT = retrieve.getPlaneDeltaT(i, 0);
                exposure = retrieve.getPlaneExposureTime(i, 0);
                z = retrieve.getPlaneTheZ(i, 0).getValue();
                c = retrieve.getPlaneTheC(i, 0).getValue();
                t = retrieve.getPlaneTheT(i, 0).getValue();
            }
            if ((deltaT != null || exposure != null) && (z == null || c == null || t == null)) {
                msg = "PlaneTiming";
            }
            // if CreationDate is before 1990, it's probably invalid
            String date = null;
            if (retrieve.getImageAcquisitionDate(i) != null) {
                date = retrieve.getImageAcquisitionDate(i).getValue();
            }
            config.setSeries(i);
            String configDate = config.getDate();
            if (date != null && !date.equals(configDate)) {
                date = date.trim();
                long acquiredDate = new Timestamp(date).asInstant().getMillis();
                long saneDate = new Timestamp("1990-01-01T00:00:00").asInstant().getMillis();
                long fileDate = new Location(reader.getCurrentFile()).getAbsoluteFile().lastModified();
                if (acquiredDate < saneDate && fileDate >= saneDate) {
                    msg = "CreationDate (date=" + date + " acquiredDate=" + acquiredDate + " fileDate=" + fileDate + " saneDate=" + saneDate + ")";
                }
            }
        }
    } catch (Throwable t) {
        LOGGER.info("", t);
        msg = t.getMessage();
    }
    result(testName, msg == null, msg);
}
Also used : PositiveInteger(ome.xml.model.primitives.PositiveInteger) Time(ome.units.quantity.Time) MetadataRetrieve(loci.formats.meta.MetadataRetrieve) Timestamp(ome.xml.model.primitives.Timestamp) Location(loci.common.Location) Test(org.testng.annotations.Test)

Example 72 with Time

use of ome.units.quantity.Time in project bioformats by openmicroscopy.

the class FormatReaderTest method testTimeIncrement.

@Test(groups = { "all", "fast", "automated" })
public void testTimeIncrement() {
    if (config == null)
        throw new SkipException("No config tree");
    String testName = "TimeIncrement";
    if (!initFile())
        result(testName, false, "initFile");
    IMetadata retrieve = (IMetadata) reader.getMetadataStore();
    for (int i = 0; i < reader.getSeriesCount(); i++) {
        config.setSeries(i);
        Time expectedIncrement = config.getTimeIncrement();
        Time realIncrement = retrieve.getPixelsTimeIncrement(i);
        if (!isAlmostEqual(expectedIncrement, realIncrement)) {
            result(testName, false, "Series " + i + " (expected " + expectedIncrement + ", actual " + realIncrement + ")");
        }
    }
    result(testName, true);
}
Also used : IMetadata(loci.formats.meta.IMetadata) Time(ome.units.quantity.Time) SkipException(org.testng.SkipException) Test(org.testng.annotations.Test)

Example 73 with Time

use of ome.units.quantity.Time in project bioformats by openmicroscopy.

the class Configuration method populateINI.

// -- Helper methods --
private void populateINI(IFormatReader reader) {
    IMetadata retrieve = (IMetadata) reader.getMetadataStore();
    ini = new IniList();
    IniTable globalTable = new IniTable();
    putTableName(globalTable, reader, " global");
    int seriesCount = reader.getSeriesCount();
    globalTable.put(SERIES_COUNT, String.valueOf(seriesCount));
    IFormatReader r = reader;
    if (r instanceof ImageReader) {
        r = ((ImageReader) r).getReader();
    } else if (r instanceof ReaderWrapper) {
        try {
            r = ((ReaderWrapper) r).unwrap();
        } catch (FormatException e) {
        } catch (IOException e) {
        }
    }
    globalTable.put(READER, TestTools.shortClassName(r));
    globalTable.put(TEST, "true");
    globalTable.put(MEMORY, String.valueOf(TestTools.getUsedMemory()));
    long planeSize = (long) FormatTools.getPlaneSize(reader) * 3;
    boolean canOpenImages = planeSize > 0 && TestTools.canFitInMemory(planeSize);
    long t0 = System.currentTimeMillis();
    if (canOpenImages) {
        try {
            reader.openBytes(0);
        } catch (FormatException e) {
        } catch (IOException e) {
        }
    }
    long t1 = System.currentTimeMillis();
    globalTable.put(ACCESS_TIME, String.valueOf(t1 - t0));
    ini.add(globalTable);
    for (int series = 0; series < seriesCount; series++) {
        reader.setSeries(series);
        IniTable seriesTable = new IniTable();
        putTableName(seriesTable, reader, SERIES + series);
        seriesTable.put(SIZE_X, String.valueOf(reader.getSizeX()));
        seriesTable.put(SIZE_Y, String.valueOf(reader.getSizeY()));
        seriesTable.put(SIZE_Z, String.valueOf(reader.getSizeZ()));
        seriesTable.put(SIZE_C, String.valueOf(reader.getSizeC()));
        seriesTable.put(SIZE_T, String.valueOf(reader.getSizeT()));
        seriesTable.put(DIMENSION_ORDER, reader.getDimensionOrder());
        seriesTable.put(IS_INTERLEAVED, String.valueOf(reader.isInterleaved()));
        seriesTable.put(IS_INDEXED, String.valueOf(reader.isIndexed()));
        seriesTable.put(IS_FALSE_COLOR, String.valueOf(reader.isFalseColor()));
        seriesTable.put(IS_RGB, String.valueOf(reader.isRGB()));
        seriesTable.put(THUMB_SIZE_X, String.valueOf(reader.getThumbSizeX()));
        seriesTable.put(THUMB_SIZE_Y, String.valueOf(reader.getThumbSizeY()));
        seriesTable.put(PIXEL_TYPE, FormatTools.getPixelTypeString(reader.getPixelType()));
        seriesTable.put(IS_LITTLE_ENDIAN, String.valueOf(reader.isLittleEndian()));
        seriesTable.put(CHANNEL_COUNT, String.valueOf(retrieve.getChannelCount(series)));
        try {
            planeSize = DataTools.safeMultiply32(reader.getSizeX(), reader.getSizeY(), reader.getEffectiveSizeC(), FormatTools.getBytesPerPixel(reader.getPixelType()));
            canOpenImages = planeSize > 0 && TestTools.canFitInMemory(planeSize);
        } catch (IllegalArgumentException e) {
            canOpenImages = false;
        }
        if (canOpenImages) {
            try {
                byte[] plane = reader.openBytes(0);
                seriesTable.put(MD5, TestTools.md5(plane));
            } catch (FormatException e) {
            // TODO
            } catch (IOException e) {
            // TODO
            }
        }
        try {
            int w = (int) Math.min(TILE_SIZE, reader.getSizeX());
            int h = (int) Math.min(TILE_SIZE, reader.getSizeY());
            byte[] tile = reader.openBytes(0, 0, 0, w, h);
            seriesTable.put(TILE_MD5, TestTools.md5(tile));
        } catch (FormatException e) {
        // TODO
        } catch (IOException e) {
        // TODO
        }
        seriesTable.put(NAME, retrieve.getImageName(series));
        seriesTable.put(DESCRIPTION, retrieve.getImageDescription(series));
        Length physicalX = retrieve.getPixelsPhysicalSizeX(series);
        if (physicalX != null) {
            seriesTable.put(PHYSICAL_SIZE_X, physicalX.value().toString());
            seriesTable.put(PHYSICAL_SIZE_X_UNIT, physicalX.unit().getSymbol());
        }
        Length physicalY = retrieve.getPixelsPhysicalSizeY(series);
        if (physicalY != null) {
            seriesTable.put(PHYSICAL_SIZE_Y, physicalY.value().toString());
            seriesTable.put(PHYSICAL_SIZE_Y_UNIT, physicalY.unit().getSymbol());
        }
        Length physicalZ = retrieve.getPixelsPhysicalSizeZ(series);
        if (physicalZ != null) {
            seriesTable.put(PHYSICAL_SIZE_Z, physicalZ.value().toString());
            seriesTable.put(PHYSICAL_SIZE_Z_UNIT, physicalZ.unit().getSymbol());
        }
        Time timeIncrement = retrieve.getPixelsTimeIncrement(series);
        if (timeIncrement != null) {
            seriesTable.put(TIME_INCREMENT, timeIncrement.value().toString());
            seriesTable.put(TIME_INCREMENT_UNIT, timeIncrement.unit().getSymbol());
        }
        Timestamp acquisition = retrieve.getImageAcquisitionDate(series);
        if (acquisition != null) {
            String date = acquisition.getValue();
            if (date != null) {
                seriesTable.put(DATE, date);
            }
        }
        for (int c = 0; c < retrieve.getChannelCount(series); c++) {
            seriesTable.put(CHANNEL_NAME + c, retrieve.getChannelName(series, c));
            try {
                seriesTable.put(LIGHT_SOURCE + c, retrieve.getChannelLightSourceSettingsID(series, c));
            } catch (NullPointerException e) {
            }
            try {
                int plane = reader.getIndex(0, c, 0);
                if (plane < retrieve.getPlaneCount(series)) {
                    seriesTable.put(EXPOSURE_TIME + c, retrieve.getPlaneExposureTime(series, plane).value().toString());
                    seriesTable.put(EXPOSURE_TIME_UNIT + c, retrieve.getPlaneExposureTime(series, plane).unit().getSymbol());
                }
            } catch (NullPointerException e) {
            }
            Length emWavelength = retrieve.getChannelEmissionWavelength(series, c);
            if (emWavelength != null) {
                seriesTable.put(EMISSION_WAVELENGTH + c, emWavelength.value().toString());
                seriesTable.put(EMISSION_WAVELENGTH_UNIT + c, emWavelength.unit().getSymbol());
            }
            Length exWavelength = retrieve.getChannelExcitationWavelength(series, c);
            if (exWavelength != null) {
                seriesTable.put(EXCITATION_WAVELENGTH + c, exWavelength.value().toString());
                seriesTable.put(EXCITATION_WAVELENGTH_UNIT + c, exWavelength.unit().getSymbol());
            }
            try {
                seriesTable.put(DETECTOR + c, retrieve.getDetectorSettingsID(series, c));
            } catch (NullPointerException e) {
            }
        }
        for (int p = 0; p < reader.getImageCount(); p++) {
            try {
                Time deltaT = retrieve.getPlaneDeltaT(series, p);
                if (deltaT != null) {
                    seriesTable.put(DELTA_T + p, deltaT.value(UNITS.SECOND).toString());
                }
                Length xPos = retrieve.getPlanePositionX(series, p);
                if (xPos != null) {
                    seriesTable.put(X_POSITION + p, String.valueOf(xPos.value().doubleValue()));
                    seriesTable.put(X_POSITION_UNIT + p, xPos.unit().getSymbol());
                }
                Length yPos = retrieve.getPlanePositionY(series, p);
                if (yPos != null) {
                    seriesTable.put(Y_POSITION + p, String.valueOf(yPos.value().doubleValue()));
                    seriesTable.put(Y_POSITION_UNIT + p, yPos.unit().getSymbol());
                }
                Length zPos = retrieve.getPlanePositionZ(series, p);
                if (zPos != null) {
                    seriesTable.put(Z_POSITION + p, String.valueOf(zPos.value().doubleValue()));
                    seriesTable.put(Z_POSITION_UNIT + p, zPos.unit().getSymbol());
                }
            } catch (IndexOutOfBoundsException e) {
            // only happens if no Plane elements were populated
            }
        }
        ini.add(seriesTable);
    }
}
Also used : IFormatReader(loci.formats.IFormatReader) IniList(loci.common.IniList) Time(ome.units.quantity.Time) IOException(java.io.IOException) Timestamp(ome.xml.model.primitives.Timestamp) ReaderWrapper(loci.formats.ReaderWrapper) FormatException(loci.formats.FormatException) IMetadata(loci.formats.meta.IMetadata) UnitsLength(ome.xml.model.enums.UnitsLength) Length(ome.units.quantity.Length) IniTable(loci.common.IniTable) ImageReader(loci.formats.ImageReader)

Example 74 with Time

use of ome.units.quantity.Time in project bioformats by openmicroscopy.

the class FormatReaderTest method testDeltaT.

@Test(groups = { "all", "fast", "automated" })
public void testDeltaT() {
    if (config == null)
        throw new SkipException("No config tree");
    String testName = "DeltaT";
    if (!initFile())
        result(testName, false, "initFile");
    IMetadata retrieve = (IMetadata) reader.getMetadataStore();
    for (int i = 0; i < reader.getSeriesCount(); i++) {
        config.setSeries(i);
        // Test image acquisition date
        String expectedDate = config.getDate();
        String date = null;
        if (retrieve.getImageAcquisitionDate(i) != null) {
            date = retrieve.getImageAcquisitionDate(i).getValue();
        }
        if (expectedDate != null && date != null && !expectedDate.equals(date)) {
            result(testName, false, "series " + i + " (expected " + expectedDate + ", actual " + date + ")");
            return;
        }
        for (int p = 0; p < reader.getImageCount(); p++) {
            Time deltaT = null;
            try {
                deltaT = retrieve.getPlaneDeltaT(i, p);
            } catch (IndexOutOfBoundsException e) {
            }
            Double expectedDeltaT = config.getDeltaT(p);
            if (deltaT == null && expectedDeltaT == null) {
                continue;
            }
            if (deltaT == null) {
                result(testName, false, "missing series " + i + ", plane " + p);
                return;
            }
            if (expectedDeltaT != null) {
                Double seconds = deltaT.value(UNITS.SECOND).doubleValue();
                if (Math.abs(seconds - expectedDeltaT) > Constants.EPSILON) {
                    result(testName, false, "series " + i + ", plane " + p + " (expected " + expectedDeltaT + ", actual " + seconds + ")");
                    return;
                }
            }
        }
    }
    result(testName, true);
}
Also used : IMetadata(loci.formats.meta.IMetadata) Time(ome.units.quantity.Time) SkipException(org.testng.SkipException) Test(org.testng.annotations.Test)

Aggregations

Time (ome.units.quantity.Time)74 Length (ome.units.quantity.Length)46 MetadataStore (loci.formats.meta.MetadataStore)41 Timestamp (ome.xml.model.primitives.Timestamp)33 CoreMetadata (loci.formats.CoreMetadata)30 FormatException (loci.formats.FormatException)24 RandomAccessInputStream (loci.common.RandomAccessInputStream)21 Location (loci.common.Location)20 ArrayList (java.util.ArrayList)17 PositiveInteger (ome.xml.model.primitives.PositiveInteger)13 NonNegativeInteger (ome.xml.model.primitives.NonNegativeInteger)12 IOException (java.io.IOException)10 Temperature (ome.units.quantity.Temperature)9 IFD (loci.formats.tiff.IFD)8 ElectricPotential (ome.units.quantity.ElectricPotential)7 Color (ome.xml.model.primitives.Color)7 IMetadata (loci.formats.meta.IMetadata)6 File (java.io.File)5 DependencyException (loci.common.services.DependencyException)5 ServiceException (loci.common.services.ServiceException)5