Search in sources :

Example 1 with Power

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

the class ZeissCZIReader method translateInformation.

private void translateInformation(Element root) throws FormatException {
    NodeList informations = root.getElementsByTagName("Information");
    if (informations == null || informations.getLength() == 0) {
        return;
    }
    Element information = (Element) informations.item(0);
    Element image = getFirstNode(information, "Image");
    Element user = getFirstNode(information, "User");
    Element environment = getFirstNode(information, "Environment");
    Element instrument = getFirstNode(information, "Instrument");
    Element document = getFirstNode(information, "Document");
    if (image != null) {
        String bitCount = getFirstNodeValue(image, "ComponentBitCount");
        if (bitCount != null) {
            core.get(0).bitsPerPixel = Integer.parseInt(bitCount);
        }
        acquiredDate = getFirstNodeValue(image, "AcquisitionDateAndTime");
        Element objectiveSettings = getFirstNode(image, "ObjectiveSettings");
        correctionCollar = getFirstNodeValue(objectiveSettings, "CorrectionCollar");
        medium = getFirstNodeValue(objectiveSettings, "Medium");
        refractiveIndex = getFirstNodeValue(objectiveSettings, "RefractiveIndex");
        String sizeV = getFirstNodeValue(image, "SizeV");
        if (sizeV != null && angles == 1) {
            angles = Integer.parseInt(sizeV);
        }
        Element dimensions = getFirstNode(image, "Dimensions");
        Element tNode = getFirstNode(dimensions, "T");
        if (tNode != null) {
            Element positions = getFirstNode(tNode, "Positions");
            if (positions != null) {
                Element interval = getFirstNode(positions, "Interval");
                if (interval != null) {
                    Element incrementNode = getFirstNode(interval, "Increment");
                    if (incrementNode != null) {
                        String increment = incrementNode.getTextContent();
                        timeIncrement = new Time(DataTools.parseDouble(increment), UNITS.SECOND);
                    }
                }
            }
        }
        Element sNode = getFirstNode(dimensions, "S");
        if (sNode != null) {
            NodeList scenes = sNode.getElementsByTagName("Scene");
            int nextPosition = 0;
            for (int i = 0; i < scenes.getLength(); i++) {
                Element scene = (Element) scenes.item(i);
                NodeList positions = scene.getElementsByTagName("Position");
                for (int p = 0; p < positions.getLength(); p++) {
                    Element position = (Element) positions.item(p);
                    String x = position.getAttribute("X");
                    String y = position.getAttribute("Y");
                    String z = position.getAttribute("Z");
                    if (nextPosition < positionsX.length && positionsX[nextPosition] == null) {
                        positionsX[nextPosition] = new Length(DataTools.parseDouble(x), UNITS.MICROM);
                        positionsY[nextPosition] = new Length(DataTools.parseDouble(y), UNITS.MICROM);
                        positionsZ[nextPosition] = new Length(DataTools.parseDouble(z), UNITS.MICROM);
                        nextPosition++;
                    }
                }
            }
        }
        NodeList channelNodes = getGrandchildren(dimensions, "Channel");
        if (channelNodes == null) {
            channelNodes = image.getElementsByTagName("Channel");
        }
        if (channelNodes != null) {
            for (int i = 0; i < channelNodes.getLength(); i++) {
                Element channel = (Element) channelNodes.item(i);
                while (channels.size() <= i) {
                    channels.add(new Channel());
                }
                channels.get(i).emission = getFirstNodeValue(channel, "EmissionWavelength");
                channels.get(i).excitation = getFirstNodeValue(channel, "ExcitationWavelength");
                channels.get(i).pinhole = getFirstNodeValue(channel, "PinholeSize");
                channels.get(i).name = channel.getAttribute("Name");
                String illumination = getFirstNodeValue(channel, "IlluminationType");
                if (illumination != null) {
                    channels.get(i).illumination = getIlluminationType(illumination);
                }
                String acquisition = getFirstNodeValue(channel, "AcquisitionMode");
                if (acquisition != null) {
                    channels.get(i).acquisitionMode = getAcquisitionMode(acquisition);
                }
                Element detectorSettings = getFirstNode(channel, "DetectorSettings");
                String binning = getFirstNodeValue(detectorSettings, "Binning");
                if (binning != null) {
                    binning = binning.replaceAll(",", "x");
                    binnings.add(binning);
                }
                Element scanInfo = getFirstNode(channel, "LaserScanInfo");
                if (scanInfo != null) {
                    zoom = getFirstNodeValue(scanInfo, "ZoomX");
                }
                Element detector = getFirstNode(detectorSettings, "Detector");
                if (detector != null) {
                    String detectorID = detector.getAttribute("Id");
                    if (detectorID.indexOf(' ') != -1) {
                        detectorID = detectorID.substring(detectorID.lastIndexOf(" ") + 1);
                    }
                    if (!detectorID.startsWith("Detector:")) {
                        detectorID = "Detector:" + detectorID;
                    }
                    detectorRefs.add(detectorID);
                }
                Element filterSet = getFirstNode(channel, "FilterSetRef");
                if (filterSet != null) {
                    channels.get(i).filterSetRef = filterSet.getAttribute("Id");
                }
            }
        }
    }
    if (user != null) {
        userDisplayName = getFirstNodeValue(user, "DisplayName");
        userFirstName = getFirstNodeValue(user, "FirstName");
        userLastName = getFirstNodeValue(user, "LastName");
        userMiddleName = getFirstNodeValue(user, "MiddleName");
        userEmail = getFirstNodeValue(user, "Email");
        userInstitution = getFirstNodeValue(user, "Institution");
        userName = getFirstNodeValue(user, "UserName");
    }
    if (environment != null) {
        temperature = getFirstNodeValue(environment, "Temperature");
        airPressure = getFirstNodeValue(environment, "AirPressure");
        humidity = getFirstNodeValue(environment, "Humidity");
        co2Percent = getFirstNodeValue(environment, "CO2Percent");
    }
    if (instrument != null) {
        NodeList microscopes = getGrandchildren(instrument, "Microscope");
        Element manufacturerNode = null;
        store.setInstrumentID(MetadataTools.createLSID("Instrument", 0), 0);
        if (microscopes != null) {
            Element microscope = (Element) microscopes.item(0);
            manufacturerNode = getFirstNode(microscope, "Manufacturer");
            store.setMicroscopeManufacturer(getFirstNodeValue(manufacturerNode, "Manufacturer"), 0);
            store.setMicroscopeModel(getFirstNodeValue(manufacturerNode, "Model"), 0);
            store.setMicroscopeSerialNumber(getFirstNodeValue(manufacturerNode, "SerialNumber"), 0);
            store.setMicroscopeLotNumber(getFirstNodeValue(manufacturerNode, "LotNumber"), 0);
            String microscopeType = getFirstNodeValue(microscope, "Type");
            if (microscopeType != null) {
                store.setMicroscopeType(getMicroscopeType(microscopeType), 0);
            }
        }
        NodeList lightSources = getGrandchildren(instrument, "LightSource");
        if (lightSources != null) {
            for (int i = 0; i < lightSources.getLength(); i++) {
                Element lightSource = (Element) lightSources.item(i);
                manufacturerNode = getFirstNode(lightSource, "Manufacturer");
                String manufacturer = getFirstNodeValue(manufacturerNode, "Manufacturer");
                String model = getFirstNodeValue(manufacturerNode, "Model");
                String serialNumber = getFirstNodeValue(manufacturerNode, "SerialNumber");
                String lotNumber = getFirstNodeValue(manufacturerNode, "LotNumber");
                String type = getFirstNodeValue(lightSource, "LightSourceType");
                String power = getFirstNodeValue(lightSource, "Power");
                if ("Laser".equals(type)) {
                    if (power != null) {
                        store.setLaserPower(new Power(new Double(power), UNITS.MILLIWATT), 0, i);
                    }
                    store.setLaserLotNumber(lotNumber, 0, i);
                    store.setLaserManufacturer(manufacturer, 0, i);
                    store.setLaserModel(model, 0, i);
                    store.setLaserSerialNumber(serialNumber, 0, i);
                } else if ("Arc".equals(type)) {
                    if (power != null) {
                        store.setArcPower(new Power(new Double(power), UNITS.MILLIWATT), 0, i);
                    }
                    store.setArcLotNumber(lotNumber, 0, i);
                    store.setArcManufacturer(manufacturer, 0, i);
                    store.setArcModel(model, 0, i);
                    store.setArcSerialNumber(serialNumber, 0, i);
                } else if ("LightEmittingDiode".equals(type)) {
                    if (power != null) {
                        store.setLightEmittingDiodePower(new Power(new Double(power), UNITS.MILLIWATT), 0, i);
                    }
                    store.setLightEmittingDiodeLotNumber(lotNumber, 0, i);
                    store.setLightEmittingDiodeManufacturer(manufacturer, 0, i);
                    store.setLightEmittingDiodeModel(model, 0, i);
                    store.setLightEmittingDiodeSerialNumber(serialNumber, 0, i);
                } else if ("Filament".equals(type)) {
                    if (power != null) {
                        store.setFilamentPower(new Power(new Double(power), UNITS.MILLIWATT), 0, i);
                    }
                    store.setFilamentLotNumber(lotNumber, 0, i);
                    store.setFilamentManufacturer(manufacturer, 0, i);
                    store.setFilamentModel(model, 0, i);
                    store.setFilamentSerialNumber(serialNumber, 0, i);
                }
            }
        }
        NodeList detectors = getGrandchildren(instrument, "Detector");
        if (detectors != null) {
            HashSet<String> uniqueDetectors = new HashSet<String>();
            for (int i = 0; i < detectors.getLength(); i++) {
                Element detector = (Element) detectors.item(i);
                manufacturerNode = getFirstNode(detector, "Manufacturer");
                String manufacturer = getFirstNodeValue(manufacturerNode, "Manufacturer");
                String model = getFirstNodeValue(manufacturerNode, "Model");
                String serialNumber = getFirstNodeValue(manufacturerNode, "SerialNumber");
                String lotNumber = getFirstNodeValue(manufacturerNode, "LotNumber");
                String detectorID = detector.getAttribute("Id");
                if (detectorID.indexOf(' ') != -1) {
                    detectorID = detectorID.substring(detectorID.lastIndexOf(" ") + 1);
                }
                if (!detectorID.startsWith("Detector:")) {
                    detectorID = "Detector:" + detectorID;
                }
                if (uniqueDetectors.contains(detectorID)) {
                    continue;
                }
                uniqueDetectors.add(detectorID);
                int detectorIndex = uniqueDetectors.size() - 1;
                store.setDetectorID(detectorID, 0, detectorIndex);
                store.setDetectorManufacturer(manufacturer, 0, detectorIndex);
                store.setDetectorModel(model, 0, detectorIndex);
                store.setDetectorSerialNumber(serialNumber, 0, detectorIndex);
                store.setDetectorLotNumber(lotNumber, 0, detectorIndex);
                if (gain == null || gain.equals("0")) {
                    gain = getFirstNodeValue(detector, "Gain");
                }
                if (detectorIndex == 0 || detectorIndex >= gains.size()) {
                    store.setDetectorGain(DataTools.parseDouble(gain), 0, detectorIndex);
                } else {
                    store.setDetectorGain(DataTools.parseDouble(gains.get(detectorIndex)), 0, detectorIndex);
                }
                String offset = getFirstNodeValue(detector, "Offset");
                if (offset != null && !offset.equals("")) {
                    store.setDetectorOffset(new Double(offset), 0, detectorIndex);
                }
                if (zoom == null) {
                    zoom = getFirstNodeValue(detector, "Zoom");
                }
                if (zoom != null && !zoom.equals("")) {
                    store.setDetectorZoom(new Double(zoom), 0, detectorIndex);
                }
                String ampGain = getFirstNodeValue(detector, "AmplificationGain");
                if (ampGain != null && !ampGain.equals("")) {
                    store.setDetectorAmplificationGain(new Double(ampGain), 0, detectorIndex);
                }
                String detectorType = getFirstNodeValue(detector, "Type");
                if (detectorType != null && !detectorType.equals("")) {
                    store.setDetectorType(getDetectorType(detectorType), 0, detectorIndex);
                }
            }
        }
        NodeList objectives = getGrandchildren(instrument, "Objective");
        parseObjectives(objectives);
        NodeList filterSets = getGrandchildren(instrument, "FilterSet");
        if (filterSets != null) {
            for (int i = 0; i < filterSets.getLength(); i++) {
                Element filterSet = (Element) filterSets.item(i);
                manufacturerNode = getFirstNode(filterSet, "Manufacturer");
                String manufacturer = getFirstNodeValue(manufacturerNode, "Manufacturer");
                String model = getFirstNodeValue(manufacturerNode, "Model");
                String serialNumber = getFirstNodeValue(manufacturerNode, "SerialNumber");
                String lotNumber = getFirstNodeValue(manufacturerNode, "LotNumber");
                String dichroicRef = getFirstNodeValue(filterSet, "DichroicRef");
                NodeList excitations = getGrandchildren(filterSet, "ExcitationFilters", "ExcitationFilterRef");
                NodeList emissions = getGrandchildren(filterSet, "EmissionFilters", "EmissionFilterRef");
                if (dichroicRef == null || dichroicRef.length() <= 0) {
                    Element ref = getFirstNode(filterSet, "DichroicRef");
                    if (ref != null) {
                        dichroicRef = ref.getAttribute("Id");
                    }
                }
                if (excitations == null) {
                    excitations = filterSet.getElementsByTagName("ExcitationFilterRef");
                }
                if (emissions == null) {
                    emissions = filterSet.getElementsByTagName("EmissionFilterRef");
                }
                if (dichroicRef != null || excitations != null || emissions != null) {
                    store.setFilterSetID(filterSet.getAttribute("Id"), 0, i);
                    store.setFilterSetManufacturer(manufacturer, 0, i);
                    store.setFilterSetModel(model, 0, i);
                    store.setFilterSetSerialNumber(serialNumber, 0, i);
                    store.setFilterSetLotNumber(lotNumber, 0, i);
                }
                if (dichroicRef != null && dichroicRef.length() > 0) {
                    store.setFilterSetDichroicRef(dichroicRef, 0, i);
                }
                if (excitations != null) {
                    for (int ex = 0; ex < excitations.getLength(); ex++) {
                        Element excitation = (Element) excitations.item(ex);
                        String ref = excitation.getTextContent();
                        if (ref == null || ref.length() <= 0) {
                            ref = excitation.getAttribute("Id");
                        }
                        if (ref != null && ref.length() > 0) {
                            store.setFilterSetExcitationFilterRef(ref, 0, i, ex);
                        }
                    }
                }
                if (emissions != null) {
                    for (int em = 0; em < emissions.getLength(); em++) {
                        Element emission = (Element) emissions.item(em);
                        String ref = emission.getTextContent();
                        if (ref == null || ref.length() <= 0) {
                            ref = emission.getAttribute("Id");
                        }
                        if (ref != null && ref.length() > 0) {
                            store.setFilterSetEmissionFilterRef(ref, 0, i, em);
                        }
                    }
                }
            }
        }
        NodeList filters = getGrandchildren(instrument, "Filter");
        if (filters != null) {
            for (int i = 0; i < filters.getLength(); i++) {
                Element filter = (Element) filters.item(i);
                manufacturerNode = getFirstNode(filter, "Manufacturer");
                String manufacturer = getFirstNodeValue(manufacturerNode, "Manufacturer");
                String model = getFirstNodeValue(manufacturerNode, "Model");
                String serialNumber = getFirstNodeValue(manufacturerNode, "SerialNumber");
                String lotNumber = getFirstNodeValue(manufacturerNode, "LotNumber");
                store.setFilterID(filter.getAttribute("Id"), 0, i);
                store.setFilterManufacturer(manufacturer, 0, i);
                store.setFilterModel(model, 0, i);
                store.setFilterSerialNumber(serialNumber, 0, i);
                store.setFilterLotNumber(lotNumber, 0, i);
                String filterType = getFirstNodeValue(filter, "Type");
                if (filterType != null) {
                    store.setFilterType(getFilterType(filterType), 0, i);
                }
                store.setFilterFilterWheel(getFirstNodeValue(filter, "FilterWheel"), 0, i);
                Element transmittance = getFirstNode(filter, "TransmittanceRange");
                String cutIn = getFirstNodeValue(transmittance, "CutIn");
                String cutOut = getFirstNodeValue(transmittance, "CutOut");
                Double inWave = cutIn == null ? 0 : new Double(cutIn);
                Double outWave = cutOut == null ? 0 : new Double(cutOut);
                Length in = FormatTools.getCutIn(inWave);
                Length out = FormatTools.getCutOut(outWave);
                if (in != null) {
                    store.setTransmittanceRangeCutIn(in, 0, i);
                }
                if (out != null) {
                    store.setTransmittanceRangeCutOut(out, 0, i);
                }
                String inTolerance = getFirstNodeValue(transmittance, "CutInTolerance");
                String outTolerance = getFirstNodeValue(transmittance, "CutOutTolerance");
                if (inTolerance != null) {
                    Double cutInTolerance = new Double(inTolerance);
                    store.setTransmittanceRangeCutInTolerance(new Length(cutInTolerance, UNITS.NANOMETER), 0, i);
                }
                if (outTolerance != null) {
                    Double cutOutTolerance = new Double(outTolerance);
                    store.setTransmittanceRangeCutOutTolerance(new Length(cutOutTolerance, UNITS.NANOMETER), 0, i);
                }
                String transmittancePercent = getFirstNodeValue(transmittance, "Transmittance");
                if (transmittancePercent != null) {
                    store.setTransmittanceRangeTransmittance(PercentFraction.valueOf(transmittancePercent), 0, i);
                }
            }
        }
        NodeList dichroics = getGrandchildren(instrument, "Dichroic");
        if (dichroics != null) {
            for (int i = 0; i < dichroics.getLength(); i++) {
                Element dichroic = (Element) dichroics.item(i);
                manufacturerNode = getFirstNode(dichroic, "Manufacturer");
                String manufacturer = getFirstNodeValue(manufacturerNode, "Manufacturer");
                String model = getFirstNodeValue(manufacturerNode, "Model");
                String serialNumber = getFirstNodeValue(manufacturerNode, "SerialNumber");
                String lotNumber = getFirstNodeValue(manufacturerNode, "LotNumber");
                store.setDichroicID(dichroic.getAttribute("Id"), 0, i);
                store.setDichroicManufacturer(manufacturer, 0, i);
                store.setDichroicModel(model, 0, i);
                store.setDichroicSerialNumber(serialNumber, 0, i);
                store.setDichroicLotNumber(lotNumber, 0, i);
            }
        }
    }
    if (document != null) {
        description = getFirstNodeValue(document, "Description");
        if (userName == null) {
            userName = getFirstNodeValue(document, "UserName");
        }
        imageName = getFirstNodeValue(document, "Name");
    }
}
Also used : Length(ome.units.quantity.Length) NodeList(org.w3c.dom.NodeList) Element(org.w3c.dom.Element) Time(ome.units.quantity.Time) Power(ome.units.quantity.Power) HashSet(java.util.HashSet)

