Search in sources :

Example 31 with Length

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

the class WlzReader method initFile.

// -- Internal FormatReader API methods --
/* @see loci.formats.FormatReader#initFile(String) */
@Override
protected void initFile(String id) throws FormatException, IOException {
    super.initFile(id);
    try {
        ServiceFactory factory = new ServiceFactory();
        wlz = factory.getInstance(WlzService.class);
    } catch (DependencyException e) {
        throw new FormatException(NO_WLZ_MSG, e);
    }
    if (wlz != null) {
        wlz.open(id, "r");
        CoreMetadata md = core.get(0);
        MetadataStore store = makeFilterMetadata();
        md.rgb = wlz.isRGB();
        md.interleaved = false;
        md.indexed = false;
        md.sizeX = wlz.getSizeX();
        md.sizeY = wlz.getSizeY();
        md.sizeZ = wlz.getSizeZ();
        md.sizeC = wlz.getSizeC();
        md.sizeT = wlz.getSizeT();
        md.dimensionOrder = "XYZCT";
        md.imageCount = wlz.getSizeZ();
        md.pixelType = wlz.getPixelType();
        PositiveFloat x = new PositiveFloat(Math.abs(wlz.getVoxSzX()));
        PositiveFloat y = new PositiveFloat(Math.abs(wlz.getVoxSzY()));
        PositiveFloat z = new PositiveFloat(Math.abs(wlz.getVoxSzZ()));
        store.setPixelsPhysicalSizeX(FormatTools.createLength(x, UNITS.MICROMETER), 0);
        store.setPixelsPhysicalSizeY(FormatTools.createLength(y, UNITS.MICROMETER), 0);
        store.setPixelsPhysicalSizeZ(FormatTools.createLength(z, UNITS.MICROMETER), 0);
        store.setStageLabelName(wlz.getWlzOrgLabelName(), 0);
        store.setStageLabelX(new Length(wlz.getOrgX(), UNITS.REFERENCEFRAME), 0);
        store.setStageLabelY(new Length(wlz.getOrgY(), UNITS.REFERENCEFRAME), 0);
        store.setStageLabelZ(new Length(wlz.getOrgZ(), UNITS.REFERENCEFRAME), 0);
        MetadataTools.populatePixels(store, this);
    }
}
Also used : WlzService(loci.formats.services.WlzService) MetadataStore(loci.formats.meta.MetadataStore) ServiceFactory(loci.common.services.ServiceFactory) Length(ome.units.quantity.Length) PositiveFloat(ome.xml.model.primitives.PositiveFloat) DependencyException(loci.common.services.DependencyException) CoreMetadata(loci.formats.CoreMetadata) FormatException(loci.formats.FormatException)

Example 32 with Length

use of ome.units.quantity.Length 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 33 with Length

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

the class ZeissCZIReader method translateExperiment.

