You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Broader-scope replacement for #56. Populate the full instrument-metadata surface on the catch-all default reader plugin path (src/zarrmony/readers/default.py), covering OME-TIFF and any other formats routed through the default bioio plugin (bioio-ome-tiff, bioio-tifffile, bioio-imageio, etc.).
Scope
For OME-TIFF and any format that already carries OME metadata, everything arrives pre-parsed via ome_types — the <Instrument>/<Objective> element and channel identity are likely already populated on the reader's ome_metadata. Propagate to:
For formats without native OME metadata (plain TIFF, PNG-like inputs), each block is simply omitted — no synthetic values, no warnings. Document in the PR description which of the default-plugin distributions expose which fields out of the box (extended from the #56 probe test).
Implementation notes
Introspect reader.ome_metadata (or equivalent bioio surface) — if instruments[0]/images[i]/pixels.channels are populated, project into the same audit dict shape as the LIF path.
Honour <Image>/<ObjectiveSettings> on the input OME so per-image objective linkage survives the round-trip.
Cross-format consistency check called out below — this is the plugin where inconsistencies between formats become most visible.
Acceptance criteria
per_scene[i].objective, per_scene[i].acquisition, and per_scene[i].channels populated on an OME-TIFF fixture that has these elements in its input OME-XML.
Blocks absent (no key, no null) on an input with no matching metadata.
Output OME-XML preserves the input's <Objective> when present, or omits <Instrument> cleanly when not.
Same blocks visible in inspect().scenes[i].
Tests for both the "input has metadata" and "input has none" cases.
What to build
Broader-scope replacement for #56. Populate the full instrument-metadata surface on the catch-all default reader plugin path (
src/zarrmony/readers/default.py), covering OME-TIFF and any other formats routed through the default bioio plugin (bioio-ome-tiff, bioio-tifffile, bioio-imageio, etc.).Scope
For OME-TIFF and any format that already carries OME metadata, everything arrives pre-parsed via
ome_types— the<Instrument>/<Objective>element and channel identity are likely already populated on the reader'some_metadata. Propagate to:per_scene[i].objective— project fromome_metadata.instruments[0].objectives[...]when present, using the same field mapping as feat(lif): extract objective lens metadata (magnification, NA, immersion) into audit + OME-XML #52. Pass through OME-XML unchanged.per_scene[i].acquisition— project fromome_metadata.images[i].acquisition_dateandome_metadata.instruments[0].microscope. Normalise imaging_method to the same token set.ome_metadata.images[0].pixels.channelsintoper_scene[i].channelswith the ADR-locked shape.For formats without native OME metadata (plain TIFF, PNG-like inputs), each block is simply omitted — no synthetic values, no warnings. Document in the PR description which of the default-plugin distributions expose which fields out of the box (extended from the #56 probe test).
Implementation notes
reader.ome_metadata(or equivalent bioio surface) — ifinstruments[0]/images[i]/pixels.channelsare populated, project into the same audit dict shape as the LIF path.<Image>/<ObjectiveSettings>on the input OME so per-image objective linkage survives the round-trip.Acceptance criteria
per_scene[i].objective,per_scene[i].acquisition, andper_scene[i].channelspopulated on an OME-TIFF fixture that has these elements in its input OME-XML.<Objective>when present, or omits<Instrument>cleanly when not.inspect().scenes[i].Blocked by
Replaces