#9454 ImzML parser in OpenMS
This is the core GSoC deliverable: native imzML support inside OpenMS. Previously, imaging datasets had to be converted or accessed through an external Python package. The new ImzMLFile adapter reuses OpenMS's mzML SAX infrastructure through an ImzMLHandler, which handles the imaging-specific vocabulary and seeks directly into the .ibd file for peak data.
Both official imzML encodings are supported. In continuous mode, every pixel shares a single m/z axis that is stored once. In processed mode, each pixel has its own m/z and intensity arrays. The implementation supports several loading paths, including a fully in-memory MSImagingExperiment, streaming through IMSDataConsumer, index-only parsing, and lazy random access through OnDiscImzMLExperiment.
Writing is also supported for both modes. The writer selects continuous or processed mode based on the metadata or whether all spectra share the same m/z axis, while respecting PeakFileOptions for precision and filtering.
Dataset-level metadata such as grid size, pixel size, UUIDs, checksums, scan pattern, and polarity is preserved on the experiment. Per-spectrum coordinates are stored as imzml:x/y/z MetaValues. Geometry is constructed from the parsed coordinate index, ensuring that in-memory and on-disc workflows use the same spatial mapping.
The implementation is covered by C++ and pyOpenMS tests using the official continuous and processed fixtures. A C++ tutorial (Tutorial_ImzMLFile) documents the public load, stream, on-disc, and store paths.