Skip to content

Add the Eurotherm (eurotherm), copied from nslsii#264 - #11

Merged
Anthony Sligar (sligara7) merged 1 commit into
NSLS2:pdf-profile-conversionfrom
sligara7:pdf-conv-06a-eurotherm
Oct 23, 2026
Merged

Anthony Sligar (sligara7) merged 1 commit into
NSLS2:pdf-profile-conversionfrom
sligara7:pdf-conv-06a-eurotherm

Conversation

@sligara7

Copy link
Copy Markdown

Adds eurotherm = Eurotherm3k("XF:28ID1-ES{ET:05}") to the profile: the PDF Eurotherm 3504, an eurotherm3k IOC on xf28id1-ioc2. The old eurotherm3504 is eurotherm.loop1.

  • pdftools/eurotherm3k.py and tests/test_eurotherm3k.py are copied from Add Eurotherm3k ophyd-async device (HXM-1305) nslsii#264 (26efeef), reformatted to pdftools' line length only (same syntax tree; class-docstring lint waived for this file). Temporary: once #264 merges, import it from nslsii.ophyd_async.devices and delete the copy.
  • A new test pins its PV names to the record list in the old 16-eurotherm_HAB.py.

Verified: mock tests (the nslsii device tests, PV names, profile boots in mock mode with eurotherm). Not run on the beamline.

pdftools.eurotherm3k copies nslsii#264 (26efeef) and its tests, reformatted to pdftools' line length only (same syntax tree). It is used until #264 merges; then the profile imports it from nslsii.ophyd_async.devices and this module goes. The profile builds eurotherm on XF:28ID1-ES{ET:05}, the eurotherm3k IOC on xf28id1-ioc2; the old eurotherm3504 is loop1. A test pins its PV names to the old profile's record list.

Assisted-by: copilot:claude-opus-5-5
Copilot AI balanced review requested due to automatic review settings October 23, 2026 23:04
@sligara7
Anthony Sligar (sligara7) merged commit d53ec7e into NSLS2:pdf-profile-conversion Oct 23, 2026
4 checks passed
@sligara7
Anthony Sligar (sligara7) deleted the pdf-conv-06a-eurotherm branch October 23, 2026 23:06

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The recipe-selection PV pairing prevents real connection, and stalled setpoint writes can bypass the move timeout.

2 open issues
What changed in this PR

Adds the PDF Eurotherm 3504 controller to the collection profile using a temporary local copy of the device implementation from NSLS2/nslsii#264.

Changes:

  • Adds a two-loop controller with temperature movement and settling support.
  • Exposes eurotherm in the profile, with loop1 corresponding to the legacy device.
  • Adds mock behavior, PV mapping, and profile startup tests.
File Description
tests/​test_utils.py Checks that mock profile startup exposes eurotherm.
tests/​test_eurotherm3k.py Tests device signals, movement, settling, and legacy PV mappings.
tests/​test_eurotherm_pvs.py Checks PV addresses against the old profile.
src/​pdftools/​profiles/​collection.py Instantiates the beamline Eurotherm controller.
src/​pdftools/​eurotherm3k.py Adds the temporary controller implementation.

Review effort: Balanced

new_position,
self.readback,
in_band,
timeout=timeout(),
Comment on lines +145 to +147
recipe_select: A[
SignalRW[str], PvSuffix.rbv("RECSEL", ":RBV"), Format.CONFIG_SIGNAL
]
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.

2 participants