feat(flomni): sample storage on the new flOMNI soft IOC (FLOMNI-SAMPLE:<slot>:<field>) #333

Merged
holler merged 1 commits from feat/flomni-sample-ioc into main 2026-10-17 23:34:17 +02:00
1 Commits
Author SHA1 Message Date
Mirko HollerandClaude Opus 5.5 cba7c378dc feat(flomni): sample storage on the new flOMNI soft IOC (FLOMNI-SAMPLE:<slot>:<field>)
CI for csaxs_bec / test (pull_request) Successful in 4m17s
Read the Docs Deploy Trigger / trigger-rtd-webhook (push) Successful in 2s
CI for csaxs_bec / test (push) Successful in 4m23s
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
2026-10-17 15:19:40 +02:00