Search in sources :

Example 1 with IniList

use of loci.common.IniList in project bioformats by openmicroscopy.

the class FEITiffReader method initStandardMetadata.

// -- Internal BaseTiffReader API methods --
/* @see BaseTiffReader#initStandardMetadata() */
@Override
protected void initStandardMetadata() throws FormatException, IOException {
    super.initStandardMetadata();
    boolean helios = ifds.get(0).containsKey(HELIOS_TAG);
    boolean titan = ifds.get(0).containsKey(TITAN_TAG);
    // Helios etc data might have a stray Titan tag
    if (titan && ifds.get(0).getIFDTextValue(TITAN_TAG).trim().isEmpty()) {
        titan = false;
    }
    // Titan data (always?) has an empty Helios tag as well, so the Titan tag is checked first
    String software = "S-FEG";
    if (titan) {
        software = "Titan";
    } else if (helios) {
        software = "Helios NanoLab";
    }
    addGlobalMeta("Software", software);
    int tagKey = SFEG_TAG;
    if (titan) {
        tagKey = TITAN_TAG;
    } else if (helios) {
        tagKey = HELIOS_TAG;
    }
    String tag = ifds.get(0).getIFDTextValue(tagKey);
    if (tag == null) {
        return;
    }
    tag = tag.trim();
    if (tag.isEmpty()) {
        // fall back to regular reader
        return;
    }
    // store metadata for later conversion to OME-XML
    if (tag.startsWith("<")) {
        XMLTools.parseXML(tag, new FEIHandler());
    } else {
        IniParser parser = new IniParser();
        IniList ini = parser.parseINI(new BufferedReader(new StringReader(tag)));
        detectors = new ArrayList<String>();
        if (helios) {
            IniTable userTable = ini.getTable("User");
            date = userTable.get("Date") + " " + userTable.get("Time");
            if (getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) {
                userName = userTable.get("User");
                IniTable systemTable = ini.getTable("System");
                if (systemTable == null) {
                    systemTable = ini.getTable("SYSTEM");
                }
                if (systemTable != null) {
                    microscopeModel = systemTable.get("SystemType");
                }
                IniTable beamTable = ini.getTable("Beam");
                if (beamTable != null) {
                    String beamTableName = beamTable.get("Beam");
                    if (beamTableName != null) {
                        beamTable = ini.getTable(beamTableName);
                    }
                }
                if (beamTable != null) {
                    String beamX = beamTable.get("StageX");
                    String beamY = beamTable.get("StageY");
                    String beamZ = beamTable.get("StageZ");
                    IniTable stageTable = ini.getTable("Stage");
                    if (beamX != null) {
                        final Double number = Double.valueOf(beamX);
                        stageX = new Length(number, UNITS.REFERENCEFRAME);
                    } else if (stageTable != null) {
                        final Double number = Double.valueOf(stageTable.get("StageX"));
                        stageX = new Length(number, UNITS.REFERENCEFRAME);
                    }
                    if (beamY != null) {
                        final Double number = Double.valueOf(beamY);
                        stageY = new Length(number, UNITS.REFERENCEFRAME);
                    } else if (stageTable != null) {
                        final Double number = Double.valueOf(stageTable.get("StageY"));
                        stageY = new Length(number, UNITS.REFERENCEFRAME);
                    }
                    if (beamZ != null) {
                        final Double number = Double.valueOf(beamZ);
                        stageZ = new Length(number, UNITS.REFERENCEFRAME);
                    } else if (stageTable != null) {
                        final Double number = Double.valueOf(stageTable.get("StageZ"));
                        stageZ = new Length(number, UNITS.REFERENCEFRAME);
                    }
                }
                IniTable scanTable = ini.getTable("Scan");
                sizeX = new Double(scanTable.get("PixelWidth"));
                sizeY = new Double(scanTable.get("PixelHeight"));
                timeIncrement = new Double(scanTable.get("FrameTime"));
            }
        } else {
            IniTable dataTable = ini.getTable("DatabarData");
            imageName = dataTable.get("ImageName");
            imageDescription = dataTable.get("szUserText");
            String magnification = ini.getTable("Vector").get("Magnification");
            sizeX = new Double(magnification) * MAG_MULTIPLIER;
            sizeY = new Double(magnification) * MAG_MULTIPLIER;
            IniTable scanTable = ini.getTable("Vector.Sysscan");
            final Double posX = Double.valueOf(scanTable.get("PositionX"));
            final Double posY = Double.valueOf(scanTable.get("PositionY"));
            stageX = new Length(posX, UNITS.REFERENCEFRAME);
            stageY = new Length(posY, UNITS.REFERENCEFRAME);
            IniTable detectorTable = ini.getTable("Vector.Video.Detectors");
            int detectorCount = Integer.parseInt(detectorTable.get("NrDetectorsConnected"));
            for (int i = 0; i < detectorCount; i++) {
                detectors.add(detectorTable.get("Detector_" + i + "_Name"));
            }
        }
        if (getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) {
            HashMap<String, String> iniMap = ini.flattenIntoHashMap();
            metadata.putAll(iniMap);
        }
    }
}
Also used : IniParser(loci.common.IniParser) IniList(loci.common.IniList) Length(ome.units.quantity.Length) IniTable(loci.common.IniTable) BufferedReader(java.io.BufferedReader) StringReader(java.io.StringReader)