Example 2 with Power

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

the class ICSReader method initFile.

// -- Internal FormatReader API methods --
/* @see loci.formats.FormatReader#initFile(String) */
@Override
protected void initFile(String id) throws FormatException, IOException {
    super.initFile(id);
    LOGGER.info("Finding companion file");
    String icsId = id, idsId = id;
    int dot = id.lastIndexOf(".");
    String ext = dot < 0 ? "" : id.substring(dot + 1).toLowerCase();
    if (ext.equals("ics")) {
        // convert C to D regardless of case
        char[] c = idsId.toCharArray();
        c[c.length - 2]++;
        idsId = new String(c);
    } else if (ext.equals("ids")) {
        // convert D to C regardless of case
        char[] c = icsId.toCharArray();
        c[c.length - 2]--;
        icsId = new String(c);
    }
    if (icsId == null)
        throw new FormatException("No ICS file found.");
    Location icsFile = new Location(icsId);
    if (!icsFile.exists())
        throw new FormatException("ICS file not found.");
    LOGGER.info("Checking file version");
    // check if we have a v2 ICS file - means there is no companion IDS file
    RandomAccessInputStream f = new RandomAccessInputStream(icsId);
    if (f.readString(17).trim().equals("ics_version\t2.0")) {
        in = new RandomAccessInputStream(icsId);
        versionTwo = true;
    } else {
        if (idsId == null) {
            f.close();
            throw new FormatException("No IDS file found.");
        }
        Location idsFile = new Location(idsId);
        if (!idsFile.exists()) {
            f.close();
            throw new FormatException("IDS file not found.");
        }
        currentIdsId = idsId;
        in = new RandomAccessInputStream(currentIdsId);
    }
    f.close();
    currentIcsId = icsId;
    LOGGER.info("Reading metadata");
    CoreMetadata m = core.get(0);
    Double[] scales = null;
    Double[] timestamps = null;
    String[] units = null;
    String[] axes = null;
    int[] axisLengths = null;
    String byteOrder = null, rFormat = null, compression = null;
    // parse key/value pairs from beginning of ICS file
    RandomAccessInputStream reader = new RandomAccessInputStream(icsId);
    reader.seek(0);
    reader.readString(NL);
    String line = reader.readString(NL);
    boolean signed = false;
    final StringBuilder textBlock = new StringBuilder();
    double[] sizes = null;
    Double[] emWaves = null, exWaves = null;
    Length[] stagePos = null;
    String imageName = null, date = null, description = null;
    Double magnification = null, lensNA = null, workingDistance = null;
    String objectiveModel = null, immersion = null, lastName = null;
    Hashtable<Integer, Double> gains = new Hashtable<Integer, Double>();
    Hashtable<Integer, Double> pinholes = new Hashtable<Integer, Double>();
    Hashtable<Integer, Double> wavelengths = new Hashtable<Integer, Double>();
    Hashtable<Integer, String> channelNames = new Hashtable<Integer, String>();
    String laserModel = null;
    String laserManufacturer = null;
    Double laserPower = null;
    Double laserRepetitionRate = null;
    String detectorManufacturer = null;
    String detectorModel = null;
    String microscopeModel = null;
    String microscopeManufacturer = null;
    String experimentType = null;
    Time exposureTime = null;
    String filterSetModel = null;
    String dichroicModel = null;
    String excitationModel = null;
    String emissionModel = null;
    while (line != null && !line.trim().equals("end") && reader.getFilePointer() < reader.length() - 1) {
        line = line.trim();
        if (line.length() > 0) {
            // split the line into tokens
            String[] tokens = tokenize(line);
            String token0 = tokens[0].toLowerCase();
            String[] keyValue = null;
            // version category
            if (token0.equals("ics_version")) {
                String value = concatenateTokens(tokens, 1, tokens.length);
                addGlobalMeta(token0, value);
            } else // filename category
            if (token0.equals("filename")) {
                imageName = concatenateTokens(tokens, 1, tokens.length);
                addGlobalMeta(token0, imageName);
            } else // layout category
            if (token0.equals("layout")) {
                keyValue = findKeyValue(tokens, LAYOUT_KEYS);
                String key = keyValue[0];
                String value = keyValue[1];
                addGlobalMeta(key, value);
                if (key.equalsIgnoreCase("layout sizes")) {
                    StringTokenizer t = new StringTokenizer(value);
                    axisLengths = new int[t.countTokens()];
                    for (int n = 0; n < axisLengths.length; n++) {
                        try {
                            axisLengths[n] = Integer.parseInt(t.nextToken().trim());
                        } catch (NumberFormatException e) {
                            LOGGER.debug("Could not parse axis length", e);
                        }
                    }
                } else if (key.equalsIgnoreCase("layout order")) {
                    StringTokenizer t = new StringTokenizer(value);
                    axes = new String[t.countTokens()];
                    for (int n = 0; n < axes.length; n++) {
                        axes[n] = t.nextToken().trim();
                    }
                } else if (key.equalsIgnoreCase("layout significant_bits")) {
                    m.bitsPerPixel = Integer.parseInt(value);
                }
            } else // representation category
            if (token0.equals("representation")) {
                keyValue = findKeyValue(tokens, REPRESENTATION_KEYS);
                String key = keyValue[0];
                String value = keyValue[1];
                addGlobalMeta(key, value);
                if (key.equalsIgnoreCase("representation byte_order")) {
                    byteOrder = value;
                } else if (key.equalsIgnoreCase("representation format")) {
                    rFormat = value;
                } else if (key.equalsIgnoreCase("representation compression")) {
                    compression = value;
                } else if (key.equalsIgnoreCase("representation sign")) {
                    signed = value.equals("signed");
                }
            } else // parameter category
            if (token0.equals("parameter")) {
                keyValue = findKeyValue(tokens, PARAMETER_KEYS);
                String key = keyValue[0];
                String value = keyValue[1];
                addGlobalMeta(key, value);
                if (key.equalsIgnoreCase("parameter scale")) {
                    // parse physical pixel sizes and time increment
                    scales = splitDoubles(value);
                } else if (key.equalsIgnoreCase("parameter t")) {
                    // parse explicit timestamps
                    timestamps = splitDoubles(value);
                } else if (key.equalsIgnoreCase("parameter units")) {
                    // parse units for scale
                    units = value.split("\\s+");
                }
                if (getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) {
                    if (key.equalsIgnoreCase("parameter ch")) {
                        String[] names = value.split(" ");
                        for (int n = 0; n < names.length; n++) {
                            channelNames.put(new Integer(n), names[n].trim());
                        }
                    }
                }
            } else // history category
            if (token0.equals("history")) {
                keyValue = findKeyValue(tokens, HISTORY_KEYS);
                String key = keyValue[0];
                String value = keyValue[1];
                addGlobalMeta(key, value);
                Double doubleValue = null;
                try {
                    doubleValue = new Double(value);
                } catch (NumberFormatException e) {
                    // ARG this happens a lot; spurious error in most cases
                    LOGGER.debug("Could not parse double value '{}'", value, e);
                }
                if (key.equalsIgnoreCase("history software") && value.indexOf("SVI") != -1) {
                    // ICS files written by SVI Huygens are inverted on the Y axis
                    invertY = true;
                } else if (key.equalsIgnoreCase("history date") || key.equalsIgnoreCase("history created on")) {
                    if (value.indexOf(' ') > 0) {
                        date = value.substring(0, value.lastIndexOf(" "));
                        date = DateTools.formatDate(date, DATE_FORMATS);
                    }
                } else if (key.equalsIgnoreCase("history creation date")) {
                    date = DateTools.formatDate(value, DATE_FORMATS);
                } else if (key.equalsIgnoreCase("history type")) {
                    // HACK - support for Gray Institute at Oxford's ICS lifetime data
                    if (value.equalsIgnoreCase("time resolved") || value.equalsIgnoreCase("FluorescenceLifetime")) {
                        lifetime = true;
                    }
                    experimentType = value;
                } else if (key.equalsIgnoreCase("history labels")) {
                    // HACK - support for Gray Institute at Oxford's ICS lifetime data
                    labels = value;
                } else if (getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) {
                    if (key.equalsIgnoreCase("history") || key.equalsIgnoreCase("history text")) {
                        textBlock.append(value);
                        textBlock.append("\n");
                        metadata.remove(key);
                    } else if (key.startsWith("history gain")) {
                        Integer n = 0;
                        try {
                            n = new Integer(key.substring(12).trim());
                            n = new Integer(n.intValue() - 1);
                        } catch (NumberFormatException e) {
                        }
                        if (doubleValue != null) {
                            gains.put(n, doubleValue);
                        }
                    } else if (key.startsWith("history laser") && key.endsWith("wavelength")) {
                        int laser = Integer.parseInt(key.substring(13, key.indexOf(" ", 13))) - 1;
                        value = value.replaceAll("nm", "").trim();
                        try {
                            wavelengths.put(new Integer(laser), new Double(value));
                        } catch (NumberFormatException e) {
                            LOGGER.debug("Could not parse wavelength", e);
                        }
                    } else if (key.equalsIgnoreCase("history Wavelength*")) {
                        String[] waves = value.split(" ");
                        for (int i = 0; i < waves.length; i++) {
                            wavelengths.put(new Integer(i), new Double(waves[i]));
                        }
                    } else if (key.equalsIgnoreCase("history laser manufacturer")) {
                        laserManufacturer = value;
                    } else if (key.equalsIgnoreCase("history laser model")) {
                        laserModel = value;
                    } else if (key.equalsIgnoreCase("history laser power")) {
                        try {
                            // TODO ARG i.e. doubleValue
                            laserPower = new Double(value);
                        } catch (NumberFormatException e) {
                        }
                    } else if (key.equalsIgnoreCase("history laser rep rate")) {
                        String repRate = value;
                        if (repRate.indexOf(' ') != -1) {
                            repRate = repRate.substring(0, repRate.lastIndexOf(" "));
                        }
                        laserRepetitionRate = new Double(repRate);
                    } else if (key.equalsIgnoreCase("history objective type") || key.equalsIgnoreCase("history objective")) {
                        objectiveModel = value;
                    } else if (key.equalsIgnoreCase("history objective immersion")) {
                        immersion = value;
                    } else if (key.equalsIgnoreCase("history objective NA")) {
                        lensNA = doubleValue;
                    } else if (key.equalsIgnoreCase("history objective WorkingDistance")) {
                        workingDistance = doubleValue;
                    } else if (key.equalsIgnoreCase("history objective magnification") || key.equalsIgnoreCase("history objective mag")) {
                        magnification = doubleValue;
                    } else if (key.equalsIgnoreCase("history camera manufacturer")) {
                        detectorManufacturer = value;
                    } else if (key.equalsIgnoreCase("history camera model")) {
                        detectorModel = value;
                    } else if (key.equalsIgnoreCase("history author") || key.equalsIgnoreCase("history experimenter")) {
                        lastName = value;
                    } else if (key.equalsIgnoreCase("history extents")) {
                        String[] lengths = value.split(" ");
                        sizes = new double[lengths.length];
                        for (int n = 0; n < sizes.length; n++) {
                            try {
                                sizes[n] = Double.parseDouble(lengths[n].trim());
                            } catch (NumberFormatException e) {
                                LOGGER.debug("Could not parse axis length", e);
                            }
                        }
                    } else if (key.equalsIgnoreCase("history stage_xyzum")) {
                        String[] positions = value.split(" ");
                        stagePos = new Length[positions.length];
                        for (int n = 0; n < stagePos.length; n++) {
                            try {
                                final Double number = Double.valueOf(positions[n]);
                                stagePos[n] = new Length(number, UNITS.REFERENCEFRAME);
                            } catch (NumberFormatException e) {
                                LOGGER.debug("Could not parse stage position", e);
                            }
                        }
                    } else if (key.equalsIgnoreCase("history stage positionx")) {
                        if (stagePos == null) {
                            stagePos = new Length[3];
                        }
                        final Double number = Double.valueOf(value);
                        stagePos[0] = new Length(number, UNITS.REFERENCEFRAME);
                    } else if (key.equalsIgnoreCase("history stage positiony")) {
                        if (stagePos == null) {
                            stagePos = new Length[3];
                        }
                        final Double number = Double.valueOf(value);
                        stagePos[1] = new Length(number, UNITS.REFERENCEFRAME);
                    } else if (key.equalsIgnoreCase("history stage positionz")) {
                        if (stagePos == null) {
                            stagePos = new Length[3];
                        }
                        final Double number = Double.valueOf(value);
                        stagePos[2] = new Length(number, UNITS.REFERENCEFRAME);
                    } else if (key.equalsIgnoreCase("history other text")) {
                        description = value;
                    } else if (key.startsWith("history step") && key.endsWith("name")) {
                        Integer n = new Integer(key.substring(12, key.indexOf(" ", 12)));
                        channelNames.put(n, value);
                    } else if (key.equalsIgnoreCase("history cube")) {
                        channelNames.put(new Integer(channelNames.size()), value);
                    } else if (key.equalsIgnoreCase("history cube emm nm")) {
                        if (emWaves == null) {
                            emWaves = new Double[1];
                        }
                        emWaves[0] = new Double(value.split(" ")[1].trim());
                    } else if (key.equalsIgnoreCase("history cube exc nm")) {
                        if (exWaves == null) {
                            exWaves = new Double[1];
                        }
                        exWaves[0] = new Double(value.split(" ")[1].trim());
                    } else if (key.equalsIgnoreCase("history microscope")) {
                        microscopeModel = value;
                    } else if (key.equalsIgnoreCase("history manufacturer")) {
                        microscopeManufacturer = value;
                    } else if (key.equalsIgnoreCase("history Exposure")) {
                        String expTime = value;
                        if (expTime.indexOf(' ') != -1) {
                            expTime = expTime.substring(0, expTime.indexOf(' '));
                        }
                        Double expDouble = new Double(expTime);
                        if (expDouble != null) {
                            exposureTime = new Time(expDouble, UNITS.SECOND);
                        }
                    } else if (key.equalsIgnoreCase("history filterset")) {
                        filterSetModel = value;
                    } else if (key.equalsIgnoreCase("history filterset dichroic name")) {
                        dichroicModel = value;
                    } else if (key.equalsIgnoreCase("history filterset exc name")) {
                        excitationModel = value;
                    } else if (key.equalsIgnoreCase("history filterset emm name")) {
                        emissionModel = value;
                    }
                }
            } else // document category
            if (token0.equals("document")) {
                keyValue = findKeyValue(tokens, DOCUMENT_KEYS);
                String key = keyValue[0];
                String value = keyValue[1];
                addGlobalMeta(key, value);
            } else // sensor category
            if (token0.equals("sensor")) {
                keyValue = findKeyValue(tokens, SENSOR_KEYS);
                String key = keyValue[0];
                String value = keyValue[1];
                addGlobalMeta(key, value);
                if (getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) {
                    if (key.equalsIgnoreCase("sensor s_params LambdaEm")) {
                        String[] waves = value.split(" ");
                        emWaves = new Double[waves.length];
                        for (int n = 0; n < emWaves.length; n++) {
                            try {
                                emWaves[n] = new Double(Double.parseDouble(waves[n]));
                            } catch (NumberFormatException e) {
                                LOGGER.debug("Could not parse emission wavelength", e);
                            }
                        }
                    } else if (key.equalsIgnoreCase("sensor s_params LambdaEx")) {
                        String[] waves = value.split(" ");
                        exWaves = new Double[waves.length];
                        for (int n = 0; n < exWaves.length; n++) {
                            try {
                                exWaves[n] = new Double(Double.parseDouble(waves[n]));
                            } catch (NumberFormatException e) {
                                LOGGER.debug("Could not parse excitation wavelength", e);
                            }
                        }
                    } else if (key.equalsIgnoreCase("sensor s_params PinholeRadius")) {
                        String[] pins = value.split(" ");
                        int channel = 0;
                        for (int n = 0; n < pins.length; n++) {
                            if (pins[n].trim().equals(""))
                                continue;
                            try {
                                pinholes.put(new Integer(channel++), new Double(pins[n]));
                            } catch (NumberFormatException e) {
                                LOGGER.debug("Could not parse pinhole", e);
                            }
                        }
                    }
                }
            } else // view category
            if (token0.equals("view")) {
                keyValue = findKeyValue(tokens, VIEW_KEYS);
                String key = keyValue[0];
                String value = keyValue[1];
                // handle "view view color lib lut Green Fire green", etc.
                if (key.equalsIgnoreCase("view view color lib lut")) {
                    int index;
                    int redIndex = value.toLowerCase().lastIndexOf("red");
                    int greenIndex = value.toLowerCase().lastIndexOf("green");
                    int blueIndex = value.toLowerCase().lastIndexOf("blue");
                    if (redIndex > 0 && redIndex > greenIndex && redIndex > blueIndex) {
                        index = redIndex + "red".length();
                    } else if (greenIndex > 0 && greenIndex > redIndex && greenIndex > blueIndex) {
                        index = greenIndex + "green".length();
                    } else if (blueIndex > 0 && blueIndex > redIndex && blueIndex > greenIndex) {
                        index = blueIndex + "blue".length();
                    } else {
                        index = value.indexOf(' ');
                    }
                    if (index > 0) {
                        key = key + ' ' + value.substring(0, index);
                        value = value.substring(index + 1);
                    }
                } else // "view view color mode rgb set blue-green-red", etc.
                if (key.equalsIgnoreCase("view view color mode rgb set")) {
                    int index = value.toLowerCase().lastIndexOf("colors");
                    if (index > 0) {
                        index += "colors".length();
                    } else {
                        index = value.indexOf(' ');
                    }
                    if (index > 0) {
                        key = key + ' ' + value.substring(0, index);
                        value = value.substring(index + 1);
                    }
                }
                addGlobalMeta(key, value);
            } else {
                LOGGER.debug("Unknown category " + token0);
            }
        }
        line = reader.readString(NL);
    }
    reader.close();
    hasInstrumentData = emWaves != null || exWaves != null || lensNA != null || stagePos != null || magnification != null || workingDistance != null || objectiveModel != null || immersion != null;
    addGlobalMeta("history text", textBlock.toString());
    LOGGER.info("Populating core metadata");
    m.rgb = false;
    m.dimensionOrder = "XY";
    // find axis sizes
    channelLengths = new Vector<Integer>();
    channelTypes = new Vector<String>();
    int bitsPerPixel = 0;
    for (int i = 0; i < axes.length; i++) {
        if (i >= axisLengths.length)
            break;
        if (axes[i].equals("bits")) {
            bitsPerPixel = axisLengths[i];
            while (bitsPerPixel % 8 != 0) bitsPerPixel++;
            if (bitsPerPixel == 24 || bitsPerPixel == 48)
                bitsPerPixel /= 3;
        } else if (axes[i].equals("x")) {
            m.sizeX = axisLengths[i];
        } else if (axes[i].equals("y")) {
            m.sizeY = axisLengths[i];
        } else if (axes[i].equals("z")) {
            m.sizeZ = axisLengths[i];
            if (getDimensionOrder().indexOf('Z') == -1) {
                m.dimensionOrder += 'Z';
            }
        } else if (axes[i].equals("t")) {
            if (getSizeT() == 0)
                m.sizeT = axisLengths[i];
            else
                m.sizeT *= axisLengths[i];
            if (getDimensionOrder().indexOf('T') == -1) {
                m.dimensionOrder += 'T';
            }
        } else {
            if (m.sizeC == 0)
                m.sizeC = axisLengths[i];
            else
                m.sizeC *= axisLengths[i];
            channelLengths.add(new Integer(axisLengths[i]));
            storedRGB = getSizeX() == 0;
            m.rgb = getSizeX() == 0 && getSizeC() <= 4 && getSizeC() > 1;
            if (getDimensionOrder().indexOf('C') == -1) {
                m.dimensionOrder += 'C';
            }
            if (axes[i].startsWith("c")) {
                channelTypes.add(FormatTools.CHANNEL);
            } else if (axes[i].equals("p")) {
                channelTypes.add(FormatTools.PHASE);
            } else if (axes[i].equals("f")) {
                channelTypes.add(FormatTools.FREQUENCY);
            } else
                channelTypes.add("");
        }
    }
    if (channelLengths.isEmpty()) {
        channelLengths.add(1);
        channelTypes.add(FormatTools.CHANNEL);
    }
    if (isRGB() && emWaves != null && emWaves.length == getSizeC()) {
        m.rgb = false;
        storedRGB = true;
    }
    m.dimensionOrder = MetadataTools.makeSaneDimensionOrder(getDimensionOrder());
    if (getSizeZ() == 0)
        m.sizeZ = 1;
    if (getSizeC() == 0)
        m.sizeC = 1;
    if (getSizeT() == 0)
        m.sizeT = 1;
    // length and type.
    if (channelLengths.size() > 0) {
        int clen0 = channelLengths.get(0);
        String ctype0 = channelTypes.get(0);
        boolean same = true;
        for (Integer len : channelLengths) {
            if (clen0 != len)
                same = false;
        }
        for (String type : channelTypes) {
            if (!ctype0.equals(type))
                same = false;
        }
        if (same) {
            m.moduloC.type = ctype0;
            if (FormatTools.LIFETIME.equals(ctype0)) {
                m.moduloC.parentType = FormatTools.SPECTRA;
            }
            m.moduloC.typeDescription = "TCSPC";
            m.moduloC.start = 0;
            m.moduloC.step = 1;
            m.moduloC.end = clen0 - 1;
        }
    }
    m.interleaved = isRGB();
    m.indexed = false;
    m.falseColor = false;
    m.metadataComplete = true;
    m.littleEndian = true;
    // HACK - support for Gray Institute at Oxford's ICS lifetime data
    if (lifetime && labels != null) {
        int binCount = 0;
        String newOrder = null;
        if (labels.equalsIgnoreCase("t x y")) {
            // nominal X Y Z is actually C X Y (which is X Y C interleaved)
            newOrder = "XYCZT";
            m.interleaved = true;
            binCount = m.sizeX;
            m.sizeX = m.sizeY;
            m.sizeY = m.sizeZ;
            m.sizeZ = 1;
        } else if (labels.equalsIgnoreCase("x y t")) {
            // nominal X Y Z is actually X Y C
            newOrder = "XYCZT";
            binCount = m.sizeZ;
            m.sizeZ = 1;
        } else {
            LOGGER.debug("Lifetime data, unexpected 'history labels' " + labels);
        }
        if (newOrder != null) {
            m.dimensionOrder = newOrder;
            m.sizeC = binCount;
            m.moduloC.parentType = FormatTools.LIFETIME;
        }
    }
    // do not modify the Z, T, or channel counts after this point
    m.imageCount = getSizeZ() * getSizeT();
    if (!isRGB())
        m.imageCount *= getSizeC();
    if (byteOrder != null) {
        String firstByte = byteOrder.split(" ")[0];
        int first = Integer.parseInt(firstByte);
        m.littleEndian = rFormat.equals("real") ? first == 1 : first != 1;
    }
    gzip = (compression == null) ? false : compression.equals("gzip");
    if (versionTwo) {
        String s = in.readString(NL);
        while (!s.trim().equals("end")) s = in.readString(NL);
    }
    offset = in.getFilePointer();
    int bytes = bitsPerPixel / 8;
    if (bitsPerPixel < 32)
        m.littleEndian = !isLittleEndian();
    boolean fp = rFormat.equals("real");
    m.pixelType = FormatTools.pixelTypeFromBytes(bytes, signed, fp);
    LOGGER.info("Populating OME metadata");
    MetadataStore store = makeFilterMetadata();
    MetadataTools.populatePixels(store, this, true);
    // populate Image data
    store.setImageName(imageName, 0);
    if (date != null)
        store.setImageAcquisitionDate(new Timestamp(date), 0);
    if (getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) {
        store.setImageDescription(description, 0);
        // link Instrument and Image
        String instrumentID = MetadataTools.createLSID("Instrument", 0);
        store.setInstrumentID(instrumentID, 0);
        store.setMicroscopeModel(microscopeModel, 0);
        store.setMicroscopeManufacturer(microscopeManufacturer, 0);
        store.setImageInstrumentRef(instrumentID, 0);
        store.setExperimentID(MetadataTools.createLSID("Experiment", 0), 0);
        store.setExperimentType(getExperimentType(experimentType), 0);
        if (scales != null) {
            if (units != null && units.length == scales.length - 1) {
                // correct for missing units
                // sometimes, the units for the C axis are missing entirely
                ArrayList<String> realUnits = new ArrayList<String>();
                int unitIndex = 0;
                for (int i = 0; i < axes.length; i++) {
                    if (axes[i].toLowerCase().equals("ch")) {
                        realUnits.add("nm");
                    } else {
                        realUnits.add(units[unitIndex++]);
                    }
                }
                units = realUnits.toArray(new String[realUnits.size()]);
            }
            for (int i = 0; i < scales.length; i++) {
                Double scale = scales[i];
                if (scale == null) {
                    continue;
                }
                String axis = axes != null && axes.length > i ? axes[i] : "";
                String unit = units != null && units.length > i ? units[i] : "";
                if (axis.equals("x")) {
                    if (checkUnit(unit, "um", "microns", "micrometers")) {
                        Length x = FormatTools.getPhysicalSizeX(scale);
                        if (x != null) {
                            store.setPixelsPhysicalSizeX(x, 0);
                        }
                    }
                } else if (axis.equals("y")) {
                    if (checkUnit(unit, "um", "microns", "micrometers")) {
                        Length y = FormatTools.getPhysicalSizeY(scale);
                        if (y != null) {
                            store.setPixelsPhysicalSizeY(y, 0);
                        }
                    }
                } else if (axis.equals("z")) {
                    if (checkUnit(unit, "um", "microns", "micrometers")) {
                        Length z = FormatTools.getPhysicalSizeZ(scale);
                        if (z != null) {
                            store.setPixelsPhysicalSizeZ(z, 0);
                        }
                    }
                } else if (axis.equals("t") && scale != null) {
                    if (checkUnit(unit, "ms")) {
                        store.setPixelsTimeIncrement(new Time(scale, UNITS.MILLISECOND), 0);
                    } else if (checkUnit(unit, "seconds") || checkUnit(unit, "s")) {
                        store.setPixelsTimeIncrement(new Time(scale, UNITS.SECOND), 0);
                    }
                }
            }
        } else if (sizes != null) {
            if (sizes.length > 0) {
                Length x = FormatTools.getPhysicalSizeX(sizes[0]);
                if (x != null) {
                    store.setPixelsPhysicalSizeX(x, 0);
                }
            }
            if (sizes.length > 1) {
                sizes[1] /= getSizeY();
                Length y = FormatTools.getPhysicalSizeY(sizes[1]);
                if (y != null) {
                    store.setPixelsPhysicalSizeY(y, 0);
                }
            }
        }
        if (timestamps != null) {
            for (int t = 0; t < timestamps.length; t++) {
                // ignore superfluous timestamps
                if (t >= getSizeT())
                    break;
                // ignore missing timestamp
                if (timestamps[t] == null)
                    continue;
                Time deltaT = new Time(timestamps[t], UNITS.SECOND);
                // ignore invalid timestamp
                if (Double.isNaN(deltaT.value().doubleValue()))
                    continue;
                // assign timestamp to all relevant planes
                for (int z = 0; z < getSizeZ(); z++) {
                    for (int c = 0; c < getEffectiveSizeC(); c++) {
                        int index = getIndex(z, c, t);
                        store.setPlaneDeltaT(deltaT, 0, index);
                    }
                }
            }
        }
        for (int i = 0; i < getEffectiveSizeC(); i++) {
            if (channelNames.containsKey(i)) {
                store.setChannelName(channelNames.get(i), 0, i);
            }
            if (pinholes.containsKey(i)) {
                store.setChannelPinholeSize(new Length(pinholes.get(i), UNITS.MICROMETER), 0, i);
            }
            if (emWaves != null && i < emWaves.length) {
                Length em = FormatTools.getEmissionWavelength(emWaves[i]);
                if (em != null) {
                    store.setChannelEmissionWavelength(em, 0, i);
                }
            }
            if (exWaves != null && i < exWaves.length) {
                Length ex = FormatTools.getExcitationWavelength(exWaves[i]);
                if (ex != null) {
                    store.setChannelExcitationWavelength(ex, 0, i);
                }
            }
        }
        // populate Laser data
        Integer[] lasers = wavelengths.keySet().toArray(new Integer[0]);
        Arrays.sort(lasers);
        for (int i = 0; i < lasers.length; i++) {
            store.setLaserID(MetadataTools.createLSID("LightSource", 0, i), 0, i);
            Length wave = FormatTools.getWavelength(wavelengths.get(lasers[i]));
            if (wave != null) {
                store.setLaserWavelength(wave, 0, i);
            }
            store.setLaserType(getLaserType("Other"), 0, i);
            store.setLaserLaserMedium(getLaserMedium("Other"), 0, i);
            store.setLaserManufacturer(laserManufacturer, 0, i);
            store.setLaserModel(laserModel, 0, i);
            Power theLaserPower = FormatTools.createPower(laserPower, UNITS.MILLIWATT);
            if (theLaserPower != null) {
                store.setLaserPower(theLaserPower, 0, i);
            }
            Frequency theLaserRepetitionRate = FormatTools.createFrequency(laserRepetitionRate, UNITS.HERTZ);
            if (theLaserRepetitionRate != null) {
                store.setLaserRepetitionRate(theLaserRepetitionRate, 0, i);
            }
        }
        if (lasers.length == 0 && laserManufacturer != null) {
            store.setLaserID(MetadataTools.createLSID("LightSource", 0, 0), 0, 0);
            store.setLaserType(getLaserType("Other"), 0, 0);
            store.setLaserLaserMedium(getLaserMedium("Other"), 0, 0);
            store.setLaserManufacturer(laserManufacturer, 0, 0);
            store.setLaserModel(laserModel, 0, 0);
            Power theLaserPower = FormatTools.createPower(laserPower, UNITS.MILLIWATT);
            if (theLaserPower != null) {
                store.setLaserPower(theLaserPower, 0, 0);
            }
            Frequency theLaserRepetitionRate = FormatTools.createFrequency(laserRepetitionRate, UNITS.HERTZ);
            if (theLaserRepetitionRate != null) {
                store.setLaserRepetitionRate(theLaserRepetitionRate, 0, 0);
            }
        }
        if (filterSetModel != null) {
            store.setFilterSetID(MetadataTools.createLSID("FilterSet", 0, 0), 0, 0);
            store.setFilterSetModel(filterSetModel, 0, 0);
            String dichroicID = MetadataTools.createLSID("Dichroic", 0, 0);
            String emFilterID = MetadataTools.createLSID("Filter", 0, 0);
            String exFilterID = MetadataTools.createLSID("Filter", 0, 1);
            store.setDichroicID(dichroicID, 0, 0);
            store.setDichroicModel(dichroicModel, 0, 0);
            store.setFilterSetDichroicRef(dichroicID, 0, 0);
            store.setFilterID(emFilterID, 0, 0);
            store.setFilterModel(emissionModel, 0, 0);
            store.setFilterSetEmissionFilterRef(emFilterID, 0, 0, 0);
            store.setFilterID(exFilterID, 0, 1);
            store.setFilterModel(excitationModel, 0, 1);
            store.setFilterSetExcitationFilterRef(exFilterID, 0, 0, 0);
        }
        if (objectiveModel != null)
            store.setObjectiveModel(objectiveModel, 0, 0);
        if (immersion == null)
            immersion = "Other";
        store.setObjectiveImmersion(getImmersion(immersion), 0, 0);
        if (lensNA != null)
            store.setObjectiveLensNA(lensNA, 0, 0);
        if (workingDistance != null) {
            store.setObjectiveWorkingDistance(new Length(workingDistance, UNITS.MICROMETER), 0, 0);
        }
        if (magnification != null) {
            store.setObjectiveCalibratedMagnification(magnification, 0, 0);
        }
        store.setObjectiveCorrection(getCorrection("Other"), 0, 0);
        // link Objective to Image
        String objectiveID = MetadataTools.createLSID("Objective", 0, 0);
        store.setObjectiveID(objectiveID, 0, 0);
        store.setObjectiveSettingsID(objectiveID, 0);
        // populate Detector data
        String detectorID = MetadataTools.createLSID("Detector", 0, 0);
        store.setDetectorID(detectorID, 0, 0);
        store.setDetectorManufacturer(detectorManufacturer, 0, 0);
        store.setDetectorModel(detectorModel, 0, 0);
        store.setDetectorType(getDetectorType("Other"), 0, 0);
        for (Integer key : gains.keySet()) {
            int index = key.intValue();
            if (index < getEffectiveSizeC()) {
                store.setDetectorSettingsGain(gains.get(key), 0, index);
                store.setDetectorSettingsID(detectorID, 0, index);
            }
        }
        if (lastName != null) {
            String experimenterID = MetadataTools.createLSID("Experimenter", 0);
            store.setExperimenterID(experimenterID, 0);
            store.setExperimenterLastName(lastName, 0);
        }
        if (stagePos != null) {
            for (int i = 0; i < getImageCount(); i++) {
                if (stagePos.length > 0) {
                    store.setPlanePositionX(stagePos[0], 0, i);
                    addGlobalMeta("X position for position #1", stagePos[0]);
                }
                if (stagePos.length > 1) {
                    store.setPlanePositionY(stagePos[1], 0, i);
                    addGlobalMeta("Y position for position #1", stagePos[1]);
                }
                if (stagePos.length > 2) {
                    store.setPlanePositionZ(stagePos[2], 0, i);
                    addGlobalMeta("Z position for position #1", stagePos[2]);
                }
            }
        }
        if (exposureTime != null) {
            for (int i = 0; i < getImageCount(); i++) {
                store.setPlaneExposureTime(exposureTime, 0, i);
            }
        }
    }
}
Also used : ArrayList(java.util.ArrayList) Time(ome.units.quantity.Time) Timestamp(ome.xml.model.primitives.Timestamp) Hashtable(java.util.Hashtable) CoreMetadata(loci.formats.CoreMetadata) FormatException(loci.formats.FormatException) MetadataStore(loci.formats.meta.MetadataStore) StringTokenizer(java.util.StringTokenizer) Length(ome.units.quantity.Length) Frequency(ome.units.quantity.Frequency) RandomAccessInputStream(loci.common.RandomAccessInputStream) Power(ome.units.quantity.Power) Location(loci.common.Location)

