Skip to content

Materialize the Diffractometer Assembly at four more beamlines (Diamond + ESRF)#544

Merged
xmap merged 1 commit into
mainfrom
worktree-softxray-diffractometer-fixtures
Jul 4, 2026
Merged

Materialize the Diffractometer Assembly at four more beamlines (Diamond + ESRF)#544
xmap merged 1 commit into
mainfrom
worktree-softxray-diffractometer-fixtures

Conversation

@xmap

@xmap xmap commented Jul 4, 2026

Copy link
Copy Markdown
Owner

Summary

Extends the catalog Diffractometer Assembly from 3 facility bindings to 7, all from real descriptor data (DIFF-1). Four new per-deployment scenarios:

  • Diamond i06 (test_i06_diffractometer_setup.py) - diffraction-dichroism circles
  • ESRF ID32 (test_id32_diffractometer_setup.py) - BLISS DiffE4CH four-circle RIXS
  • Diamond i10 (test_i10_diffractometer_setup.py) - RASOR resonant-scattering
  • Diamond i19 (test_i19_diffractometer_setup.py) - Newport kappa four-circle

Each binds a Diffractometer goniometer + a ReciprocalSpace PseudoAxis (both named in the descriptor and DIFF-tagged). The detector arm is folded into the goniometer circle set in each descriptor rather than modelled as a separate RotaryStage Asset, so the ZeroOrMore detector_arm slot binds at count 0 (as at Bernina GPS).

Why

The blueprint was earned on the hard X-ray six-circle (4-ID + 8-ID). These bindings prove the one composition contract spans soft X-ray resonant-scattering/dichroism instruments and kappa geometry too, not just the six-circle it started on, across two more facilities (Diamond + ESRF). Nothing fabricated: every Asset maps to a named, DIFF-tagged device in each beamline.yaml.

Note: the RotaryStage detector_arm Family is defined in each scenario so the blueprint can reference it even where no arm Asset is bound. A Family is a federation-shared device class, so defining it does not assert the beamline owns a RotaryStage device.

Test plan

  • All four scenarios pass end-to-end against Postgres
  • Run green alongside the existing 8-ID/Bernina/Cristallina diffractometer scenarios (no regression)
  • Full 95-test scenarios collection passes (docstring-taxonomy validator over every scenario)
  • ruff check + ruff format clean; pre-commit pyright passes

🤖 Generated with Claude Code

…nd + ESRF)

Extends the catalog Diffractometer blueprint from the hard X-ray six-circle it
was earned on (4-ID + 8-ID) and the SwissFEL platforms to four further
independent bindings from real descriptor data: Diamond i06 (diffraction-
dichroism), ESRF ID32 (E4CH RIXS), Diamond i10 (RASOR), and Diamond i19 (Newport
kappa four-circle). Each binds a goniometer + reciprocal-space PseudoAxis, with
the detector arm folded into the goniometer circle set (detector_arm at count 0,
as at Bernina GPS). Proves the one composition contract spans soft X-ray
resonant-scattering and kappa geometries, not just the six-circle it started on.

The RotaryStage detector_arm Family is defined so the blueprint can reference it
even where no arm Asset is bound; a Family is a federation-shared device class, so
defining it does not assert the beamline owns a RotaryStage device.

Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jul 4, 2026

Copy link
Copy Markdown

Coverage report

This PR does not seem to contain any modification to coverable code.

@xmap xmap merged commit cd248f8 into main Jul 4, 2026
16 checks passed
@xmap xmap deleted the worktree-softxray-diffractometer-fixtures branch July 4, 2026 15:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant