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.

ChannelColorWindow startWindow end
RhodamineFFDC3C241050690
Alexa Fluor 647FF3C28190430863

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.

D4 — pH 7.6, PLA1-GUV only

D5 — pH 6.3, PLA1-GUV only

E4 — pH 7.6, PLA1-GUV + CPRG-LUV

E5 — pH 6.3, PLA1-GUV + CPRG-LUV