Example 3 with Power

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

the class SPWModelMock method makeInstrument.

private Instrument makeInstrument(boolean makeLightSources) {
    // Create <Instrument/>
    Instrument instrument = new Instrument();
    instrument.setID(INSTRUMENT_ID);
    // Create <Detector/> under <Instrument/>
    Detector detector = new Detector();
    detector.setID(DETECTOR_ID);
    detector.setModel(DETECTOR_MODEL);
    instrument.addDetector(detector);
    if (makeLightSources) {
        // Create <Laser/> under <Instrument/>
        Laser laser = new Laser();
        laser.setID(LIGHTSOURCE_LASER_ID);
        laser.setModel(LIGHTSOURCE_LASER_MODEL);
        laser.setType(LASER_TYPE);
        laser.setPower(new Power(LIGHTSOURCE_LASER_POWER, UNITS.MILLIWATT));
        // with a <Pump/>
        Laser laserPump = new Laser();
        laserPump.setID(LIGHTSOURCE_PUMP_ID);
        laserPump.setModel(LIGHTSOURCE_PUMP_MODEL);
        laserPump.setType(LASER_TYPE);
        laserPump.setPower(new Power(LIGHTSOURCE_PUMP_POWER, UNITS.MILLIWATT));
        laser.linkPump(laserPump);
        instrument.addLightSource(laser);
        instrument.addLightSource(laserPump);
        // Create <Arc/> under <Instrument/>
        Arc arc = new Arc();
        arc.setID(LIGHTSOURCE_ARC_ID);
        arc.setModel(LIGHTSOURCE_ARC_MODEL);
        arc.setType(ARC_TYPE);
        arc.setPower(new Power(LIGHTSOURCE_ARC_POWER, UNITS.MILLIWATT));
        instrument.addLightSource(arc);
        // Create <Filament/> under <Instrument/>
        Filament filament = new Filament();
        filament.setID(LIGHTSOURCE_FILAMENT_ID);
        filament.setModel(LIGHTSOURCE_FILAMENT_MODEL);
        filament.setType(FILAMENT_TYPE);
        filament.setPower(new Power(LIGHTSOURCE_FILAMENT_POWER, UNITS.MILLIWATT));
        instrument.addLightSource(filament);
        // Create <LightEmittingDiode/> under <Instrument/>
        LightEmittingDiode led = new LightEmittingDiode();
        led.setID(LIGHTSOURCE_LED_ID);
        led.setModel(LIGHTSOURCE_LED_MODEL);
        led.setPower(new Power(LIGHTSOURCE_LED_POWER, UNITS.MILLIWATT));
        instrument.addLightSource(led);
    }
    // Create <Dichroic/> under <Instrument/>
    Dichroic dichroic = new Dichroic();
    dichroic.setID(DICHROIC_ID);
    dichroic.setSerialNumber(DICHROIC_SN);
    // Create <FilterSet/> under <Dichroic/>
    FilterSet filterSet = new FilterSet();
    filterSet.setID(FILTERSET_ID);
    filterSet.setLotNumber(FILTERSET_LOT);
    filterSet.linkDichroic(dichroic);
    Filter emFilter = new Filter();
    Filter exFilter = new Filter();
    // Create <Objective/> under <Instrument/>
    Objective objective = new Objective();
    objective.setID(OBJECTIVE_ID);
    objective.setModel(OBJECTIVE_MODEL);
    emFilter.setID(EM_FILTER_ID);
    emFilter.setType(EM_FILTER_TYPE);
    exFilter.setID(EX_FILTER_ID);
    exFilter.setType(EX_FILTER_TYPE);
    instrument.addFilter(emFilter);
    instrument.addFilter(exFilter);
    instrument.addObjective(objective);
    filterSet.linkEmissionFilter(emFilter);
    filterSet.linkExcitationFilter(exFilter);
    filterSet.linkDichroic(dichroic);
    instrument.addFilterSet(filterSet);
    instrument.addDichroic(dichroic);
    return instrument;
}
Also used : LightEmittingDiode(ome.xml.model.LightEmittingDiode) Objective(ome.xml.model.Objective) Detector(ome.xml.model.Detector) Arc(ome.xml.model.Arc) Filament(ome.xml.model.Filament) FilterSet(ome.xml.model.FilterSet) Filter(ome.xml.model.Filter) Laser(ome.xml.model.Laser) Instrument(ome.xml.model.Instrument) Dichroic(ome.xml.model.Dichroic) Power(ome.units.quantity.Power)