Example 2 with IniList

use of loci.common.IniList in project bioformats by openmicroscopy.

the class HitachiReader method initFile.

// -- Internal FormatReader API methods --
/* @see loci.formats.FormatReader#initFile(String) */
@Override
protected void initFile(String id) throws FormatException, IOException {
    if (!checkSuffix(id, "txt")) {
        String base = id;
        if (base.indexOf('.') >= 0) {
            base = base.substring(0, base.lastIndexOf("."));
        }
        id = base + ".txt";
        initFile(id);
        return;
    }
    super.initFile(id);
    String data = DataTools.readFile(id);
    IniParser parser = new IniParser();
    parser.setBackslashContinuesLine(false);
    IniList ini = parser.parseINI(new BufferedReader(new StringReader(data)));
    IniTable image = ini.getTable("SemImageFile");
    if (image == null) {
        throw new FormatException("Could not find 'SemImageFile' table.");
    }
    for (String key : image.keySet()) {
        addGlobalMeta(key, image.get(key));
    }
    String imageName = image.get("SampleName");
    String pixelsFile = image.get("ImageName");
    String date = image.get("Date");
    String time = image.get("Time");
    Location parent = new Location(id).getAbsoluteFile().getParentFile();
    pixelsFile = new Location(parent, pixelsFile).getAbsolutePath();
    ClassList<IFormatReader> classes = ImageReader.getDefaultReaderClasses();
    Class<? extends IFormatReader>[] classArray = classes.getClasses();
    ClassList<IFormatReader> newClasses = new ClassList<IFormatReader>(IFormatReader.class);
    for (Class<? extends IFormatReader> c : classArray) {
        if (!c.equals(HitachiReader.class)) {
            newClasses.addClass(c);
        }
    }
    helperReader = new ImageReader(newClasses);
    helperReader.setId(pixelsFile);
    core = new ArrayList<CoreMetadata>(helperReader.getCoreMetadataList());
    MetadataStore store = makeFilterMetadata();
    MetadataTools.populatePixels(store, this, getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM);
    store.setImageName(imageName, 0);
    date = DateTools.formatDate(date + " " + time, DATE_FORMAT);
    if (date != null) {
        store.setImageAcquisitionDate(new Timestamp(date), 0);
    }
    populateOMEMetadata(image, store);
}
Also used : IniParser(loci.common.IniParser) IFormatReader(loci.formats.IFormatReader) IniList(loci.common.IniList) ClassList(loci.formats.ClassList) CoreMetadata(loci.formats.CoreMetadata) Timestamp(ome.xml.model.primitives.Timestamp) FormatException(loci.formats.FormatException) MetadataStore(loci.formats.meta.MetadataStore) IniTable(loci.common.IniTable) BufferedReader(java.io.BufferedReader) StringReader(java.io.StringReader) ImageReader(loci.formats.ImageReader) Location(loci.common.Location)

Example 3 with IniList

use of loci.common.IniList in project bioformats by openmicroscopy.

the class HamamatsuVMSReader method initFile.

