Repository navigation
Forward stop() in devices that move motors from set() - #118
Open
Anthony Sligar (sligara7) wants to merge 1 commit into
Open
Anthony Sligar (sligara7) wants to merge 1 commit into
Anthony Sligar (sligara7) wants to merge 1 commit into
Conversation
…tive camera move Without stop() the RunEngine cannot stop these motors on a pause or abort. Assisted-by: copilot:claude-opus-5-5
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Stopping the camera selector between objectives leaves its active move status pending indefinitely.
1 open issue
What changed in this PR
Adds motor-stop forwarding to four movable device wrappers so the RunEngine can stop their underlying motors during pause or abort, following the approach used for FrontEndSlit.
Changes:
- Adds
stop()methods toSlits,Filter,DCLM, andFOV_2_4_mm_Camera. - Forwards stop commands concurrently for wrappers controlling multiple motors.
- Adds parameterized mock tests for stop support and motor-stop commands.
| File | Description |
|---|---|
tests/test_movable_wrappers_stop.py |
Tests stop forwarding for all four wrappers. |
src/hextools/photon_delivery_system/slits.py |
Stops all four slit blades concurrently. |
src/hextools/photon_delivery_system/filters.py |
Forwards stop to the filter motor. |
src/hextools/photon_delivery_system/dclm.py |
Stops both motors used for beam-mode changes. |
src/hextools/motors.py |
Forwards camera stop to the objective selector. |
Review effort: Balanced
Comment on lines
+212
to
+214
| async def stop(self, success: bool = False): | ||
| """Stop the objective selector, which the IOC moves to the chosen objective.""" | ||
| await self.obj_selector.stop() |
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Slits,Filter,DCLMandFOV_2_4_mm_Cameramove motors from their ownset(). They had nostop(), so the RunEngine (which only stopsStoppableobjects it moved) could not stop those motors on a pause or abort. Each now forwardsstop()to the motors itsset()moves:Slits: the four bladesFilter: the filter motorDCLM: crystal 1 vertical translation and the cooled beam stop (the beam-mode change)FOV_2_4_mm_Camera: the objective selectorSame fix as
FrontEndSlitin #117 (found in its review). #116 touchesfilters.pytoo; whichever merges second needs a small rebase.Verification: mock tests (
tests/test_movable_wrappers_stop.py, failing before the change); full suite passes except the knowntest_detector_viewer_axesenvironment failure. Not tested on the beamline.