Example 4 with Power

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

the class IMetadataBasedOMEModelMock method makeInstrument.

private void makeInstrument() {
    // Create <Instrument/>
    store.setInstrumentID(InOutCurrentTest.INSTRUMENT_ID, 0);
    // Create <Detector/> under <Instrument/>
    store.setDetectorID(InOutCurrentTest.DETECTOR_ID, 0, 0);
    store.setDetectorModel(InOutCurrentTest.DETECTOR_MODEL, 0, 0);
    // Create <Annotation/> under <Detector/>
    store.setCommentAnnotationID(InOutCurrentTest.DETECTOR_ANNOTATION_ID, 0);
    store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 0);
    store.setCommentAnnotationValue(InOutCurrentTest.DETECTOR_ANNOTATION_VALUE, 0);
    store.setDetectorAnnotationRef(InOutCurrentTest.DETECTOR_ANNOTATION_ID, 0, 0, 0);
    // Create <Laser/> under <Instrument/>
    store.setLaserID(InOutCurrentTest.LIGHTSOURCE_LASER_ID, 0, 0);
    store.setLaserModel(InOutCurrentTest.LIGHTSOURCE_LASER_MODEL, 0, 0);
    store.setLaserType(InOutCurrentTest.LASER_TYPE, 0, 0);
    store.setLaserPower(new Power(InOutCurrentTest.LIGHTSOURCE_LASER_POWER, UNITS.MILLIWATT), 0, 0);
    // Create <Annotation/> under <Laser/>
    store.setCommentAnnotationID(InOutCurrentTest.LIGHTSOURCE_LASER_ANNOTATION_ID, 1);
    store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 1);
    store.setCommentAnnotationValue(InOutCurrentTest.LIGHTSOURCE_LASER_ANNOTATION_VALUE, 1);
    store.setLaserAnnotationRef(InOutCurrentTest.LIGHTSOURCE_LASER_ANNOTATION_ID, 0, 0, 0);
    // with a Pump>
    store.setLaserID(InOutCurrentTest.LIGHTSOURCE_PUMP_ID, 0, 1);
    store.setLaserModel(InOutCurrentTest.LIGHTSOURCE_PUMP_MODEL, 0, 1);
    store.setLaserType(InOutCurrentTest.LASER_TYPE, 0, 1);
    store.setLaserPower(new Power(InOutCurrentTest.LIGHTSOURCE_PUMP_POWER, UNITS.MILLIWATT), 0, 1);
    // and link them
    store.setLaserPump(InOutCurrentTest.LIGHTSOURCE_PUMP_ID, 0, 0);
    // Create <Arc/> under <Instrument/>
    store.setArcID(InOutCurrentTest.LIGHTSOURCE_ARC_ID, 0, 2);
    store.setArcModel(InOutCurrentTest.LIGHTSOURCE_ARC_MODEL, 0, 2);
    store.setArcType(InOutCurrentTest.ARC_TYPE, 0, 2);
    store.setArcPower(new Power(InOutCurrentTest.LIGHTSOURCE_ARC_POWER, UNITS.MILLIWATT), 0, 2);
    // Create <Annotation/> under <Arc/>
    store.setCommentAnnotationID(InOutCurrentTest.LIGHTSOURCE_ARC_ANNOTATION_ID, 2);
    store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 2);
    store.setCommentAnnotationValue(InOutCurrentTest.LIGHTSOURCE_ARC_ANNOTATION_VALUE, 2);
    store.setArcAnnotationRef(InOutCurrentTest.LIGHTSOURCE_ARC_ANNOTATION_ID, 0, 2, 0);
    // Create <Filament/> under <Instrument/>
    store.setFilamentID(InOutCurrentTest.LIGHTSOURCE_FILAMENT_ID, 0, 3);
    store.setFilamentModel(InOutCurrentTest.LIGHTSOURCE_FILAMENT_MODEL, 0, 3);
    store.setFilamentType(InOutCurrentTest.FILAMENT_TYPE, 0, 3);
    store.setFilamentPower(new Power(InOutCurrentTest.LIGHTSOURCE_FILAMENT_POWER, UNITS.MILLIWATT), 0, 3);
    // Create <Annotation/> under <Filament/>
    store.setCommentAnnotationID(InOutCurrentTest.LIGHTSOURCE_FILAMENT_ANNOTATION_ID, 3);
    store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 3);
    store.setCommentAnnotationValue(InOutCurrentTest.LIGHTSOURCE_FILAMENT_ANNOTATION_VALUE, 3);
    store.setFilamentAnnotationRef(InOutCurrentTest.LIGHTSOURCE_FILAMENT_ANNOTATION_ID, 0, 3, 0);
    // Create <LightEmittingDiode/> under <Instrument/>
    store.setLightEmittingDiodeID(InOutCurrentTest.LIGHTSOURCE_LED_ID, 0, 4);
    store.setLightEmittingDiodeModel(InOutCurrentTest.LIGHTSOURCE_LED_MODEL, 0, 4);
    store.setLightEmittingDiodePower(new Power(InOutCurrentTest.LIGHTSOURCE_LED_POWER, UNITS.MILLIWATT), 0, 4);
    // Create <Annotation/> under <LightEmittingDiode/>
    store.setCommentAnnotationID(InOutCurrentTest.LIGHTSOURCE_LED_ANNOTATION_ID, 4);
    store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 4);
    store.setCommentAnnotationValue(InOutCurrentTest.LIGHTSOURCE_LED_ANNOTATION_VALUE, 4);
    store.setLightEmittingDiodeAnnotationRef(InOutCurrentTest.LIGHTSOURCE_LED_ANNOTATION_ID, 0, 4, 0);
    // Create <Dichroic/> under <Instrument/>
    store.setDichroicID(InOutCurrentTest.DICHROIC_ID, 0, 0);
    store.setDichroicSerialNumber(InOutCurrentTest.DICHROIC_SN, 0, 0);
    // Create <Annotation/> under <Dichroic/>
    store.setCommentAnnotationID(InOutCurrentTest.DICHROIC_ANNOTATION_ID, 5);
    store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 5);
    store.setCommentAnnotationValue(InOutCurrentTest.DICHROIC_ANNOTATION_VALUE, 5);
    store.setDichroicAnnotationRef(InOutCurrentTest.DICHROIC_ANNOTATION_ID, 0, 0, 0);
    // Create <FilterSet/> under <Instrument/>
    store.setFilterSetID(InOutCurrentTest.FILTERSET_ID, 0, 0);
    store.setFilterSetLotNumber(InOutCurrentTest.FILTERSET_LOT, 0, 0);
    store.setFilterSetDichroicRef(InOutCurrentTest.DICHROIC_ID, 0, 0);
    store.setFilterSetEmissionFilterRef(InOutCurrentTest.EM_FILTER_ID, 0, 0, 0);
    store.setFilterSetExcitationFilterRef(InOutCurrentTest.EX_FILTER_ID, 0, 0, 0);
    // Create <Filter/>s under <Instrument/>
    store.setFilterID(InOutCurrentTest.EM_FILTER_ID, 0, 0);
    store.setFilterType(InOutCurrentTest.EM_FILTER_TYPE, 0, 0);
    // Create <Annotation/> under first <Filter/>
    store.setCommentAnnotationID(InOutCurrentTest.EM_FILTER_ANNOTATION_ID, 6);
    store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 6);
    store.setCommentAnnotationValue(InOutCurrentTest.EM_FILTER_ANNOTATION_VALUE, 6);
    store.setFilterAnnotationRef(InOutCurrentTest.EM_FILTER_ANNOTATION_ID, 0, 0, 0);
    store.setFilterID(InOutCurrentTest.EX_FILTER_ID, 0, 1);
    store.setFilterType(InOutCurrentTest.EX_FILTER_TYPE, 0, 1);
    // Create <Objective/> under <Instrument/>
    store.setObjectiveID(InOutCurrentTest.OBJECTIVE_ID, 0, 0);
    store.setObjectiveModel(InOutCurrentTest.OBJECTIVE_MODEL, 0, 0);
    // Create <Annotation/> under <Objective/>
    store.setCommentAnnotationID(InOutCurrentTest.OBJECTIVE_ANNOTATION_ID, 7);
    store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 7);
    store.setCommentAnnotationValue(InOutCurrentTest.OBJECTIVE_ANNOTATION_VALUE, 7);
    store.setObjectiveAnnotationRef(InOutCurrentTest.OBJECTIVE_ANNOTATION_ID, 0, 0, 0);
    // Create <Annotation/> under <Instrument/>
    store.setCommentAnnotationID(InOutCurrentTest.INSTRUMENT_ANNOTATION_ID, 8);
    store.setCommentAnnotationNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE, 8);
    store.setCommentAnnotationValue(InOutCurrentTest.INSTRUMENT_ANNOTATION_VALUE, 8);
    store.setInstrumentAnnotationRef(InOutCurrentTest.INSTRUMENT_ANNOTATION_ID, 0, 0);
    // link Instrument to the first Image
    store.setImageInstrumentRef(InOutCurrentTest.INSTRUMENT_ID, 0);
}
Also used : Power(ome.units.quantity.Power)

