From f69a12ac39b65d03f62b10d2592c38c328610d8b Mon Sep 17 00:00:00 2001 From: Doga Gursoy Date: Sun, 21 Jun 2026 22:58:29 +0300 Subject: [PATCH] feat(2-bm): record the DMM substrate two-stripe fact, no per-energy selector (ENERGY-6) Staff settled ENERGY-6 (#255): the DMM substrate carries two W-B4C/Si multilayer stripes (periods 24 and 13.8 angstrom, 4 mm apart, 140 x 44 mm each), and the stripe choice is a ONE-TIME setup, not a per-energy selection. The 24 angstrom stripe is the in-beam one (inferred from the Bragg-arm geometry: all six Mono energies cluster at d ~ 24 angstrom); the 13.8 angstrom stripe is never calibrated into store_0. The lateral X motors 2bma:m25 / m28 are constant alignment positions in both modes (ENERGY-5), not stripe selectors. So CORA records the two-stripe fact as a documentary block on the Monochromator descriptor (stripes list + active_stripe) and deliberately models NO DMM stripe-selector axis: there is no per-energy degree of freedom to model. This is the second Pink-cluster slice, data-only (no code, no scenario change). Inventory + the answered ENERGY-6 question row updated. Addresses ENERGY-6 (#255). Co-Authored-By: Claude Opus 4.8 --- deployments/2-bm/beamline.yaml | 4 ++++ docs/deployments/2-bm/inventory.md | 2 +- docs/deployments/2-bm/questions.md | 3 +-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/deployments/2-bm/beamline.yaml b/deployments/2-bm/beamline.yaml index 612442802b..4981448728 100644 --- a/deployments/2-bm/beamline.yaml +++ b/deployments/2-bm/beamline.yaml @@ -196,6 +196,10 @@ conditioning-optics: inserted_mm: 0.0 # Mono: DMM Y motors in, crystals in the beam retracted_mm: -10.0 # Pink: DMM Y motors out, beam passes straight through active: inserted # current operational state + stripes: # ENERGY-6 (#255): the DMM substrate carries two W-B4C/Si multilayer stripes (5 nm Cr adhesion), 4 mm apart, 140 x 44 mm each; stripe choice is one-time setup, NOT per-energy, so no selector is modeled (item_021) + - { period_angstrom: 24.0, layer_pairs: 200 } + - { period_angstrom: 13.8, layer_pairs: 150 } + active_stripe: 24.0 # period (angstrom) of the in-beam stripe; inferred from Bragg-arm geometry (all 6 Mono energies cluster at d~24A, ENERGY-1). The 13.8A stripe is never calibrated into store_0; switching = a 4 mm lateral substrate move + a full recalibration, not part of any current move (m25/m28 are constant alignment X in both modes, ENERGY-5) confirm: true note: > Energy is set by the energy-change IOC as a discrete coordinated move: diff --git a/docs/deployments/2-bm/inventory.md b/docs/deployments/2-bm/inventory.md index 4d91577e72..6e9575198b 100644 --- a/docs/deployments/2-bm/inventory.md +++ b/docs/deployments/2-bm/inventory.md @@ -222,7 +222,7 @@ Configured Mono energies (the curve x-points, real): 13.374, 13.574, 18.0, 20.0, - Slit aperture is held constant at 20 mm; only the centre tracks the beam walk (non-monotonically). The centre and aperture are modelled as derived axes: `SampleSlit_VerticalCenter` (`Aggregation` `MidRange`) and `SampleSlit_VerticalAperture` (`Aggregation` `Difference`) over the two blades. `Aggregation` is one-way (computed from constituents), so they are read-only views. The rules declare the relationship; binding the two specific blades via constituent port wiring (the hexapod-pose pattern) is deferred with the rest of the per-facet conduct wiring. - DMM insert/bypass (MODE-2): the DMM is physically inserted in Mono and retracted in Pink. This two-state, mode-keyed position is NOT a per-energy curve; it is the `dmm_insertion` setting on the `Monochromator` (closed enum `inserted` | `retracted`, the `Table.axis_layout` pattern), with the three DMM Y motors (`2bma:m26` / `m27` / `m29`, driven together to `0` in / `-10` mm out) documentary in `beamline.yaml`. The coordinated move that drives it is the deferred `beam_mode_change` (MODE-3 / MIRROR-1). - Not energy axes: `crystal2_z` (M2 Z, `2bma:m8`) is a setup translation the IOC does not drive; the mirror is held constant in Mono. Neither carries a Mono curve. -- DMM lateral stripe not yet modelled: substrate has two multilayer periods (13.8 / 24 angstrom) on stripes 4 mm apart; upstream/downstream X motors (`2bma:m25` / `2bma:m28`) may select per energy band. Operator-facing selection vs fixed setup is open (`ENERGY-6`). +- DMM substrate stripe is a one-time setup, not a per-energy selector (ENERGY-6, settled): the substrate carries two W-B4C/Si multilayer stripes (periods 24 and 13.8 angstrom, 4 mm apart), recorded as the `Monochromator` `stripes` list with `active_stripe=24.0` in `beamline.yaml`. The 24 angstrom stripe is the in-beam one (inferred from Bragg-arm geometry); the 13.8 angstrom stripe is never calibrated into `store_0`. The lateral X motors `2bma:m25` / `2bma:m28` are constant alignment positions in both modes (ENERGY-5), not stripe selectors, so CORA models no DMM stripe-selector axis. Switching stripes would be a 4 mm lateral move plus a full recalibration, outside any current move. - Curves carry the REAL saved `store_0` positions (ENERGY-1/2, FLAG-1): full 6-energy Mono curves plus parked Pink curves. Runtime `eval_lookup_table` is wired; out-of-range refuses (`extrapolation_kind=Error`, staff-confirmed ENERGY-4: the inter-mode band 25.584-30 keV is not bridgeable by interpolation). - Recalibration updates these curves in place: the `energy_characterization` Procedure (channel-cut rocking curve, item_022) re-saves the corrected positions as a new revision of the affected `energy_position_curve`, `MeasuredSource`-cited, preserving the prior revision as history. There is no separate energy offset (`ENERGY-8`). diff --git a/docs/deployments/2-bm/questions.md b/docs/deployments/2-bm/questions.md index 7db09b9118..ffcf94c575 100644 --- a/docs/deployments/2-bm/questions.md +++ b/docs/deployments/2-bm/questions.md @@ -98,11 +98,10 @@ The NV200D/NET piezo (now `ApertureFineDrive`) fine-positions the coded `Apertur ## Energy and the optics -On an energy change the DMM monochromator, its Bragg arms, and the tracking slits move together to saved per-energy positions (now recorded). The remaining items cover the multilayer stripe selection and the channel-cut calibration crystal. +On an energy change the DMM monochromator, its Bragg arms, and the tracking slits move together to saved per-energy positions (now recorded). The remaining item covers the channel-cut calibration crystal. | ID | Priority | Question | CORA assumes | Already done? | Resolves | | --- | --- | --- | --- | --- | --- | -| ENERGY-6 | `Nice-to-have` | Per the [DMM page](https://docs2bm.readthedocs.io/en/latest/source/ops/item_021.html) the monochromator substrate carries two multilayer stripes with different periods (13.8 and 24 angstrom, 4 mm apart). Is the active stripe selected per energy by a lateral crystal translation (the upstream / downstream X motors `2bma:m25` / `2bma:m28`, today folded into `ENERGY-5`), and which stripe serves which energies in the Mono menu (13.374 to 25.584 keV)? If it is an operator-facing per-energy selection rather than a fixed setup, CORA would model it as a named DMM stripe selector, the monochromator counterpart of the mirror coating stripe (`MIRROR-1`). | two stripes exist; no DMM stripe / d-spacing selector modelled; `2bma:m25` / `2bma:m28` lateral X carried only as unframed alignment motors | not yet | [Energy-tracking optic axes](inventory.md#energy-tracking-optic-axes) | | ENERGY-7 | `Nice-to-have` | Is energy calibration via a channel-cut crystal current 2-BM practice, and which crystal (its lattice spacing 2d; the [calibration page](https://docs2bm.readthedocs.io/en/latest/source/ops/item_022.html) lists 3.84 angstrom)? Is the crystal a removable reference standard (CORA models it as a calibration Subject, like the resolution phantom) or installed equipment, and on what rotation stage is it rocked? | modelled as the `energy_characterization` Procedure with the crystal as a calibration Subject; current practice, crystal, and 2d unconfirmed | yes | [Procedures](procedures.md) | ## Filters and the mirror stripe