private void translateExperiment(Element root) throws FormatException {
    NodeList experiments = root.getElementsByTagName("Experiment");
    if (experiments == null || experiments.getLength() == 0) {
        return;
    }
    Element experimentBlock = getFirstNode((Element) experiments.item(0), "ExperimentBlocks");
    Element acquisition = getFirstNode(experimentBlock, "AcquisitionBlock");
    Element tilesSetup = getFirstNode(acquisition, "TilesSetup");
    NodeList groups = getGrandchildren(tilesSetup, "PositionGroup");
    positionsX = new Length[core.size()];
    positionsY = new Length[core.size()];
    positionsZ = new Length[core.size()];
    if (groups != null) {
        for (int i = 0; i < groups.getLength(); i++) {
            Element group = (Element) groups.item(i);
            Element position = getFirstNode(group, "Position");
            String tilesXValue = getFirstNodeValue(group, "TilesX");
            String tilesYValue = getFirstNodeValue(group, "TilesY");
            if (position != null && tilesXValue != null && !tilesXValue.isEmpty() && tilesYValue != null && !tilesYValue.isEmpty()) {
                Integer tilesX = DataTools.parseInteger(tilesXValue);
                Integer tilesY = DataTools.parseInteger(tilesYValue);
                String x = position.getAttribute("X");
                String y = position.getAttribute("Y");
                String z = position.getAttribute("Z");
                Length xPos = null;
                try {
                    xPos = new Length(Double.valueOf(x), UNITS.METRE);
                } catch (NumberFormatException e) {
                }
                Length yPos = null;
                try {
                    yPos = new Length(Double.valueOf(y), UNITS.METRE);
                } catch (NumberFormatException e) {
                }
                Length zPos = null;
                try {
                    zPos = new Length(Double.valueOf(z), UNITS.METRE);
                } catch (NumberFormatException e) {
                }
                int numTiles = (tilesX == null || tilesY == null) ? 0 : tilesX * tilesY;
                for (int tile = 0; tile < numTiles; tile++) {
                    int index = i * tilesX * tilesY + tile;
                    if (groups.getLength() == core.size()) {
                        index = i;
                    }
                    if (index < positionsX.length) {
                        positionsX[index] = xPos;
                        positionsY[index] = yPos;
                        positionsZ[index] = zPos;
                    }
                }
            }
        }
    } else {
        Element regionsSetup = getFirstNode(acquisition, "RegionsSetup");
        if (regionsSetup != null) {
            Element sampleHolder = getFirstNode(regionsSetup, "SampleHolder");
            if (sampleHolder != null) {
                NodeList regions = getGrandchildren(sampleHolder, "SingleTileRegionArray", "SingleTileRegion");
                if (regions != null) {
                    for (int i = 0; i < regions.getLength(); i++) {
                        Element region = (Element) regions.item(i);
                        String x = getFirstNode(region, "X").getTextContent();
                        String y = getFirstNode(region, "Y").getTextContent();
                        String z = getFirstNode(region, "Z").getTextContent();
                        // safe to assume all 3 arrays have the same length
                        if (i < positionsX.length) {
                            if (x == null) {
                                positionsX[i] = null;
                            } else {
                                final Double number = Double.valueOf(x);
                                positionsX[i] = new Length(number, UNITS.MICROMETER);
                            }
                            if (y == null) {
                                positionsY[i] = null;
                            } else {
                                final Double number = Double.valueOf(y);
                                positionsY[i] = new Length(number, UNITS.MICROMETER);
                            }
                            if (z == null) {
                                positionsZ[i] = null;
                            } else {
                                final Double number = Double.valueOf(z);
                                positionsZ[i] = new Length(number, UNITS.MICROMETER);
                            }
                        }
                    }
                }
            }
        }
    }
    NodeList detectors = getGrandchildren(acquisition, "Detector");
    Element setup = getFirstNode(acquisition, "AcquisitionModeSetup");
    String cameraModel = getFirstNodeValue(setup, "SelectedCamera");
    if (detectors != null) {
        for (int i = 0; i < detectors.getLength(); i++) {
            Element detector = (Element) detectors.item(i);
            String id = MetadataTools.createLSID("Detector", 0, i);
            store.setDetectorID(id, 0, i);
            String model = detector.getAttribute("Id");
            store.setDetectorModel(model, 0, i);
            String bin = getFirstNodeValue(detector, "Binning");
            if (bin != null) {
                bin = bin.replaceAll(",", "x");
                Binning binning = getBinning(bin);
                if (model != null && model.equals(cameraModel)) {
                    for (int image = 0; image < getSeriesCount(); image++) {
                        for (int c = 0; c < getEffectiveSizeC(); c++) {
                            store.setDetectorSettingsID(id, image, c);
                            store.setDetectorSettingsBinning(binning, image, c);
                        }
                    }
                    hasDetectorSettings = true;
                }
            }
        }
    }
    Element multiTrack = getFirstNode(acquisition, "MultiTrackSetup");
    if (multiTrack == null) {
        return;
    }
    NodeList detectorGroups = multiTrack.getElementsByTagName("Detectors");
    for (int d = 0; d < detectorGroups.getLength(); d++) {
        Element detectorGroup = (Element) detectorGroups.item(d);
        detectors = detectorGroup.getElementsByTagName("Detector");
        if (detectors != null && detectors.getLength() > 0) {
            for (int i = 0; i < detectors.getLength(); i++) {
                Element detector = (Element) detectors.item(i);
                String voltage = getFirstNodeValue(detector, "Voltage");
                if (i == 0 && d == 0) {
                    gain = voltage;
                }
                gains.add(voltage);
            }
        }
    }
    NodeList tracks = multiTrack.getElementsByTagName("Track");
    if (tracks != null && tracks.getLength() > 0) {
        for (int i = 0; i < tracks.getLength(); i++) {
            Element track = (Element) tracks.item(i);
            Element channel = getFirstNode(track, "Channel");
            String exposure = getFirstNodeValue(channel, "ExposureTime");
            String gain = getFirstNodeValue(channel, "EMGain");
            while (channels.size() <= i) {
                channels.add(new Channel());
            }
            try {
                if (exposure != null) {
                    channels.get(i).exposure = new Double(exposure);
                }
            } catch (NumberFormatException e) {
                LOGGER.debug("Could not parse exposure time", e);
            }
            try {
                if (gain != null) {
                    channels.get(i).gain = new Double(gain);
                }
            } catch (NumberFormatException e) {
                LOGGER.debug("Could not parse gain", e);
            }
        }
    }
}
Also used : Binning(ome.xml.model.enums.Binning) Length(ome.units.quantity.Length) NodeList(org.w3c.dom.NodeList) Element(org.w3c.dom.Element)

