Skip to main content

Format variants

OpenSZRaw's corpus covers three distinct on-disk raw-data variants, each nested inside a different top-level storage of the same OLE2/CFBF container format (see OLE2 container). Reader::open distinguishes them by checking which storage is present, never by file extension.

.qgd GC-MS

Root storage: GCMS Raw Data/. Produced by GCMSsolution on Shimadzu GC-MS instruments (e.g. the QP2010 series). Two acquisition modes are covered:

  • Full-scan profile mode - conventional scanning-quadrupole GC-MS spectra, one MS1 spectrum per scan.
  • MRM/targeted mode - scheduled Multiple Reaction Monitoring on a triple-quadrupole GC-MS/MS instrument, with per-transition (precursor, product, intensity) records interleaved across acquisition "events" within a run.

No polarity bit has been found in either mode; see Known limitations.

.lcd IT-TOF

Root storage: TTFL Raw Data/. Produced by LabSolutions on Shimadzu's IT-TOF (ion trap - time-of-flight) LC-MS instruments. Spectra are run-length-encoded sparse profile data over 4 interleaved acquisition channels per retention-time point (commonly alternating polarity or MS level in the source method, e.g. datasets named ..._pos-neg_NN.lcd

  • though OpenSZRaw does not yet decode which channel is which). The reconstructed index axis is a raw digitizer time-bin index, converted to physical m/z via a per-file calibration parsed from the file's own TOF tuning data - see Known limitations.

.lcd QTOF

Root storage: QTFL RawData/. Produced by LabSolutions on Shimadzu's 9030-series quadrupole time-of-flight LC-MS instruments. Spectra are centroided at acquisition time (no profile data), stored in a flat, uncompressed block layout with calibrated 64-bit-fixed-point m/z values and a per-scan variable-width intensity array. A per-cycle event_id distinguishes MS1 survey scans from MS2 product-ion scans, but the real MS2 precursor m/z is not yet decoded (it lives in the separate QTFL RawData/DDA stream).

Telling them apart from the outside

Both .lcd variants share the same file extension, so the extension alone can't tell you which is which - only the internal CFBF storage does. Reader::open (and Python's RawReader) always checks this directly:

use openszraw::reader::Reader;

// Works identically whether "sample.lcd" is IT-TOF or QTOF underneath.
let reader = Reader::open("sample.lcd")?;

If you need to know which variant you got without reading spectra, inspect reader.run_metadata().instrument, which carries a variant-specific PSI-MS CV term (MS:1000604 "LCMS-IT-TOF" vs MS:1002998 "LCMS-9030").

PDA / chromatogram data

A fourth storage, PDA 3D Raw Data/ (photodiode-array UV detector data), appears in some .lcd files alongside the MS storages above. It uses a different, still-undecoded segment-based delta encoding and is out of scope for this reader - see Known limitations.