loci.formats.in

## Class CellVoyagerReader

- java.lang.Object
- - loci.formats.FormatHandler
  - - loci.formats.FormatReader
    - - loci.formats.in.CellVoyagerReader

- All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, ICompressedTileReader, IFormatHandler, IFormatReader, IMetadataConfigurable, IPyramidHandler

      public class CellVoyagerReader
      extends FormatReader

  A bioformat reader for the Yokagawa Cellvoyager CV1000 automated microscope ( http://www.yokogawa.com/scanner/products/cv1000e.htm).

  This reader opens the dataset generated by the Yokagawa Cellvoyager automated microscope. The user should point the reader to the file named `MeasurementResult.xml` in the dataset folder.

  The file format itself consists of several nested folder containing a lot of - sometimes redundant - information. This specific reader exploits the following files:

  - `MeasurementResult.xml` that contains high level information about image geometry, well (if any) organization, fields arrangement, etc..
  - `MeasurementResult.ome.xml` is a malformed OME xml file that contains information on one of the numerous TIF files that compose the pixel data. It is used to easily extract common metadata.
  - All the TIF files in the `Image` folder: They contain the pixel data itself. Each well (if any) can have several Areas (fields in the HCS vocable), in turn composed of several tiles that are to be stitched border to border, without the possibility of a more subtle stitching process.
  This reader stitches each area on the fly upon loading. It yields one series per well x area. If there is 20 wells each made of 2 areas, 40 series will be available.

  This reader version was derived from reverse-engineering data files generated on a system hosted by the imaging facility of the Institut Pasteur, Paris (Imagopole / PFID). It spits file versioned `1.0`. The file format contains several obvious typos, notably in some XML tags, and as mentionned above, the `ome.xml` is malformed. It is likely that that subsequent versions of the CellVoyager format will fix these problems, alas incapacitating this reader. Should it happen, mail the author to help them update this reader.

  Author:
    Jean-Yves Tinevez jeanyves.tinevez at gmail.com, Melissa Linkert

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `private static class` | `CellVoyagerReader.AreaInfo`
    `private static class` | `CellVoyagerReader.ChannelInfo`
    `private static class` | `CellVoyagerReader.FieldInfo`
    `private static class` | `CellVoyagerReader.WellInfo`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private java.util.List<CellVoyagerReader.ChannelInfo>` | `channelInfos`
    `private java.lang.String` | `imageFolder`
    `private java.lang.String` | `measurementResultFile`
    `private java.lang.String` | `omeMeasurementFile`
    `private static java.lang.String` | `SINGLE_TIFF_PATH_BUILDER`
    `private java.util.List<java.lang.Integer>` | `timePoints`
    `private java.util.List<CellVoyagerReader.WellInfo>` | `wells`

    - ### Fields inherited from class loci.formats.FormatReader

      `core, coreIndex, datasetDescription, domains, fillColor, filterMetadata, flattenedResolutions, group, hasCompanionFiles, in, indexedAsRGB, metadata, metadataStore, normalizeData, resolution, saveOriginalMetadata, series, suffixNecessary, suffixSufficient, THUMBNAIL_DIMENSION`

    - ### Fields inherited from class loci.formats.FormatHandler

      `COMPRESSION_SUFFIXES, currentId, format, LOGGER, metadataOptions, suffixes`

    - ### Fields inherited from interface loci.formats.IFormatReader

      `CAN_GROUP, CANNOT_GROUP, MUST_GROUP`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `CellVoyagerReader()`

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `fileGroupOption(java.lang.String id)` Returns an indication of whether the files in a multi-file dataset can be handled individually.
    `private static org.w3c.dom.Element` | `getChild(org.w3c.dom.Element parent, java.lang.String childName)`
    `private static org.w3c.dom.Element` | `getChild(org.w3c.dom.Element parent, java.lang.String[] path)`
    `private static java.util.List<org.w3c.dom.Element>` | `getChildren(org.w3c.dom.Element parent, java.lang.String name)`
    `private static java.lang.String` | `getChildText(org.w3c.dom.Element parent, java.lang.String childName)`
    `private static java.lang.String` | `getChildText(org.w3c.dom.Element parent, java.lang.String[] path)`
    `int` | `getRequiredDirectories(java.lang.String[] files)` Returns the number of parent directories that are important when processing the given list of files.
    `java.lang.String[]` | `getSeriesUsedFiles(boolean noPixels)` Returns an array of filenames needed to open the current series.
    `protected void` | `initFile(java.lang.String id)` Initializes the given file (parsing header information, etc.).
    `boolean` | `isSingleFile(java.lang.String id)` Returns true if the named file is expected to be the only file in the dataset.
    `boolean` | `isThisType(java.lang.String name, boolean open)` Checks if a file matches the type of this format reader.
    `byte[]` | `openBytes(int no, byte[] buf, int x, int y, int w, int h)` Obtains a sub-image of the specified image plane into a pre-allocated byte array.
    `private CellVoyagerReader.AreaInfo` | `readArea(org.w3c.dom.Element areaEl, int startingFieldIndex, double pixelWidth, double pixelHeight, int tileWidth, int tileHeight)`
    `private CellVoyagerReader.ChannelInfo` | `readChannel(org.w3c.dom.Element channelEl)`
    `private CellVoyagerReader.FieldInfo` | `readField(org.w3c.dom.Element fieldEl)`
    `private double` | `readFrameInterval(org.w3c.dom.Document document)`
    `private void` | `readInfo(org.w3c.dom.Document msDocument, org.w3c.dom.Document omeDocument)`
    `private java.util.List<java.lang.Integer>` | `readTimePoints(org.w3c.dom.Document document)`
    `private CellVoyagerReader.WellInfo` | `readWellInfo(org.w3c.dom.Element wellEl, double pixelWidth, double pixelHeight, int tileWidth, int tileHeight)`
    `private int[]` | `seriesToWellArea(int series)` Returns the well index (in the field `wells`) and the area index (in the field `CellVoyagerReader.WellInfo.areas` corresponding to the specified series.

    - ### Methods inherited from class loci.formats.FormatReader

      `addGlobalMeta, addGlobalMeta, addGlobalMeta, addGlobalMeta, addGlobalMeta, addGlobalMeta, addGlobalMeta, addGlobalMeta, addGlobalMeta, addGlobalMetaList, addMeta, addMetaList, addSeriesMeta, addSeriesMeta, addSeriesMeta, addSeriesMeta, addSeriesMeta, addSeriesMeta, addSeriesMeta, addSeriesMeta, addSeriesMeta, addSeriesMetaList, close, close, coreIndexToSeries, flattenHashtables, get16BitLookupTable, get8BitLookupTable, getAcquisitionMode, getAdvancedSeriesUsedFiles, getAdvancedUsedFiles, getArcType, getAvailableOptions, getBinning, getBitsPerPixel, getCompression, getContrastMethod, getCoreIndex, getCoreMetadataList, getCorrection, getCurrentCore, getCurrentFile, getDatasetStructureDescription, getDetectorType, getDimensionOrder, getDimensionOrder, getDomains, getEffectiveSizeC, getExperimentType, getFilamentType, getFillColor, getFillRule, getFilterType, getFontFamily, getFontStyle, getGlobalMeta, getGlobalMetadata, getIlluminationType, getImageCount, getImmersion, getIndex, getIndex, getLaserMedium, getLaserType, getMarker, getMedium, getMetadataStore, getMetadataStoreRoot, getMetadataValue, getMicrobeamManipulationType, getMicroscopeType, getModuloC, getModuloT, getModuloZ, getNamingConvention, getOptimalTileHeight, getOptimalTileWidth, getPixelType, getPixelType, getPossibleDomains, getPulse, getResolution, getResolutionCount, getRGBChannelCount, getRotationTransform, getSeries, getSeriesCount, getSeriesMeta, getSeriesMetadata, getSeriesMetadataValue, getSeriesUsedFiles, getSizeC, getSizeT, getSizeX, getSizeY, getSizeZ, getThumbSizeX, getThumbSizeY, getTileColumns, getTileRows, getUnderlyingReaders, getUsedFiles, getUsedFiles, getZCTCoords, getZCTModuloCoords, hasCompanionFiles, hasFlattenedResolutions, isFalseColor, isGroupFiles, isIndexed, isInterleaved, isInterleaved, isLittleEndian, isMetadataComplete, isMetadataFiltered, isNormalized, isOrderCertain, isOriginalMetadataPopulated, isRGB, isThisType, isThisType, isThisType, isThumbnailSeries, isUsedFile, makeFilterMetadata, openBytes, openBytes, openBytes, openPlane, openThumbBytes, readPlane, readPlane, readPlane, reopenFile, seriesToCoreIndex, setCoreIndex, setFillColor, setFlattenedResolutions, setGroupFiles, setId, setMetadataFiltered, setMetadataStore, setNormalized, setOriginalMetadataPopulated, setResolution, setSeries, updateMetadataLists`

    - ### Methods inherited from class loci.formats.FormatHandler

      `checkSuffix, checkSuffix, getFormat, getMetadataOptions, getNativeDataType, getSuffixes, getSupportedMetadataLevels, setMetadataOptions`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface loci.formats.IFormatHandler

      `getFormat, getNativeDataType, getSuffixes`

    - ### Methods inherited from interface loci.formats.IMetadataConfigurable

      `getMetadataOptions, getSupportedMetadataLevels, setMetadataOptions`

    - ### Methods inherited from interface loci.formats.ICompressedTileReader

      `getTileCodec, getTileCodecOptions, openCompressedBytes, openCompressedBytes`

- - ### Field Detail

    - #### SINGLE_TIFF_PATH_BUILDER

          private static final java.lang.String SINGLE_TIFF_PATH_BUILDER

      See Also:
        Constant Field Values

    - #### imageFolder

          private java.lang.String imageFolder

    - #### channelInfos

          private java.util.List<CellVoyagerReader.ChannelInfo> channelInfos

    - #### wells

          private java.util.List<CellVoyagerReader.WellInfo> wells

    - #### timePoints

          private java.util.List<java.lang.Integer> timePoints

    - #### measurementResultFile

          private java.lang.String measurementResultFile

    - #### omeMeasurementFile

          private java.lang.String omeMeasurementFile

  - ### Constructor Detail

    - #### CellVoyagerReader

          public CellVoyagerReader()

  - ### Method Detail

    - #### openBytes

          public byte[] openBytes(int no,
                                  byte[] buf,
                                  int x,
                                  int y,
                                  int w,
                                  int h)
                           throws FormatException,
                                  java.io.IOException

      Description copied from interface: `IFormatReader`
      Obtains a sub-image of the specified image plane into a pre-allocated byte array.
      Specified by:
        `openBytes` in interface `IFormatReader`
      Specified by:
        `openBytes` in class `FormatReader`
      Parameters:
        `no` - the plane index within the current series.
        `buf` - a pre-allocated buffer.
        `x` - X coordinate of the upper-left corner of the sub-image
        `y` - Y coordinate of the upper-left corner of the sub-image
        `w` - width of the sub-image
        `h` - height of the sub-image
      Returns:
        the pre-allocated buffer `buf` for convenience.
      Throws:
        `FormatException` - if there was a problem parsing the metadata of the file.
        `java.io.IOException` - if there was a problem reading the file.

    - #### fileGroupOption

          public int fileGroupOption(java.lang.String id)
                              throws FormatException,
                                     java.io.IOException

      Description copied from interface: `IFormatReader`
      Returns an indication of whether the files in a multi-file dataset can be handled individually. This method is only useful for formats and datasets which contain multiple files.
      Specified by:
        `fileGroupOption` in interface `IFormatReader`
      Overrides:
        `fileGroupOption` in class `FormatReader`
      Parameters:
        `id` - a file in the multi-file dataset
      Returns:
        an int indicating that we cannot, must, or might group the files. A return value of `FormatTools.MUST_GROUP` indicates that the files cannot be handled separately; the reader will always detect and read all files in the dataset. `FormatTools.CAN_GROUP` indicates that the files may be handled separately, but file grouping must then be disabled via `IFormatReader.setGroupFiles(boolean)`. `FormatTools.CANNOT_GROUP` indicates that the files must be handled separately; the reader will not attempt to read all files in the dataset (this is rare).
      Throws:
        `FormatException`
        `java.io.IOException`
      See Also:
        `FormatTools.MUST_GROUP`, `FormatTools.CAN_GROUP`, `FormatTools.CANNOT_GROUP`

    - #### getRequiredDirectories

          public int getRequiredDirectories(java.lang.String[] files)
                                     throws FormatException,
                                            java.io.IOException

      Description copied from interface: `IFormatReader`
      Returns the number of parent directories that are important when processing the given list of files. The number of directories is relative to the common parent. For example, given a list with these two files: /path/to/file/foo /path/to/file/that/is/related A return value of 0 indicates that "/path/to/file/" is irrelevant. A return value of 1 indicates that "/path/to/" is irrelevant. Return values less than 0 are invalid. All listed files are assumed to belong to datasets of the same format.
      Specified by:
        `getRequiredDirectories` in interface `IFormatReader`
      Overrides:
        `getRequiredDirectories` in class `FormatReader`
      Throws:
        `FormatException`
        `java.io.IOException`

    - #### isSingleFile

          public boolean isSingleFile(java.lang.String id)
                               throws FormatException,
                                      java.io.IOException

      Description copied from interface: `IFormatReader`
      Returns true if the named file is expected to be the only file in the dataset. For single-file formats, always returns true.
      Specified by:
        `isSingleFile` in interface `IFormatReader`
      Overrides:
        `isSingleFile` in class `FormatReader`
      Throws:
        `FormatException`
        `java.io.IOException`

    - #### isThisType

          public boolean isThisType(java.lang.String name,
                                    boolean open)

      Description copied from class: `FormatReader`
      Checks if a file matches the type of this format reader. Checks filename suffixes against those known for this format. If the suffix check is inconclusive and the open parameter is true, the file is opened and tested with `FormatReader.isThisType(RandomAccessInputStream)`.
      Specified by:
        `isThisType` in interface `IFormatReader`
      Overrides:
        `isThisType` in class `FormatReader`
        `open` - If true, and the file extension is insufficient to determine the file type, the (existing) file is opened for further analysis.

    - #### initFile

          protected void initFile(java.lang.String id)
                           throws FormatException,
                                  java.io.IOException

      Description copied from class: `FormatReader`
      Initializes the given file (parsing header information, etc.). Most subclasses should override this method to perform initialization operations such as parsing metadata.
      Overrides:
        `initFile` in class `FormatReader`
      Throws:
        `FormatException` - if a parsing error occurs processing the file.
        `java.io.IOException` - if an I/O error occurs processing the file

    - #### getSeriesUsedFiles

          public java.lang.String[] getSeriesUsedFiles(boolean noPixels)

      Description copied from interface: `IFormatReader`
      Returns an array of filenames needed to open the current series. If the 'noPixels' flag is set, then only files that do not contain pixel data will be returned. The first element in the array is expected to be the path passed to `IFormatHandler.setId(String)`, if appropriate based upon 'noPixels'. The remaining elements are expected to be in a consistent order; if a directory listing is necessary to build the list then it should be sorted first.
      Specified by:
        `getSeriesUsedFiles` in interface `IFormatReader`
      Overrides:
        `getSeriesUsedFiles` in class `FormatReader`

    - #### seriesToWellArea

          private int[] seriesToWellArea(int series)

      Returns the well index (in the field `wells`) and the area index (in the field `CellVoyagerReader.WellInfo.areas` corresponding to the specified series.
      Parameters:
        `series` - the desired series.
      Returns:
        the corresponding well index and area index, as a 2-element array of `int[] { well, area }`.

    - #### readInfo

          private void readInfo(org.w3c.dom.Document msDocument,
                                org.w3c.dom.Document omeDocument)
                         throws FormatException

      Throws:
        `FormatException`

    - #### readChannel

          private CellVoyagerReader.ChannelInfo readChannel(org.w3c.dom.Element channelEl)

    - #### readWellInfo

          private CellVoyagerReader.WellInfo readWellInfo(org.w3c.dom.Element wellEl,
                                                          double pixelWidth,
                                                          double pixelHeight,
                                                          int tileWidth,
                                                          int tileHeight)

    - #### readArea

          private CellVoyagerReader.AreaInfo readArea(org.w3c.dom.Element areaEl,
                                                      int startingFieldIndex,
                                                      double pixelWidth,
                                                      double pixelHeight,
                                                      int tileWidth,
                                                      int tileHeight)

    - #### readField

          private CellVoyagerReader.FieldInfo readField(org.w3c.dom.Element fieldEl)

    - #### readTimePoints

          private java.util.List<java.lang.Integer> readTimePoints(org.w3c.dom.Document document)

    - #### readFrameInterval

          private double readFrameInterval(org.w3c.dom.Document document)

    - #### getChild

          private static final org.w3c.dom.Element getChild(org.w3c.dom.Element parent,
                                                            java.lang.String childName)

    - #### getChild

          private static final org.w3c.dom.Element getChild(org.w3c.dom.Element parent,
                                                            java.lang.String[] path)

    - #### getChildren

          private static final java.util.List<org.w3c.dom.Element> getChildren(org.w3c.dom.Element parent,
                                                                               java.lang.String name)

    - #### getChildText

          private static final java.lang.String getChildText(org.w3c.dom.Element parent,
                                                             java.lang.String[] path)

    - #### getChildText

          private static final java.lang.String getChildText(org.w3c.dom.Element parent,
                                                             java.lang.String childName)

Copyright © 2026 Open Microscopy Environment