// -- Internal FormatReader API methods --
/* @see loci.formats.FormatReader#initFile(String) */
@Override
protected void initFile(String id) throws FormatException, IOException {
    super.initFile(id);
    in = new RandomAccessInputStream(id);
    IniParser parser = new IniParser();
    IniList layout = parser.parseINI(new BufferedReader(new InputStreamReader(in, Constants.ENCODING)));
    IniTable slideInfo = layout.getTable("Virtual Microscope Specimen");
    int nLayers = Integer.parseInt(slideInfo.get("NoLayers"));
    nRows = Integer.parseInt(slideInfo.get("NoJpegRows"));
    nCols = Integer.parseInt(slideInfo.get("NoJpegColumns"));
    String imageFile = slideInfo.get("ImageFile");
    mapFile = slideInfo.get("MapFile");
    String optimisationFile = slideInfo.get("OptimisationFile");
    macroFile = slideInfo.get("MacroImage");
    Double physicalWidth = new Double(slideInfo.get("PhysicalWidth"));
    Double physicalHeight = new Double(slideInfo.get("PhysicalHeight"));
    Double magnification = new Double(slideInfo.get("SourceLens"));
    Double macroWidth = new Double(slideInfo.get("PhysicalMacroWidth"));
    Double macroHeight = new Double(slideInfo.get("PhysicalMacroHeight"));
    for (String key : slideInfo.keySet()) {
        addGlobalMeta(key, slideInfo.get(key));
    }
    Location dir = new Location(id).getAbsoluteFile().getParentFile();
    if (imageFile != null) {
        imageFile = new Location(dir, imageFile).getAbsolutePath();
        files.add(imageFile);
    }
    tileFiles = new String[nLayers][nRows][nCols];
    tileFiles[0][0][0] = imageFile;
    for (int layer = 0; layer < nLayers; layer++) {
        for (int row = 0; row < nRows; row++) {
            for (int col = 0; col < nCols; col++) {
                String f = slideInfo.get("ImageFile(" + col + "," + row + ")");
                if (f != null) {
                    f = new Location(dir, f).getAbsolutePath();
                    tileFiles[layer][row][col] = f;
                    files.add(f);
                }
            }
        }
    }
    if (mapFile != null) {
        mapFile = new Location(dir, mapFile).getAbsolutePath();
        files.add(mapFile);
    }
    if (optimisationFile != null) {
        optimisationFile = new Location(dir, optimisationFile).getAbsolutePath();
        files.add(optimisationFile);
    }
    if (macroFile != null) {
        macroFile = new Location(dir, macroFile).getAbsolutePath();
        files.add(macroFile);
    }
    int seriesCount = 3;
    core.clear();
    for (int i = 0; i < seriesCount; i++) {
        String file = null;
        switch(i) {
            case 0:
                file = tileFiles[0][nRows - 1][nCols - 1];
                break;
            case 1:
                file = macroFile;
                break;
            case 2:
                file = mapFile;
                break;
        }
        int[] dims;
        try (RandomAccessInputStream s = new RandomAccessInputStream(file);
            JPEGTileDecoder decoder = new JPEGTileDecoder()) {
            dims = decoder.preprocess(s);
        }
        CoreMetadata m = new CoreMetadata();
        if (i == 0) {
            m.sizeX = (MAX_JPEG_SIZE * (nCols - 1)) + dims[0];
            m.sizeY = (MAX_JPEG_SIZE * (nRows - 1)) + dims[1];
        } else {
            m.sizeX = dims[0];
            m.sizeY = dims[1];
        }
        m.sizeZ = 1;
        m.sizeC = 3;
        m.sizeT = 1;
        m.rgb = true;
        m.imageCount = 1;
        m.dimensionOrder = "XYCZT";
        m.pixelType = FormatTools.UINT8;
        m.interleaved = m.sizeX > MAX_SIZE && m.sizeY > MAX_SIZE;
        m.thumbnail = i > 0;
        core.add(m);
    }
    CoreMetadata ms0 = core.get(0);
    MetadataStore store = makeFilterMetadata();
    MetadataTools.populatePixels(store, this);
    String path = new Location(currentId).getAbsoluteFile().getName();
    store.setImageName(path + " full resolution", 0);
    store.setImageName(path + " macro", 1);
    store.setImageName(path + " map", 2);
    if (getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) {
        Length sizeX = FormatTools.getPhysicalSizeX(physicalWidth / ms0.sizeX);
        Length sizeY = FormatTools.getPhysicalSizeY(physicalHeight / ms0.sizeY);
        Length macroSizeX = FormatTools.getPhysicalSizeX(macroWidth / core.get(1).sizeX);
        Length macroSizeY = FormatTools.getPhysicalSizeY(macroHeight / core.get(1).sizeY);
        if (sizeX != null) {
            store.setPixelsPhysicalSizeX(sizeX, 0);
        }
        if (sizeY != null) {
            store.setPixelsPhysicalSizeY(sizeY, 0);
        }
        if (macroSizeX != null) {
            store.setPixelsPhysicalSizeX(macroSizeX, 1);
        }
        if (macroSizeY != null) {
            store.setPixelsPhysicalSizeY(macroSizeY, 1);
        }
        String instrumentID = MetadataTools.createLSID("Instrument", 0);
        store.setInstrumentID(instrumentID, 0);
        store.setImageInstrumentRef(instrumentID, 0);
        String objectiveID = MetadataTools.createLSID("Objective", 0, 0);
        store.setObjectiveID(objectiveID, 0, 0);
        store.setObjectiveNominalMagnification(magnification, 0, 0);
        store.setObjectiveSettingsID(objectiveID, 0);
    }
}
Also used : IniParser(loci.common.IniParser) InputStreamReader(java.io.InputStreamReader) IniList(loci.common.IniList) CoreMetadata(loci.formats.CoreMetadata) MetadataStore(loci.formats.meta.MetadataStore) Length(ome.units.quantity.Length) IniTable(loci.common.IniTable) JPEGTileDecoder(loci.formats.codec.JPEGTileDecoder) BufferedReader(java.io.BufferedReader) RandomAccessInputStream(loci.common.RandomAccessInputStream) Location(loci.common.Location)