Example 5 with Power

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

the class ObjectBasedOMEModelMock method makeInstrument.

private Instrument makeInstrument() {
    // Create <Instrument/>
    Instrument instrument = new Instrument();
    instrument.setID(InOutCurrentTest.INSTRUMENT_ID);
    // Create <Detector/> under <Instrument/>
    Detector detector = new Detector();
    detector.setID(InOutCurrentTest.DETECTOR_ID);
    detector.setModel(InOutCurrentTest.DETECTOR_MODEL);
    CommentAnnotation detectorAnnotation = new CommentAnnotation();
    detectorAnnotation.setID(InOutCurrentTest.DETECTOR_ANNOTATION_ID);
    detectorAnnotation.setValue(InOutCurrentTest.DETECTOR_ANNOTATION_VALUE);
    detectorAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
    detector.linkAnnotation(detectorAnnotation);
    annotations.addCommentAnnotation(detectorAnnotation);
    instrument.addDetector(detector);
    // Create <Laser/> under <Instrument/>
    Laser laser = new Laser();
    laser.setID(InOutCurrentTest.LIGHTSOURCE_LASER_ID);
    laser.setModel(InOutCurrentTest.LIGHTSOURCE_LASER_MODEL);
    laser.setType(InOutCurrentTest.LASER_TYPE);
    laser.setPower(new Power(InOutCurrentTest.LIGHTSOURCE_LASER_POWER, UNITS.MILLIWATT));
    CommentAnnotation laserAnnotation = new CommentAnnotation();
    laserAnnotation.setID(InOutCurrentTest.LIGHTSOURCE_LASER_ANNOTATION_ID);
    laserAnnotation.setValue(InOutCurrentTest.LIGHTSOURCE_LASER_ANNOTATION_VALUE);
    laserAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
    laser.linkAnnotation(laserAnnotation);
    annotations.addCommentAnnotation(laserAnnotation);
    // with a <Pump/>
    Laser laserPump = new Laser();
    laserPump.setID(InOutCurrentTest.LIGHTSOURCE_PUMP_ID);
    laserPump.setModel(InOutCurrentTest.LIGHTSOURCE_PUMP_MODEL);
    laserPump.setType(InOutCurrentTest.LASER_TYPE);
    laserPump.setPower(new Power(InOutCurrentTest.LIGHTSOURCE_PUMP_POWER, UNITS.MILLIWATT));
    laser.linkPump(laserPump);
    instrument.addLightSource(laser);
    instrument.addLightSource(laserPump);
    // Create <Arc/> under <Instrument/>
    Arc arc = new Arc();
    arc.setID(InOutCurrentTest.LIGHTSOURCE_ARC_ID);
    arc.setModel(InOutCurrentTest.LIGHTSOURCE_ARC_MODEL);
    arc.setType(InOutCurrentTest.ARC_TYPE);
    arc.setPower(new Power(InOutCurrentTest.LIGHTSOURCE_ARC_POWER, UNITS.MILLIWATT));
    CommentAnnotation arcAnnotation = new CommentAnnotation();
    arcAnnotation.setID(InOutCurrentTest.LIGHTSOURCE_ARC_ANNOTATION_ID);
    arcAnnotation.setValue(InOutCurrentTest.LIGHTSOURCE_ARC_ANNOTATION_VALUE);
    arcAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
    arc.linkAnnotation(arcAnnotation);
    annotations.addCommentAnnotation(arcAnnotation);
    instrument.addLightSource(arc);
    // Create <Filament/> under <Instrument/>
    Filament filament = new Filament();
    filament.setID(InOutCurrentTest.LIGHTSOURCE_FILAMENT_ID);
    filament.setModel(InOutCurrentTest.LIGHTSOURCE_FILAMENT_MODEL);
    filament.setType(InOutCurrentTest.FILAMENT_TYPE);
    filament.setPower(new Power(InOutCurrentTest.LIGHTSOURCE_FILAMENT_POWER, UNITS.MILLIWATT));
    CommentAnnotation filamentAnnotation = new CommentAnnotation();
    filamentAnnotation.setID(InOutCurrentTest.LIGHTSOURCE_FILAMENT_ANNOTATION_ID);
    filamentAnnotation.setValue(InOutCurrentTest.LIGHTSOURCE_FILAMENT_ANNOTATION_VALUE);
    filamentAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
    filament.linkAnnotation(filamentAnnotation);
    annotations.addCommentAnnotation(filamentAnnotation);
    instrument.addLightSource(filament);
    // Create <LightEmittingDiode/> under <Instrument/>
    LightEmittingDiode led = new LightEmittingDiode();
    led.setID(InOutCurrentTest.LIGHTSOURCE_LED_ID);
    led.setModel(InOutCurrentTest.LIGHTSOURCE_LED_MODEL);
    led.setPower(new Power(InOutCurrentTest.LIGHTSOURCE_LED_POWER, UNITS.MILLIWATT));
    CommentAnnotation ledAnnotation = new CommentAnnotation();
    ledAnnotation.setID(InOutCurrentTest.LIGHTSOURCE_LED_ANNOTATION_ID);
    ledAnnotation.setValue(InOutCurrentTest.LIGHTSOURCE_LED_ANNOTATION_VALUE);
    ledAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
    led.linkAnnotation(ledAnnotation);
    annotations.addCommentAnnotation(ledAnnotation);
    instrument.addLightSource(led);
    // Create <Dichroic/> under <Instrument/>
    Dichroic dichroic = new Dichroic();
    dichroic.setID(InOutCurrentTest.DICHROIC_ID);
    dichroic.setSerialNumber(InOutCurrentTest.DICHROIC_SN);
    CommentAnnotation dichroicAnnotation = new CommentAnnotation();
    dichroicAnnotation.setID(InOutCurrentTest.DICHROIC_ANNOTATION_ID);
    dichroicAnnotation.setValue(InOutCurrentTest.DICHROIC_ANNOTATION_VALUE);
    dichroicAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
    dichroic.linkAnnotation(dichroicAnnotation);
    annotations.addCommentAnnotation(dichroicAnnotation);
    // Create <FilterSet/> under <Dichroic/>
    FilterSet filterSet = new FilterSet();
    filterSet.setID(InOutCurrentTest.FILTERSET_ID);
    filterSet.setLotNumber(InOutCurrentTest.FILTERSET_LOT);
    filterSet.linkDichroic(dichroic);
    Filter emFilter = new Filter();
    Filter exFilter = new Filter();
    // Create <Objective/> under <Instrument/>
    Objective objective = new Objective();
    objective.setID(InOutCurrentTest.OBJECTIVE_ID);
    objective.setModel(InOutCurrentTest.OBJECTIVE_MODEL);
    CommentAnnotation objectiveAnnotation = new CommentAnnotation();
    objectiveAnnotation.setID(InOutCurrentTest.OBJECTIVE_ANNOTATION_ID);
    objectiveAnnotation.setValue(InOutCurrentTest.OBJECTIVE_ANNOTATION_VALUE);
    objectiveAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
    objective.linkAnnotation(objectiveAnnotation);
    annotations.addCommentAnnotation(objectiveAnnotation);
    emFilter.setID(InOutCurrentTest.EM_FILTER_ID);
    emFilter.setType(InOutCurrentTest.EM_FILTER_TYPE);
    exFilter.setID(InOutCurrentTest.EX_FILTER_ID);
    exFilter.setType(InOutCurrentTest.EX_FILTER_TYPE);
    CommentAnnotation emFilterAnnotation = new CommentAnnotation();
    emFilterAnnotation.setID(InOutCurrentTest.EM_FILTER_ANNOTATION_ID);
    emFilterAnnotation.setValue(InOutCurrentTest.EM_FILTER_ANNOTATION_VALUE);
    emFilterAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
    emFilter.linkAnnotation(emFilterAnnotation);
    annotations.addCommentAnnotation(emFilterAnnotation);
    instrument.addFilter(emFilter);
    instrument.addFilter(exFilter);
    instrument.addObjective(objective);
    filterSet.linkEmissionFilter(emFilter);
    filterSet.linkExcitationFilter(exFilter);
    filterSet.linkDichroic(dichroic);
    instrument.addFilterSet(filterSet);
    instrument.addDichroic(dichroic);
    CommentAnnotation instrumentAnnotation = new CommentAnnotation();
    instrumentAnnotation.setID(InOutCurrentTest.INSTRUMENT_ANNOTATION_ID);
    instrumentAnnotation.setValue(InOutCurrentTest.INSTRUMENT_ANNOTATION_VALUE);
    instrumentAnnotation.setNamespace(InOutCurrentTest.GENERAL_ANNOTATION_NAMESPACE);
    instrument.linkAnnotation(instrumentAnnotation);
    annotations.addCommentAnnotation(instrumentAnnotation);
    // link Instrument to the first Image
    Image image = ome.getImage(0);
    image.linkInstrument(instrument);
    return instrument;
}
Also used : LightEmittingDiode(ome.xml.model.LightEmittingDiode) Filament(ome.xml.model.Filament) FilterSet(ome.xml.model.FilterSet) Image(ome.xml.model.Image) Objective(ome.xml.model.Objective) Detector(ome.xml.model.Detector) Arc(ome.xml.model.Arc) Filter(ome.xml.model.Filter) CommentAnnotation(ome.xml.model.CommentAnnotation) Laser(ome.xml.model.Laser) Instrument(ome.xml.model.Instrument) Dichroic(ome.xml.model.Dichroic) Power(ome.units.quantity.Power)

Aggregations

Power (ome.units.quantity.Power)6 Length (ome.units.quantity.Length)3 Time (ome.units.quantity.Time)3 MetadataStore (loci.formats.meta.MetadataStore)2 Arc (ome.xml.model.Arc)2 Detector (ome.xml.model.Detector)2 Dichroic (ome.xml.model.Dichroic)2 Filament (ome.xml.model.Filament)2 Filter (ome.xml.model.Filter)2 FilterSet (ome.xml.model.FilterSet)2 Instrument (ome.xml.model.Instrument)2 Laser (ome.xml.model.Laser)2 LightEmittingDiode (ome.xml.model.LightEmittingDiode)2 Objective (ome.xml.model.Objective)2 Timestamp (ome.xml.model.primitives.Timestamp)2 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 Hashtable (java.util.Hashtable)1 StringTokenizer (java.util.StringTokenizer)1 Location (loci.common.Location)1