The flOMNI sample storage moves from the XOMNY-SAMPLE_DB_flomni<n>:GET/.DESC
records (name and owner packed into one 40-char DESC via sample_desc_codec,
measurement status in the BEC global var "flomni_measured_samples" keyed by
that packed string) to one record per slot on the flOMNI soft IOC
(flOMNI repo, softioc/ioc_flomni.py):
FLOMNI-SAMPLE:<slot>:USED / NAME (up to 256 chars) / OWNER /
STATUS (none|started|completed) / MEAS_DATE
<slot> = STAGE (0), T01..T20 (1-20), GRIPPER (100)
No transition (decided by Mirko 2026-10-17).
- FlomniSampleStorage: same public methods (slot 100 = gripper), attribute
names sample_placed/sample_names/sample_in_gripper[_name] kept; new
sample_owners/sample_status/sample_meas_date (+ gripper equivalents),
get_sample_status/meas_date/record, set_sample_measured(slot, status,
date, owner_if_empty) and transfer_sample(from, to), which moves the whole
record so the measurement status travels with the sample
- flomni plugin: transfers use transfer_sample(); tomo_scan marks the stage
sample started/completed on the record; the label offer reads status,
date and owner from the record; _MeasuredSampleLog and
sample_get_measured_log_key removed
Behaviour change: the label's account is the sample owner (was the active
account at measurement time); set_sample_measured fills an empty owner
with the active account
- sample storage widget: bulk read incl. owner/status, writes via
set_sample_slot/unset_sample_slot; no global-var measured log
- webpage generator: name and owner from separate fields
- e2e harness and tomo test updated; nexus writer unchanged (sample name is
now the plain name)
Tested against the live IOC on mpc2844 (ophyd): long names, transfers slot ->
gripper -> stage with status/date, owner_if_empty, show_all, clear, slot
range check, bulk read() keys.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TNtKEk4jAyjebMDQFwRHJQ