loci.formats.in

## Class LeicaReader

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

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

      public class LeicaReader
      extends FormatReader

  LeicaReader is the file format reader for Leica files.
  Author:
    Melissa Linkert melissa at glencoesoftware.com

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `(package private) class` | `LeicaReader.Detector`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private java.util.List<java.lang.Integer>` | `activeChannelIndices`
    `private static java.lang.Integer` | `CHANDESC`
    `private ome.xml.model.primitives.Color[][]` | `channelColor`
    `private java.util.List[]` | `channelNames`
    `private boolean[][]` | `cutInPopulated`
    `private boolean[][]` | `cutOutPopulated`
    `private static java.lang.String` | `DATE_FORMAT` Format for dates.
    `private java.util.List<LeicaReader.Detector>` | `detectors`
    `private static java.lang.Integer` | `DIMDESCR`
    `private static com.google.common.collect.ImmutableMap<java.lang.Integer,java.lang.String>` | `DIMENSION_NAMES`
    `private java.util.List[]` | `emWaves`
    `private static java.lang.Integer` | `EXPERIMENT`
    `private double[]` | `exposureTime`
    `private java.util.List[]` | `exWaves`
    `private int` | `fileLength` Length of each file name.
    `protected java.util.List<java.lang.String>[]` | `files` Array of image file names.
    `private boolean[][]` | `filterRefPopulated`
    `private static java.lang.Integer` | `FILTERSET`
    `protected IFDList` | `headerIFDs` Array of IFD-like structures containing metadata.
    `protected IFDList` | `ifds`
    `private static java.lang.Integer` | `IMAGES`
    `private int` | `lastPlane`
    `static java.lang.String[]` | `LEI_SUFFIX`
    `private static int` | `LEICA_MAGIC_TAG` All Leica TIFFs have this tag.
    `private java.lang.String` | `leiFilename` Name of current LEI file
    `private static org.slf4j.Logger` | `LOGGER`
    `private static java.lang.Integer` | `LUTDESC`
    `private int` | `nameLength`
    `private int` | `nextChannel`
    `private int` | `nextDetector`
    `private int` | `numSeries` Number of series in the file.
    `private double[][]` | `physicalSizes`
    `private double[]` | `pinhole`
    `private static java.lang.Integer` | `SCANNERSET`
    `private static java.lang.Integer` | `SEQ_FILTERSET`
    `private static int` | `SEQ_FILTERSET_END`
    `private static java.lang.Integer` | `SEQ_SCANNERSET`
    `private static int` | `SEQ_SCANNERSET_END`
    `private boolean` | `sequential`
    `private static java.lang.Integer` | `SEQUENTIALSET`
    `private static java.lang.Integer` | `SERIES` IFD tags.
    `private java.util.List<java.lang.String>` | `seriesDescriptions`
    `private java.util.List<java.lang.String>` | `seriesNames`
    `protected MinimalTiffReader` | `tiff` Helper readers.
    `private int[]` | `tileHeight`
    `private int[]` | `tileWidth`
    `private static java.lang.Integer` | `TIMEINFO`
    `private java.lang.String[][]` | `timestamps`
    `private boolean[]` | `valid`

    - ### 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, metadataOptions, suffixes`

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

      `CAN_GROUP, CANNOT_GROUP, MUST_GROUP`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `LeicaReader()` Constructs a new Leica reader.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `close(boolean fileOnly)` Closes the currently open file.
    `int` | `fileGroupOption(java.lang.String id)` Returns an indication of whether the files in a multi-file dataset can be handled individually.
    `private java.lang.String` | `findLEIFile(java.lang.String baseFile)` Find the .lei file that belongs to the same dataset as the given file.
    `short[][]` | `get16BitLookupTable()` Gets the 16-bit color lookup table associated with the most recently opened image.
    `byte[][]` | `get8BitLookupTable()` Gets the 8-bit color lookup table associated with the most recently opened image.
    `int` | `getOptimalTileHeight()` Returns the optimal sub-image height for use with openBytes.
    `int` | `getOptimalTileWidth()` Returns the optimal sub-image width for use with openBytes.
    `java.lang.String[]` | `getSeriesUsedFiles(boolean noPixels)` Returns an array of filenames needed to open the current series.
    `private java.lang.String` | `getString(boolean doubleLength)`
    `private java.lang.String` | `getString(int len)`
    `private java.lang.String[]` | `getTIFFList()`
    `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(loci.common.RandomAccessInputStream stream)` Checks if the given stream is a valid stream for this file format.
    `boolean` | `isThisType(java.lang.String name, boolean open)` Checks if a file matches the type of this format reader.
    `private static com.google.common.collect.ImmutableMap<java.lang.Integer,java.lang.String>` | `makeDimensionTable()`
    `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 void` | `parseChannelTag()`
    `private void` | `parseDimensionTag(int seriesIndex)`
    `private void` | `parseExperimentTag()`
    `private void` | `parseFilenames(int seriesIndex)`
    `private void` | `parseImageTag(int seriesIndex)`
    `private void` | `parseInstrumentData(MetadataStore store, int blockNum)`
    `private void` | `parseLUT(int seriesIndex)`
    `private void` | `parseSeriesTag()`
    `private void` | `parseTimeTag(int seriesIndex)`
    `private boolean` | `usedFile(java.lang.String s)`

    - ### 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, coreIndexToSeries, flattenHashtables, 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, getPixelType, getPixelType, getPossibleDomains, getPulse, getRequiredDirectories, 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, 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

    - #### LOGGER

          private static final org.slf4j.Logger LOGGER

    - #### LEI_SUFFIX

          public static final java.lang.String[] LEI_SUFFIX

    - #### LEICA_MAGIC_TAG

          private static final int LEICA_MAGIC_TAG

      All Leica TIFFs have this tag.
      See Also:
        Constant Field Values

    - #### DATE_FORMAT

          private static final java.lang.String DATE_FORMAT

      Format for dates.
      See Also:
        Constant Field Values

    - #### SERIES

          private static final java.lang.Integer SERIES

      IFD tags.

    - #### IMAGES

          private static final java.lang.Integer IMAGES

    - #### DIMDESCR

          private static final java.lang.Integer DIMDESCR

    - #### FILTERSET

          private static final java.lang.Integer FILTERSET

    - #### TIMEINFO

          private static final java.lang.Integer TIMEINFO

    - #### SCANNERSET

          private static final java.lang.Integer SCANNERSET

    - #### EXPERIMENT

          private static final java.lang.Integer EXPERIMENT

    - #### LUTDESC

          private static final java.lang.Integer LUTDESC

    - #### CHANDESC

          private static final java.lang.Integer CHANDESC

    - #### SEQUENTIALSET

          private static final java.lang.Integer SEQUENTIALSET

    - #### SEQ_SCANNERSET

          private static final java.lang.Integer SEQ_SCANNERSET

    - #### SEQ_FILTERSET

          private static final java.lang.Integer SEQ_FILTERSET

    - #### SEQ_SCANNERSET_END

          private static final int SEQ_SCANNERSET_END

      See Also:
        Constant Field Values

    - #### SEQ_FILTERSET_END

          private static final int SEQ_FILTERSET_END

      See Also:
        Constant Field Values

    - #### DIMENSION_NAMES

          private static final com.google.common.collect.ImmutableMap<java.lang.Integer,java.lang.String> DIMENSION_NAMES

    - #### ifds

          protected IFDList ifds

    - #### headerIFDs

          protected IFDList headerIFDs

      Array of IFD-like structures containing metadata.

    - #### tiff

          protected MinimalTiffReader tiff

      Helper readers.

    - #### files

          protected java.util.List<java.lang.String>[] files

      Array of image file names.

    - #### numSeries

          private int numSeries

      Number of series in the file.

    - #### leiFilename

          private java.lang.String leiFilename

      Name of current LEI file

    - #### fileLength

          private int fileLength

      Length of each file name.

    - #### valid

          private boolean[] valid

    - #### timestamps

          private java.lang.String[][] timestamps

    - #### seriesNames

          private java.util.List<java.lang.String> seriesNames

    - #### seriesDescriptions

          private java.util.List<java.lang.String> seriesDescriptions

    - #### lastPlane

          private int lastPlane

    - #### nameLength

          private int nameLength

    - #### physicalSizes

          private double[][] physicalSizes

    - #### pinhole

          private double[] pinhole

    - #### exposureTime

          private double[] exposureTime

    - #### nextDetector

          private int nextDetector

    - #### nextChannel

          private int nextChannel

    - #### activeChannelIndices

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

    - #### sequential

          private boolean sequential

    - #### channelNames

          private java.util.List[] channelNames

    - #### emWaves

          private java.util.List[] emWaves

    - #### exWaves

          private java.util.List[] exWaves

    - #### cutInPopulated

          private boolean[][] cutInPopulated

    - #### cutOutPopulated

          private boolean[][] cutOutPopulated

    - #### filterRefPopulated

          private boolean[][] filterRefPopulated

    - #### detectors

          private java.util.List<LeicaReader.Detector> detectors

    - #### tileWidth

          private int[] tileWidth

    - #### tileHeight

          private int[] tileHeight

    - #### channelColor

          private ome.xml.model.primitives.Color[][] channelColor

  - ### Constructor Detail

    - #### LeicaReader

          public LeicaReader()

      Constructs a new Leica reader.

  - ### Method Detail

    - #### 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.

    - #### isThisType

          public boolean isThisType(loci.common.RandomAccessInputStream stream)
                             throws java.io.IOException

      Description copied from interface: `IFormatReader`
      Checks if the given stream is a valid stream for this file format. The number of bytes read is format-dependent.
      Specified by:
        `isThisType` in interface `IFormatReader`
      Overrides:
        `isThisType` in class `FormatReader`
      Parameters:
        `stream` - A RandomAccessInputStream representing the file to check. The first byte in the stream is assumed to be the first byte in the file.
      Returns:
        true if the file represented by the stream can be read by this reader; false otherwise.
      Throws:
        `java.io.IOException`

    - #### get8BitLookupTable

          public byte[][] get8BitLookupTable()
                                      throws FormatException,
                                             java.io.IOException

      Description copied from interface: `IFormatReader`
      Gets the 8-bit color lookup table associated with the most recently opened image. If no image planes have been opened, or if `IFormatReader.isIndexed()` returns false, then this may return null. Also, if `IFormatReader.getPixelType()` returns anything other than `FormatTools.INT8` or `FormatTools.UINT8`, this method will return null.
      Specified by:
        `get8BitLookupTable` in interface `IFormatReader`
      Overrides:
        `get8BitLookupTable` in class `FormatReader`
      Throws:
        `FormatException`
        `java.io.IOException`

    - #### get16BitLookupTable

          public short[][] get16BitLookupTable()
                                        throws FormatException,
                                               java.io.IOException

      Description copied from interface: `IFormatReader`
      Gets the 16-bit color lookup table associated with the most recently opened image. If no image planes have been opened, or if `IFormatReader.isIndexed()` returns false, then this may return null. Also, if `IFormatReader.getPixelType()` returns anything other than `FormatTools.INT16` or `FormatTools.UINT16`, this method will return null.
      Specified by:
        `get16BitLookupTable` in interface `IFormatReader`
      Overrides:
        `get16BitLookupTable` in class `FormatReader`
      Throws:
        `FormatException`
        `java.io.IOException`

    - #### 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`

    - #### 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.
      See Also:
        `IFormatReader.openBytes(int, byte[], int, int, int, int)`

    - #### 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`

    - #### close

          public void close(boolean fileOnly)
                     throws java.io.IOException

      Description copied from interface: `IFormatReader`
      Closes the currently open file. If the flag is set, this is all that happens; if unset, it is equivalent to calling `Closeable.close()`.
      Specified by:
        `close` in interface `IFormatReader`
      Overrides:
        `close` in class `FormatReader`
      Throws:
        `java.io.IOException`

    - #### getOptimalTileWidth

          public int getOptimalTileWidth()

      Description copied from interface: `IFormatReader`
      Returns the optimal sub-image width for use with openBytes.
      Specified by:
        `getOptimalTileWidth` in interface `IFormatReader`
      Overrides:
        `getOptimalTileWidth` in class `FormatReader`

    - #### getOptimalTileHeight

          public int getOptimalTileHeight()

      Description copied from interface: `IFormatReader`
      Returns the optimal sub-image height for use with openBytes.
      Specified by:
        `getOptimalTileHeight` in interface `IFormatReader`
      Overrides:
        `getOptimalTileHeight` in class `FormatReader`

    - #### 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

    - #### findLEIFile

          private java.lang.String findLEIFile(java.lang.String baseFile)
                                        throws FormatException,
                                               java.io.IOException

      Find the .lei file that belongs to the same dataset as the given file.
      Throws:
        `FormatException`
        `java.io.IOException`

    - #### getTIFFList

          private java.lang.String[] getTIFFList()

    - #### parseFilenames

          private void parseFilenames(int seriesIndex)
                               throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### parseSeriesTag

          private void parseSeriesTag()
                               throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### parseImageTag

          private void parseImageTag(int seriesIndex)
                              throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### parseDimensionTag

          private void parseDimensionTag(int seriesIndex)
                                  throws FormatException,
                                         java.io.IOException

      Throws:
        `FormatException`
        `java.io.IOException`

    - #### parseTimeTag

          private void parseTimeTag(int seriesIndex)
                             throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### parseExperimentTag

          private void parseExperimentTag()
                                   throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### parseLUT

          private void parseLUT(int seriesIndex)
                         throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### parseChannelTag

          private void parseChannelTag()
                                throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### parseInstrumentData

          private void parseInstrumentData(MetadataStore store,
                                           int blockNum)
                                    throws FormatException,
                                           java.io.IOException

      Throws:
        `FormatException`
        `java.io.IOException`

    - #### usedFile

          private boolean usedFile(java.lang.String s)

    - #### getString

          private java.lang.String getString(int len)
                                      throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### getString

          private java.lang.String getString(boolean doubleLength)
                                      throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### makeDimensionTable

          private static com.google.common.collect.ImmutableMap<java.lang.Integer,java.lang.String> makeDimensionTable()

Copyright © 2026 Open Microscopy Environment