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
Member

The flOMNI sample storage moves from the XOMNY-SAMPLE_DB_flomni: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

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
holler added 1 commit 2026-10-17 23:20:58 +02:00
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
cba7c378dc
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
holler merged commit cba7c378dc into main 2026-10-17 23:34:17 +02:00
holler deleted branch feat/flomni-sample-ioc 2026-10-17 23:34:17 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bec/csaxs_bec#333