Example 4 with IniList

use of loci.common.IniList in project bioformats by openmicroscopy.

the class TillVisionReader method initFile.

// -- Internal FormatReader API methods --
/* @see loci.formats.FormatReader#initFile(String) */
@Override
protected void initFile(String id) throws FormatException, IOException {
    if (!checkSuffix(id, "vws")) {
        Location pst = new Location(id).getAbsoluteFile();
        String name = pst.getParentFile().getName();
        Location parent = pst.getParentFile().getParentFile();
        Location vwsFile = new Location(parent, name.replaceAll(".pst", ".vws"));
        if (vwsFile.exists() && !vwsFile.isDirectory()) {
            id = vwsFile.getAbsolutePath();
        } else if (vwsFile.isDirectory()) {
            parent = pst.getParentFile();
            String[] list = parent.list(true);
            boolean foundVWS = false;
            for (String f : list) {
                if (checkSuffix(f, "vws")) {
                    id = new Location(parent, f).getAbsolutePath();
                    foundVWS = true;
                    break;
                }
            }
            if (!foundVWS) {
                throw new FormatException("Could not find .vws file.");
            }
        } else
            throw new FormatException("Could not find .vws file.");
    }
    super.initFile(id);
    exposureTimes = new HashMap<Integer, Double>();
    POIService poi = null;
    try {
        ServiceFactory factory = new ServiceFactory();
        poi = factory.getInstance(POIService.class);
    } catch (DependencyException de) {
        throw new FormatException("POI library not found", de);
    }
    poi.initialize(id);
    Vector<String> documents = poi.getDocumentList();
    int nImages = 0;
    final Hashtable<String, Object> tmpSeriesMetadata = new Hashtable<String, Object>();
    for (String name : documents) {
        LOGGER.debug("Reading {}", name);
        if (name.equals("Root Entry" + File.separator + "Contents")) {
            RandomAccessInputStream s = poi.getDocumentStream(name);
            s.order(true);
            boolean specialCImage = false;
            int nFound = 0;
            Long[] cimages = null;
            Location dir = new Location(id).getAbsoluteFile().getParentFile();
            String[] list = dir.list(true);
            boolean hasPST = false;
            for (String f : list) {
                if (checkSuffix(f, "pst")) {
                    hasPST = true;
                    break;
                }
            }
            if (!hasPST) {
                cimages = findImages(s);
                nFound = cimages.length;
                if (nFound == 0) {
                    s.seek(13);
                    int len = s.readShort();
                    String type = s.readString(len);
                    if (type.equals("CImage")) {
                        nFound = 1;
                        cimages = new Long[] { s.getFilePointer() + 6 };
                        specialCImage = true;
                    }
                }
                embeddedImages = nFound > 0;
            }
            LOGGER.debug("Images are {}embedded", embeddedImages ? "" : "not ");
            if (embeddedImages) {
                core.clear();
                embeddedOffset = new long[nFound];
                for (int i = 0; i < nFound; i++) {
                    CoreMetadata ms = new CoreMetadata();
                    core.add(ms);
                    s.seek(cimages[i]);
                    int len = s.read();
                    String imageName = s.readString(len);
                    imageNames.add(imageName);
                    if (specialCImage) {
                        s.seek(1280);
                    } else {
                        while (true) {
                            if (s.readString(2).equals("sB")) {
                                break;
                            } else
                                s.seek(s.getFilePointer() - 1);
                        }
                    }
                    s.skipBytes(20);
                    ms.sizeX = s.readInt();
                    ms.sizeY = s.readInt();
                    ms.sizeZ = s.readInt();
                    ms.sizeC = s.readInt();
                    ms.sizeT = s.readInt();
                    ms.pixelType = convertPixelType(s.readInt());
                    if (specialCImage) {
                        embeddedOffset[i] = s.getFilePointer() + 27;
                    } else {
                        embeddedOffset[i] = s.getFilePointer() + 31;
                    }
                }
                if (in != null)
                    in.close();
                in = poi.getDocumentStream(name);
                s.close();
                break;
            }
            s.seek(0);
            int lowerBound = 0;
            int upperBound = 0x1000;
            while (s.getFilePointer() < s.length() - 2) {
                LOGGER.debug("  Looking for image at {}", s.getFilePointer());
                s.order(false);
                int nextOffset = findNextOffset(s);
                if (nextOffset < 0 || nextOffset >= s.length())
                    break;
                s.seek(nextOffset);
                s.skipBytes(3);
                int len = s.readShort();
                if (len <= 0)
                    continue;
                imageNames.add(s.readString(len));
                if (s.getFilePointer() + 8 >= s.length())
                    break;
                s.skipBytes(6);
                s.order(true);
                len = s.readShort();
                if (nImages == 0 && len > upperBound * 2 && len < upperBound * 4) {
                    lowerBound = 512;
                    upperBound = 0x4000;
                }
                if (len < lowerBound || len > upperBound)
                    continue;
                String description = s.readString(len);
                LOGGER.debug("Description: {}", description);
                // parse key/value pairs from description
                String dateTime = "";
                String[] lines = description.split("[\r\n]");
                for (String line : lines) {
                    line = line.trim();
                    int colon = line.indexOf(':');
                    if (colon != -1 && !line.startsWith(";")) {
                        String key = line.substring(0, colon).trim();
                        String value = line.substring(colon + 1).trim();
                        String metaKey = "Series " + nImages + " " + key;
                        addMeta(metaKey, value, tmpSeriesMetadata);
                        if (key.equals("Start time of experiment")) {
                            // HH:mm:ss aa OR HH:mm:ss.sss aa
                            dateTime += " " + value;
                        } else if (key.equals("Date")) {
                            // mm/dd/yy ?
                            dateTime = value + " " + dateTime;
                        } else if (key.equals("Exposure time [ms]")) {
                            double exp = Double.parseDouble(value) / 1000;
                            exposureTimes.put(nImages, exp);
                        } else if (key.equals("Image type")) {
                            types.add(value);
                        }
                    }
                }
                dateTime = dateTime.trim();
                if (!dateTime.equals("")) {
                    boolean success = false;
                    for (String format : DATE_FORMATS) {
                        try {
                            dateTime = DateTools.formatDate(dateTime, format, ".");
                            success = true;
                        } catch (NullPointerException e) {
                        }
                    }
                    dates.add(success ? dateTime : "");
                }
                nImages++;
            }
            s.close();
        }
    }
    Location directory = new Location(currentId).getAbsoluteFile().getParentFile();
    String[] pixelsFile = new String[nImages];
    if (!embeddedImages) {
        if (nImages == 0) {
            throw new FormatException("No images found.");
        }
        // look for appropriate pixels files
        String[] files = directory.list(true);
        String name = currentId.substring(currentId.lastIndexOf(File.separator) + 1, currentId.lastIndexOf("."));
        int nextFile = 0;
        for (String f : files) {
            if (checkSuffix(f, "pst")) {
                Location pst = new Location(directory, f);
                if (pst.isDirectory() && f.startsWith(name)) {
                    String[] subfiles = pst.list(true);
                    Arrays.sort(subfiles);
                    for (String q : subfiles) {
                        if (checkSuffix(q, "pst") && nextFile < nImages) {
                            pixelsFile[nextFile++] = f + File.separator + q;
                        }
                    }
                }
            }
        }
        if (nextFile == 0) {
            for (String f : files) {
                if (checkSuffix(f, "pst")) {
                    pixelsFile[nextFile++] = new Location(directory, f).getAbsolutePath();
                }
            }
            if (nextFile == 0)
                throw new FormatException("No image files found.");
        }
    }
    Arrays.sort(pixelsFile);
    int nSeries = core.size();
    if (!embeddedImages) {
        core.clear();
        nSeries = nImages;
    }
    pixelsFiles = new String[nSeries];
    infFiles = new String[nSeries];
    Object[] metadataKeys = tmpSeriesMetadata.keySet().toArray();
    IniParser parser = new IniParser();
    for (int i = 0; i < nSeries; i++) {
        CoreMetadata ms;
        if (!embeddedImages) {
            ms = new CoreMetadata();
            core.add(ms);
            setSeries(i);
            // make sure that pixels file exists
            String file = pixelsFile[i];
            file = file.replace('/', File.separatorChar);
            file = file.replace('\\', File.separatorChar);
            String oldFile = file;
            Location f = new Location(directory, oldFile);
            if (!f.exists()) {
                oldFile = oldFile.substring(oldFile.lastIndexOf(File.separator) + 1);
                f = new Location(directory, oldFile);
                if (!f.exists()) {
                    throw new FormatException("Could not find pixels file '" + file);
                }
            }
            file = f.getAbsolutePath();
            pixelsFiles[i] = file;
            // read key/value pairs from .inf files
            int dot = file.lastIndexOf(".");
            String inf = file.substring(0, dot) + ".inf";
            infFiles[i] = inf;
            BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(inf), Constants.ENCODING));
            IniList data = parser.parseINI(reader);
            reader.close();
            IniTable infoTable = data.getTable("Info");
            ms.sizeX = Integer.parseInt(infoTable.get("Width"));
            ms.sizeY = Integer.parseInt(infoTable.get("Height"));
            ms.sizeC = Integer.parseInt(infoTable.get("Bands"));
            ms.sizeZ = Integer.parseInt(infoTable.get("Slices"));
            ms.sizeT = Integer.parseInt(infoTable.get("Frames"));
            int dataType = Integer.parseInt(infoTable.get("Datatype"));
            ms.pixelType = convertPixelType(dataType);
            if (getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) {
                HashMap<String, String> iniMap = data.flattenIntoHashMap();
                ms.seriesMetadata.putAll(iniMap);
            }
        } else {
            ms = core.get(i);
            setSeries(i);
        }
        ms.imageCount = ms.sizeZ * ms.sizeC * ms.sizeT;
        ms.rgb = false;
        ms.littleEndian = true;
        ms.dimensionOrder = "XYCZT";
        ms.seriesMetadata = new Hashtable<String, Object>();
        for (Object key : metadataKeys) {
            String keyName = key.toString();
            if (keyName.startsWith("Series " + i + " ")) {
                keyName = keyName.replaceAll("Series " + i + " ", "");
                ms.seriesMetadata.put(keyName, tmpSeriesMetadata.get(key));
            }
        }
    }
    setSeries(0);
    populateMetadataStore();
    poi.close();
    poi = null;
}
Also used : IniParser(loci.common.IniParser) ServiceFactory(loci.common.services.ServiceFactory) IniList(loci.common.IniList) InputStreamReader(java.io.InputStreamReader) Hashtable(java.util.Hashtable) POIService(loci.formats.services.POIService) DependencyException(loci.common.services.DependencyException) CoreMetadata(loci.formats.CoreMetadata) FormatException(loci.formats.FormatException) FileInputStream(java.io.FileInputStream) IniTable(loci.common.IniTable) BufferedReader(java.io.BufferedReader) RandomAccessInputStream(loci.common.RandomAccessInputStream) Location(loci.common.Location)

