Skip to content

Yokogawa CellVoyager (CV7000, CV8000, CQ1)

Yokogawa CellVoyager high-content screening systems save each plate measurement as a folder of TIFF images with XML description files. OpenReadout returns the plate, its wells and fields, and the images with their channels, Z planes and time points.

Derived from corpus measurements (a CV8000 Cell Painting plate with a brightfield Z stack, and a CV7000 plate of maximum projections), validated against the measurement files parsed with the Python standard library, tifffile on every plane file and Bio-Formats 8.5.0 (black box). No Yokogawa document, schema or software was used; every name below is ours. Format id cellvoyager, crate openreadout-hcs (module cellvoyager). Shared plate model: hcs.md. Provenance: docs/provenance/cellvoyager.md.

A measurement folder holds MeasurementData.mlf (one record per image), MeasurementDetail.mrf (plate and channel geometry), the measurement setting (.mes, named by the .mrf), the plate files (.wpi, .wpp), correction files and the TIFFs <plate>_<well>_T<tttt>F<fff>L<ll>A<aa>Z<zz>C<cc>.tif. Open the folder, the .mlf, or the .mrf/.wpi/.mes next to it.

Files read

file element / attribute our field
.mrf root MeasurementDetail Version format_version (MeasurementDetail 1.0)
OperatorName operator
Title plate name (when it differs from the id); plate.extra.title
Application description, experiment.acquisition.comment
BeginTime, EndTime started_at, ended_at
MeasurementSettingFileName the .mes read; method = its stem
RowCount, ColumnCount rows, columns
FieldCount, ZCount, TimePointCount, Status plate.extra.field_count, z_count, time_point_count, status
TargetSystem, ReleaseNumber instrument.model (CV8000 AZ01), software_version
.mrf MeasurementSamplePlate Name plate id (barcode), sample.id
WellPlateFileName, WellPlateProductFileName the .wpi and .wpp read
.mrf MeasurementChannel Ch channel order
HorizontalPixels, VerticalPixels size_x, size_y (first channel; a note when channels differ)
HorizontalPixelDimension, VerticalPixelDimension physical_size (µm)
InputBitDepth sample type (16 → uint16, confirmed by a plane file header)
CameraNumber, InputLevel, ShadingCorrectionSource, FilterWheelPosition, FilterPosition plate.extra.channels[]: camera_number, input_level, shading_correction_source, filter_wheel_position, filter_position; also input_bit_depth
.mes ChannelList/Channel Target channel name when every channel’s target differs (DNA, ER, …); plate.extra.channels[].target
Acquisition (BP445/45) channel name otherwise; emission_nm = centre, emission_range_nm = centre ± width/2 (inferred from the name); emission_filter
LightSourceName → LightSourceList/LightSource WaveLength excitation_nm when the channel lists exactly one light source (a lamp’s 0 → absent); light_sources
ExposureTime (ms), Kind, Color (#AARRGGBB), Fluorophore exposure_ms, acquisition_mode, color (#RRGGBB), fluorophore
Objective, Magnification objective.model, nominal_magnification (no NA is recorded)
Method, Binning, CameraType, PinholeDiameter plate.extra.channels[]: method, binning, camera_type, pinhole_diameter
.wpp WellPlateProduct Manufacturer + Name plate_type (PerkinElmer CellCarrier-384-Ultra)
ProductID, ColumnPitch, RowPitch, WellShape, BottomMaterial plate.extra.plate_product_id, column_pitch_mm, row_pitch_mm, well_shape, bottom_material
.mlf MeasurementRecord (streamed) Type only IMG records are planes; others are counted in a note
Row, Column (1-based), FieldIndex, ZIndex, TimePoint, Ch well, field, Z, T, C
element text the plane file
Time frames[].acquired_at, field acquired_at
X, Y, Z (µm) extra.position_x_um/y_um, frames[].stage_*_um; Z step = smallest Z difference between consecutive ZIndex of one field and channel
Action, ZImageProcessing plate.extra.channels[].actions (2D, BF3D, 3D), z_image_processing (Maximum)
PartialTileIndex tiled fields are not stitched (note when several tiles occur)

A channel acquired at fewer Z planes than the others (the CV8000 Cell Painting protocol: 5 fluorescence channels at one plane, brightfield at three) leaves its other planes not_acquired: they read as blank and are left out of statistics (Bio-Formats repeats the acquired plane there). Files with the plane-name shape that no record names (the CV7000 plate’s …C05.tif) are reported as unindexed_plane_files.

Vocabulary (module cellvoyager)

our name meaning
CELLVOYAGER_FORMAT_ID cellvoyager
MEASUREMENT_DATA, MEASUREMENT_DETAIL MeasurementData.mlf, MeasurementDetail.mrf
looks_like_cellvoyager detection (the yokogawa.co.jp/BTS namespace and a measurement root element)
find_index the .mlf of a folder
parse the measurement into an HcsPlate
is_plane_name the _T..F..Z..C.. file-name shape

Validation (2026-09-24)

corpus id measurement ours vs oracle
hcs-cellvoyager-jump-1053601756-mlf CV8000, 384 wells x 6 fields, 6 channels, Z 3 (brightfield only); partial copy 16 planes bit-exact vs tifffile; 18,416 missing reported; 20 never-acquired planes blank; Bio-Formats 16/16 planes equal (it repeats the acquired plane at the 20 never-acquired positions)
hcs-cellvoyager-idr0093-mlf CV7000, 313 wells / 2,817 fields x 4 channels, 2560 x 2160 big-endian; partial copy 4 planes bit-exact; 11,264 missing reported; Bio-Formats 4/4 (its channel order follows the acquisition actions and is mapped by channel number)

How this reader was derived, file by file: provenance log.