Example 34 with Length

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

the class ZeissCZIReader method translateHardwareSettings.

private void translateHardwareSettings(Element root) throws FormatException {
    NodeList hardwareSettings = root.getElementsByTagName("HardwareSetting");
    if (hardwareSettings == null || hardwareSettings.getLength() == 0) {
        return;
    }
    Element hardware = (Element) hardwareSettings.item(0);
    store.setInstrumentID(MetadataTools.createLSID("Instrument", 0), 0);
    Element microscope = getFirstNode(hardware, "Microscope");
    if (microscope != null) {
        String model = microscope.getAttribute("Name");
        store.setMicroscopeModel(model, 0);
    }
    Element objectiveChanger = getFirstNode(hardware, "ObjectiveChanger");
    if (objectiveChanger != null) {
        String position = getFirstNodeValue(objectiveChanger, "Position");
        int positionIndex = -1;
        if (position != null) {
            try {
                positionIndex = Integer.parseInt(position) - 1;
            } catch (NumberFormatException e) {
                LOGGER.debug("Could not parse ObjectiveSettings", e);
            }
        }
        NodeList objectives = objectiveChanger.getElementsByTagName("Objective");
        if (objectives != null) {
            for (int i = 0; i < objectives.getLength(); i++) {
                Element objective = (Element) objectives.item(i);
                String objectiveID = MetadataTools.createLSID("Objective", 0, i);
                if (i == positionIndex || (objectives.getLength() == 1 && objectiveSettingsID != null)) {
                    objectiveSettingsID = objectiveID;
                }
                store.setObjectiveID(objectiveID, 0, i);
                store.setObjectiveModel(objective.getAttribute("Model"), 0, i);
                store.setObjectiveSerialNumber(objective.getAttribute("UniqueName"), 0, i);
                String immersion = getFirstNodeValue(objective, "Immersions");
                store.setObjectiveImmersion(getImmersion(immersion), 0, i);
                store.setObjectiveCorrection(getCorrection("Other"), 0, i);
                String magnification = getFirstNodeValue(objective, "Magnification");
                String na = getFirstNodeValue(objective, "NumericalAperture");
                String wd = getFirstNodeValue(objective, "WorkingDistance");
                if (magnification != null) {
                    try {
                        store.setObjectiveNominalMagnification(new Double(magnification), 0, i);
                    } catch (NumberFormatException e) {
                        LOGGER.debug("Could not parse magnification", e);
                    }
                }
                if (na != null) {
                    try {
                        store.setObjectiveLensNA(new Double(na), 0, i);
                    } catch (NumberFormatException e) {
                        LOGGER.debug("Could not parse numerical aperture", e);
                    }
                }
                if (wd != null) {
                    try {
                        store.setObjectiveWorkingDistance(new Length(new Double(wd), UNITS.MICROMETER), 0, i);
                    } catch (NumberFormatException e) {
                        LOGGER.debug("Could not parse working distance", e);
                    }
                }
            }
        }
    }
}
Also used : Length(ome.units.quantity.Length) NodeList(org.w3c.dom.NodeList) Element(org.w3c.dom.Element)

