Interactive viewers
Per-well microscopy for pH Sensor Validation in Solution, as interactive viewers. Each well is one OME-Zarr store. The well descriptions are in the tab-set captions on the main page, under Results.
The viewers are stacked rather than tabbed. The Vizarr widget creates its viewer on a detached element with no width and never re-measures, so any instance hidden when the page mounts renders blank permanently.
Each viewer sets "menuOpen": true, because the widget starts its sidebar closed by
default and that sidebar holds the per-channel contrast sliders a reader needs.
Each viewer also sets colors and contrast_limits, one entry per channel in the store’s
own order: Rhodamine first, then Alexa Fluor 647. These are an authoring choice, not a
correction. They are the values figures/fov-render-params.json records for the static
figures on the main page. That is the 1.0 to 99.5 percentile stretch, picked
to show the phenomenon this DevNote reports. A viewer therefore opens on the same yellow
and red, at the same stretch, as the figure a reader just looked at.
| Channel | Color | Window start | Window end |
|---|---|---|---|
| Rhodamine | FFDC3C | 2410 | 50690 |
| Alexa Fluor 647 | FF3C28 | 1904 | 30863 |
What the stores carry is not a better answer that these keys override. Each one says
FF0000 and 0000FF across a window of 0 to 65535. That is the full 16-bit range, which
the acquisition wrote, and it is why a viewer without these keys opens almost black. It
records the detector’s range. It says nothing about which part of that range holds the
result.
Vizarr will not take these values from its own image config. It reads a channel’s color
and window from the store’s omero metadata whenever that block exists, and ignores what
it is handed. The widget therefore applies them to that metadata on its way in. Setting
them per viewer is also the point. A figure and its viewer are a pair, and the next
experiment on the same stores will want its own.
The viewers point at ../../plugins/vizarr/vizarr-viewer.mjs rather than at the widget on
curvenote.github.io. myst-theme mounts an anywidget inside a shadow root. The style tags
Material-UI and vizarr inject into document.head do not cross that boundary. With the
upstream widget the panel therefore renders with labels, zero-sized sliders and no
stacking of its own. The local copy mirrors those styles into the shadow root.
These viewers do not survive JATS conversion, and neither does the tab set of the same four wells on the main page. The archived record of this result is the prose description under each well, not an image.