Example 5 with IniList

use of loci.common.IniList in project bioformats by openmicroscopy.

the class SimplePCITiffReader method initStandardMetadata.

// -- Internal BaseTiffReader API methods --
/* @see BaseTiffReader#initStandardMetadata() */
@Override
protected void initStandardMetadata() throws FormatException, IOException {
    super.initStandardMetadata();
    delegate = new MinimalTiffReader();
    delegate.setId(currentId);
    exposureTimes = new ArrayList<Double>();
    String data = ifds.get(0).getComment();
    // remove magic string
    data = data.substring(data.indexOf("\n") + 1);
    date = data.substring(0, data.indexOf("\n"));
    data = data.substring(data.indexOf("\n") + 1);
    data = data.replaceAll("ReadFromDoc", "");
    IniParser parser = new IniParser();
    parser.setCommentDelimiter(";");
    IniList ini = parser.parseINI(new BufferedReader(new StringReader(data)));
    IniTable microscopeTable = ini.getTable(" MICROSCOPE ");
    if (microscopeTable != null) {
        String objective = microscopeTable.get("Objective");
        int space = objective.indexOf(' ');
        if (space != -1) {
            magnification = new Double(objective.substring(0, space - 1));
            immersion = objective.substring(space + 1);
        }
    }
    CoreMetadata m = core.get(0);
    IniTable cameraTable = ini.getTable(" CAPTURE DEVICE ");
    binning = cameraTable.get("Binning") + "x" + cameraTable.get("Binning");
    cameraType = cameraTable.get("Camera Type");
    cameraName = cameraTable.get("Camera Name");
    String displayDepth = cameraTable.get("Display Depth");
    if (displayDepth != null) {
        m.bitsPerPixel = Integer.parseInt(displayDepth);
    } else {
        String bitDepth = cameraTable.get("Bit Depth");
        if (bitDepth != null && bitDepth.length() > "-bit".length()) {
            bitDepth = bitDepth.substring(0, bitDepth.length() - "-bit".length());
            m.bitsPerPixel = Integer.parseInt(bitDepth);
        } else {
            throw new FormatException("Could not find bits per pixels");
        }
    }
    IniTable captureTable = ini.getTable(" CAPTURE ");
    if (captureTable != null) {
        int index = 1;
        for (int i = 0; i < getSizeC(); i++) {
            if (captureTable.get("c_Filter" + index) != null) {
                exposureTimes.add(new Double(captureTable.get("c_Expos" + index)));
            }
            index++;
        }
    }
    IniTable calibrationTable = ini.getTable(" CALIBRATION ");
    String units = calibrationTable.get("units");
    scaling = Double.parseDouble(calibrationTable.get("factor"));
    m.imageCount *= getSizeC();
    m.rgb = false;
    if (ifds.get(0).containsKey(CUSTOM_BITS)) {
        m.bitsPerPixel = ifds.get(0).getIFDIntValue(CUSTOM_BITS);
    }
    if (getMetadataOptions().getMetadataLevel() != MetadataLevel.MINIMUM) {
        HashMap<String, String> iniMap = ini.flattenIntoHashMap();
        metadata.putAll(iniMap);
    }
}
Also used : IniParser(loci.common.IniParser) IniList(loci.common.IniList) CoreMetadata(loci.formats.CoreMetadata) FormatException(loci.formats.FormatException) IniTable(loci.common.IniTable) BufferedReader(java.io.BufferedReader) StringReader(java.io.StringReader)

Aggregations

IniList (loci.common.IniList)17 IniTable (loci.common.IniTable)16 IniParser (loci.common.IniParser)12 BufferedReader (java.io.BufferedReader)11 Location (loci.common.Location)9 CoreMetadata (loci.formats.CoreMetadata)9 FormatException (loci.formats.FormatException)7 StringReader (java.io.StringReader)6 RandomAccessInputStream (loci.common.RandomAccessInputStream)6 Length (ome.units.quantity.Length)6 IOException (java.io.IOException)5 InputStreamReader (java.io.InputStreamReader)5 MetadataStore (loci.formats.meta.MetadataStore)5 File (java.io.File)4 ArrayList (java.util.ArrayList)3 Time (ome.units.quantity.Time)3 NonNegativeInteger (ome.xml.model.primitives.NonNegativeInteger)3 Timestamp (ome.xml.model.primitives.Timestamp)3 FileInputStream (java.io.FileInputStream)2 DependencyException (loci.common.services.DependencyException)2