Skip to content

Materialize the Diffractometer Assembly at Bernina + Cristallina (SwissFEL fixtures)#543

Merged
xmap merged 2 commits into
mainfrom
worktree-bernina-diffractometer-fixture
Jul 4, 2026
Merged

Materialize the Diffractometer Assembly at Bernina + Cristallina (SwissFEL fixtures)#543
xmap merged 2 commits into
mainfrom
worktree-bernina-diffractometer-fixture

Conversation

@xmap

@xmap xmap commented Jul 4, 2026

Copy link
Copy Markdown
Owner

Summary

Materializes the catalog Diffractometer Assembly at two SwissFEL beamlines, taking it from one materialization (8-ID) to three independent facility bindings past the rule-of-three that graduated the blueprint. Both scenarios bind the real slot-tagged devices from each beamline's descriptor (DIFF-1); nothing fabricated.

  • Bernina (test_bernina_diffractometer_setup.py): two platforms, so ONE Assembly materializes into TWO Fixtures. GPS binds goniometer + reciprocal-space with no detector arm (ZeroOrMore detector_arm at count 0); XRD binds goniometer + detector-arm RotaryStage + reciprocal-space (count 1). The "two fixtures differing only in whether a detector arm is mounted" shape is the reusability the blueprint exists to express.
  • Cristallina (test_cristallina_diffractometer_setup.py): DM1 binds all three slots (full three-slot Fixture). DM2 is deliberately NOT materialized: the descriptor carries only its goniometer, its PVs are disabled (DISABLED-1), and it has no reciprocal-space Asset for the Exactly1 slot, so binding it would mean inventing hardware the source does not carry. Disciplined partial materialization.

Why

The blueprint was earned across 4-ID + 8-ID and graduated to the catalog, but only 8-ID had materialized it. These are the two SwissFEL beamlines whose descriptors carry every mandatory slot's Asset, so they can be materialized faithfully to source. Deferred descriptor items (hexapods, robots/ROBOT-1, lasers/LASER-1, DIFF-2 solver partition, magnet/MAG-1, MX stage/SAMPLE-1) are left out of scope and noted in each docstring.

Test plan

  • Both scenarios pass end-to-end against Postgres
  • All three diffractometer scenarios (8-ID + Bernina + Cristallina) run green together (no regression)
  • Full 91-test scenarios collection passes (docstring-taxonomy validator over every scenario)
  • ruff check + ruff format --check clean; pre-commit pyright passes

🤖 Generated with Claude Code

xmap and others added 2 commits July 4, 2026 17:27
…o Fixtures)

The Diffractometer blueprint was earned across 4-ID + 8-ID and graduated to
the catalog, but only 8-ID materialized it. Prove it composes at a non-APS
facility from the assets Bernina's descriptor actually carries: its GPS and
XRD platforms bind ONE Assembly into TWO Fixtures, exercising the ZeroOrMore
detector_arm slot at count 0 (GPS, no modelled arm) and count 1 (XRD delta),
which is the reusability the blueprint exists to express.

Co-Authored-By: Claude <noreply@anthropic.com>
…cility)

Third independent binding of the catalog Diffractometer blueprint (after 8-ID
and Bernina), from Cristallina's descriptor. DM1 binds all three slots
(goniometer + detector arm + reciprocal space). DM2 is deliberately not
materialized: the descriptor carries only its goniometer, its PVs are disabled
(DISABLED-1), and it has no reciprocal-space Asset for the Exactly1 slot, so
binding it would mean inventing hardware the source does not carry.

Co-Authored-By: Claude <noreply@anthropic.com>
@xmap xmap changed the title Materialize the Diffractometer Assembly at Bernina (twin-platform, two Fixtures) Materialize the Diffractometer Assembly at Bernina + Cristallina (SwissFEL fixtures) Jul 4, 2026
@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 4932376 into main Jul 4, 2026
16 checks passed
@xmap xmap deleted the worktree-bernina-diffractometer-fixture branch July 4, 2026 14: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