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 #55. Populate the full instrument-metadata surface on the ND2 reader path so ND2 conversions carry the same audit / OME-XML richness as LIF does after #52 + #62.
Scope
Extract all of the following per scene (or per file where the ADR places them) from an ND2 file — src/zarrmony/readers/nd2.py and the bioio-nd2 surface it wraps:
bioio-nd2 exposes ND2 metadata via nd2 (the underlying reader) — check reader.metadata / reader.experiment first, then fall back to a raw walk if the parsed surface is incomplete.
What to build
Broader-scope replacement for #55. Populate the full instrument-metadata surface on the ND2 reader path so ND2 conversions carry the same audit / OME-XML richness as LIF does after #52 + #62.
Scope
Extract all of the following per scene (or per file where the ADR places them) from an ND2 file —
src/zarrmony/readers/nd2.pyand the bioio-nd2 surface it wraps:nominal_magnification,numerical_aperture,immersion,model,working_distance_um. Source: Nikon NIS-Elements structured experiment metadata. Populateper_scene[i].objective+ OME-XML<Instrument>/<Objective>+ per-image<ObjectiveSettings>.acquisition_date,microscope_model,microscope_serial,imaging_method. ND2 records these in the file header /experimentmetadata surface exposed by the underlyingnd2package.reader.ome_metadata.images[0].pixels.channelsintoper_scene[i].channelswith the ADR-locked shape.Implementation notes
bioio-nd2exposes ND2 metadata viand2(the underlying reader) — checkreader.metadata/reader.experimentfirst, then fall back to a raw walk if the parsed surface is incomplete.Immersionenum) — reuse the_normalise_immersionhelper shared with the LIF/CZI paths (introduced by feat(lif): extract objective lens metadata (magnification, NA, immersion) into audit + OME-XML #52).Acceptance criteria
per_scene[i].objective,per_scene[i].acquisition, andper_scene[i].channelspopulated on a representative ND2 file.<Instrument><Objective .../></Instrument>and<ObjectiveSettings ID=.../>.inspect().scenes[i].Blocked by
Replaces