Example 35 with Length

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

the class ZeissCZIReader method parseObjectives.

private void parseObjectives(NodeList objectives) throws FormatException {
    if (objectives != null) {
        for (int i = 0; i < objectives.getLength(); i++) {
            Element objective = (Element) objectives.item(i);
            Element manufacturerNode = getFirstNode(objective, "Manufacturer");
            String manufacturer = getFirstNodeValue(manufacturerNode, "Manufacturer");
            String model = getFirstNodeValue(manufacturerNode, "Model");
            String serialNumber = getFirstNodeValue(manufacturerNode, "SerialNumber");
            String lotNumber = getFirstNodeValue(manufacturerNode, "LotNumber");
            if (objectiveSettingsID == null) {
                objectiveSettingsID = objective.getAttribute("Id");
            }
            store.setObjectiveID(objective.getAttribute("Id"), 0, i);
            store.setObjectiveManufacturer(manufacturer, 0, i);
            store.setObjectiveModel(model, 0, i);
            store.setObjectiveSerialNumber(serialNumber, 0, i);
            store.setObjectiveLotNumber(lotNumber, 0, i);
            String correction = getFirstNodeValue(objective, "Correction");
            if (correction != null) {
                store.setObjectiveCorrection(getCorrection(correction), 0, i);
            }
            store.setObjectiveImmersion(getImmersion(getFirstNodeValue(objective, "Immersion")), 0, i);
            String lensNA = getFirstNodeValue(objective, "LensNA");
            if (lensNA != null) {
                store.setObjectiveLensNA(new Double(lensNA), 0, i);
            }
            String magnification = getFirstNodeValue(objective, "NominalMagnification");
            if (magnification == null) {
                magnification = getFirstNodeValue(objective, "Magnification");
            }
            Double mag = magnification == null ? null : new Double(magnification);
            if (mag != null) {
                store.setObjectiveNominalMagnification(mag, 0, i);
            }
            String calibratedMag = getFirstNodeValue(objective, "CalibratedMagnification");
            if (calibratedMag != null) {
                store.setObjectiveCalibratedMagnification(new Double(calibratedMag), 0, i);
            }
            String wd = getFirstNodeValue(objective, "WorkingDistance");
            if (wd != null) {
                store.setObjectiveWorkingDistance(new Length(new Double(wd), UNITS.MICROMETER), 0, i);
            }
            String iris = getFirstNodeValue(objective, "Iris");
            if (iris != null) {
                store.setObjectiveIris(new Boolean(iris), 0, i);
            }
        }
    }
}
Also used : Length(ome.units.quantity.Length) Element(org.w3c.dom.Element)

Aggregations

Length (ome.units.quantity.Length)154 MetadataStore (loci.formats.meta.MetadataStore)82 CoreMetadata (loci.formats.CoreMetadata)74 Timestamp (ome.xml.model.primitives.Timestamp)52 RandomAccessInputStream (loci.common.RandomAccessInputStream)48 Time (ome.units.quantity.Time)46 FormatException (loci.formats.FormatException)39 Location (loci.common.Location)34 ArrayList (java.util.ArrayList)29 IMetadata (loci.formats.meta.IMetadata)13 NonNegativeInteger (ome.xml.model.primitives.NonNegativeInteger)13 ServiceFactory (loci.common.services.ServiceFactory)12 IOException (java.io.IOException)11 DependencyException (loci.common.services.DependencyException)11 PositiveInteger (ome.xml.model.primitives.PositiveInteger)11 MetadataRetrieve (loci.formats.meta.MetadataRetrieve)10 ElectricPotential (ome.units.quantity.ElectricPotential)9 Test (org.testng.annotations.Test)9 Element (org.w3c.dom.Element)9 NodeList (org.w3c.dom.NodeList)9