MIRROR-1: yes to both — 2bma:m3 is held at one fixed position in Mono (m3 = 1.0 mm, stripe a Pt, all 6 Mono energies) and swept per energy in Pink (m3 = 3.039 / 13.0 / 39.0 / 49.0 at 30 / 40 / 50 / 60 keV, with coordinated table-X at 60 keV); stripe-to-position map below (inferred from Bragg λ = 2d sin θ cross-check; operator confirmation pending)
MIRROR-1: All three sub-questions answered yes, with a concrete stripe-to-position map.
(1) Mono mode — held at one fixed position
From the live energy2bm.json store_0 (decarlof/energy fork, per ENERGY-3 / cora#252), all 6 Mono-calibrated energies carry identical mirror-side positions:
| Mono energy |
m3 (m1_horizontal) |
m1mox / m1m2x (table X) |
m1angl |
m1avg |
| 13.374 → 25.584 keV (all 6) |
1.0 mm |
8.0 / 8.0 mm |
2.615 mrad |
0.0 mm |
So the mirror is held in a fixed configuration in Mono — the IOC re-asserts the same five values on every Mono energy change, the DMM downstream is what does the per-energy monochromatic selection. The held stripe is a (Pt single-layer) per the stripe-to-position map below.
(2) Pink mode — swept per energy
Pink-mode values vary per energy for m3 and (at the highest energy) table X:
| Pink energy |
m3 (m1_horizontal) |
m1mox / m1m2x (table X) |
m1angl |
m1avg |
| 30.000 |
3.039 mm |
8.0 / 8.0 |
2.615 mrad |
0.0 |
| 40.000 |
13.0 mm |
10.0 / 10.0 |
2.615 mrad |
0.0 |
| 50.000 |
39.0 mm |
10.0 / 10.0 |
2.615 mrad |
0.0 |
| 60.000 |
49.0 mm |
29.0 / 29.0 mm |
2.615 mrad |
0.0 |
Mirror angle (m1angl = 2.615 mrad) is constant across all 10 calibrated energies — Mono and Pink — so the per-energy variation in Pink mode is purely a lateral substrate translation (m3) plus a coordinated table-X extension at the highest energy.
Per ENERGY-5 / cora#254: the DMM lateral X motors (m25 / m28) are NOT involved in stripe selection (they're alignment positions); the mirror's m3 IS the stripe selector.
(3) Stripe-to-position map
Cross-checked the four m3 positions against the Bragg resonance condition λ = 2d sin θ at the operational pink-mode mirror angle (m1angl = 2.615 mrad):
| Stripe |
Coating |
d-spacing |
m3 [mm] |
Table X [mm] |
Pink calibrated energy |
Bragg-calc resonance |
| a |
5 nm Pt single-layer |
n/a (single layer) |
1.0 (Mono) / 3.039 (Pink 30) |
8.0 |
All 6 Mono + Pink 30 |
Pt critical-angle cutoff ≈ 21 keV at 2.615 mrad; broadband below cutoff |
| b |
W(1.2 nm) / Si(5.37 nm) × 50 |
6.57 nm |
13.0 |
10.0 |
Pink 40 |
36.1 keV (slight detuning from 40 keV) |
| c |
W(1.2 nm) / Si(3.56 nm) × 50 |
4.76 nm |
39.0 |
10.0 |
Pink 50 |
49.8 keV (clean match) |
| d |
W(1.2 nm) / Si(2.73 nm) × 50 |
3.93 nm |
49.0 + table-X coord |
29.0 |
Pink 60 |
60.3 keV (clean match) |
The Bragg-resonance values matching the calibrated energies to within ~10% (and within 1% for stripes c and d) is strong evidence for the stripe assignments. Stripe a is used both for Mono (held) and Pink 30 keV (just slightly past the Pt critical-angle cutoff, presumably operating in the Pt-reflectivity rolloff band). The Pt → stripe b → c → d sequence walks up in energy as expe
cted for a multilayer mirror selector.
Operator confirmation worth getting:
- Visual confirmation that
m3 = 1.0 mm puts stripe a in the beam, m3 = 13 mm puts stripe b, etc.
- Stripe widths and the inter-stripe spacing on the substrate (would explain the 10/26/10 mm jumps in
m3).
- Whether the slight detuning at 40 keV (calc 36 keV vs calibrated 40 keV) is intentional (perhaps the operator picked a working-point on the multilayer reflectivity curve rather than the peak).
NOT freely operator-selectable
The cora question asks whether stripe selection is "a freely-selectable discrete pick" — operationally, no. The energy-change IOC re-asserts the calibrated m3 value on every energy change (see ENERGY-3 / cora#252); the table determines which stripe sits at which (mode, energy) tuple. Switching to a different stripe at a given energy me
ans either:
- Adding a new calibrated energy at the target stripe via
energy add --energy <value> (per ENERGY-8 / cora#257 and the follow-up comment on cora#256).
- Manually driving
m3 outside the energy-change flow (operationally rare; would also need a compatible mirror angle and possibly recalibration of the downstream DMM if in Mono).
CORA-side application
Cora's existing assumption ("energy/mode-dependent stripe; held in Mono, swept in Pink; no stripe → position map on file") is structurally correct; this ticket fills in the position map:
- Mode-dependent stripe selector axis: model
m3 as the active stripe selector. In Mono, the value is constant (1.0 mm); in Pink, it's a 4-point per-energy curve. Same shape as the per-energy axes for m30 / m31 / m32 (DMM Bragg arms / M2 Y) — see ENERGY-1 / cora#249.
- Coordinated table-X:
m1mox / m1m2x (mapped onto 2bma:m1 and 2bma:m4) need to be modelled together with m3 for the Pink 60 keV case — they jump from 10.0 to 29.0 mm coordinated with the m3 = 49.0 move.
- Stripe-to-position map as a static field on the M1 Asset: each stripe a / b / c / d with its d-spacing, the m3-range it occupies (~3.039 for a / ~13 for b / ~39 for c / ~49 for d, ± stripe half-width), and the calibrated energy it covers in Pink. This is the analogue of how cora modelled the DMM stripe geometry in ENERGY-6 / cora#255.
- Mirror angle (
m1angl) constant at 2.615 mrad: not a per-energy variable for the mirror itself (the per-energy "angle" is encoded in the DMM Bragg arms downstream in Mono; in Pink there's no per-energy angle change at all — the stripe selection IS the per-energy degree of freedom).
Downstream alignment
The Mirror M1 in-vacuum stripe selector block in item_020.rst (latest commit pending) now carries:
- The 4-stripe definitions (already present).
- A new "Stripe-to-position map" sub-section with the table above (m3 + table-X values per stripe per mode, plus the Bragg-calc cross-check).
- Explicit Mono-vs-Pink behaviour annotations.
- A note that the selection is NOT freely operator-selectable at run time.
Cross-references
- ENERGY-3 / cora#252 — saved-table mechanism (the
m3 values per Pink energy are stored in energy2bm.json store_0 and loaded on every energy change).
- ENERGY-5 / cora#254 — DMM
m25 / m28 are NOT stripe selectors (cora's parenthetical was on the DMM side; the stripe selector is on the Mirror, this issue).
- ENERGY-6 / cora#255 — DMM substrate has its own two stripes (13.8 / 24 Å), independent question from the mirror stripes here.
- ENERGY-8 / cora#257 — calibration-via-
energy-add mechanism (how to add a new (mode, energy, stripe) calibrated point if needed).
- [MODE-3 / cora#TBD] — the cora question parallel to this one but framed as a beam-mode rather than mirror-stripe question; same Pink-mode
m3 + table-X data.
Net
MIRROR-1 answer: yes to both — stripe held in Mono (m3 = 1.0, stripe a Pt, across all 6 Mono energies) and swept per energy in Pink (m3 walks 3.039 → 13.0 → 39.0 → 49.0 at 30 / 40 / 50 / 60 keV, with coordinated table-X kicking in at 60 keV). Selection is calibration-table-driven (re-asserted at every energy change), not freely operator-selectable at run time.
Stripe-to-position map confirmed via Bragg resonance cross-check at θ = 2.615 mrad mirror angle.
MIRROR-1: yes to both —
2bma:m3is held at one fixed position in Mono (m3 = 1.0mm, stripe a Pt, all 6 Mono energies) and swept per energy in Pink (m3= 3.039 / 13.0 / 39.0 / 49.0 at 30 / 40 / 50 / 60 keV, with coordinated table-X at 60 keV); stripe-to-position map below (inferred from Braggλ = 2d sin θcross-check; operator confirmation pending)MIRROR-1: All three sub-questions answered yes, with a concrete stripe-to-position map.
(1) Mono mode — held at one fixed position
From the live
energy2bm.jsonstore_0(decarlof/energy fork, per ENERGY-3 / cora#252), all 6 Mono-calibrated energies carry identical mirror-side positions:m3(m1_horizontal)m1mox/m1m2x(table X)m1anglm1avgSo the mirror is held in a fixed configuration in Mono — the IOC re-asserts the same five values on every Mono energy change, the DMM downstream is what does the per-energy monochromatic selection. The held stripe is a (Pt single-layer) per the stripe-to-position map below.
(2) Pink mode — swept per energy
Pink-mode values vary per energy for
m3and (at the highest energy) table X:m3(m1_horizontal)m1mox/m1m2x(table X)m1anglm1avgMirror angle (
m1angl = 2.615 mrad) is constant across all 10 calibrated energies — Mono and Pink — so the per-energy variation in Pink mode is purely a lateral substrate translation (m3) plus a coordinated table-X extension at the highest energy.Per ENERGY-5 / cora#254: the DMM lateral X motors (
m25/m28) are NOT involved in stripe selection (they're alignment positions); the mirror'sm3IS the stripe selector.(3) Stripe-to-position map
Cross-checked the four
m3positions against the Bragg resonance conditionλ = 2d sin θat the operational pink-mode mirror angle (m1angl = 2.615 mrad):m3[mm]The Bragg-resonance values matching the calibrated energies to within ~10% (and within 1% for stripes c and d) is strong evidence for the stripe assignments. Stripe a is used both for Mono (held) and Pink 30 keV (just slightly past the Pt critical-angle cutoff, presumably operating in the Pt-reflectivity rolloff band). The Pt → stripe b → c → d sequence walks up in energy as expe
cted for a multilayer mirror selector.
Operator confirmation worth getting:
m3 = 1.0 mmputs stripe a in the beam,m3 = 13 mmputs stripe b, etc.m3).NOT freely operator-selectable
The cora question asks whether stripe selection is "a freely-selectable discrete pick" — operationally, no. The energy-change IOC re-asserts the calibrated
m3value on every energy change (see ENERGY-3 / cora#252); the table determines which stripe sits at which (mode, energy) tuple. Switching to a different stripe at a given energy means either:
energy add --energy <value>(per ENERGY-8 / cora#257 and the follow-up comment on cora#256).m3outside the energy-change flow (operationally rare; would also need a compatible mirror angle and possibly recalibration of the downstream DMM if in Mono).CORA-side application
Cora's existing assumption ("energy/mode-dependent stripe; held in Mono, swept in Pink; no stripe → position map on file") is structurally correct; this ticket fills in the position map:
m3as the active stripe selector. In Mono, the value is constant (1.0 mm); in Pink, it's a 4-point per-energy curve. Same shape as the per-energy axes form30/m31/m32(DMM Bragg arms / M2 Y) — see ENERGY-1 / cora#249.m1mox/m1m2x(mapped onto2bma:m1and2bma:m4) need to be modelled together withm3for the Pink 60 keV case — they jump from 10.0 to 29.0 mm coordinated with them3 = 49.0move.m1angl) constant at 2.615 mrad: not a per-energy variable for the mirror itself (the per-energy "angle" is encoded in the DMM Bragg arms downstream in Mono; in Pink there's no per-energy angle change at all — the stripe selection IS the per-energy degree of freedom).Downstream alignment
The Mirror M1 in-vacuum stripe selector block in item_020.rst (latest commit pending) now carries:
Cross-references
m3values per Pink energy are stored inenergy2bm.jsonstore_0and loaded on every energy change).m25/m28are NOT stripe selectors (cora's parenthetical was on the DMM side; the stripe selector is on the Mirror, this issue).energy-addmechanism (how to add a new (mode, energy, stripe) calibrated point if needed).m3+ table-X data.Net
MIRROR-1 answer: yes to both — stripe held in Mono (
m3 = 1.0, stripe a Pt, across all 6 Mono energies) and swept per energy in Pink (m3walks 3.039 → 13.0 → 39.0 → 49.0 at 30 / 40 / 50 / 60 keV, with coordinated table-X kicking in at 60 keV). Selection is calibration-table-driven (re-asserted at every energy change), not freely operator-selectable at run time.Stripe-to-position map confirmed via Bragg resonance cross-check at
θ = 2.615 mradmirror angle.