Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions doc/plan_stubs/redefining.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ def my_plan():
yield from redefine_motor(motor, 0.)
```

By default, the {py:obj}`redefine_motor <ibex_bluesky_core.plan_stubs.redefine_motor>`
plan stub sleeps for 1 second after redefining the motor. This avoids race conditions, where a motor is moved too soon
after being redefined to a new position, and the redefined position has not yet been read back from the controller.
This behaviour can be controlled with the `sleep` keyword argument to
{py:obj}`redefine_motor <ibex_bluesky_core.plan_stubs.redefine_motor>`.

## `redefine_refl_parameter`

The {py:obj}`ibex_bluesky_core.plan_stubs.redefine_refl_parameter` plan stub can be used to redefine the current
Expand Down
7 changes: 6 additions & 1 deletion src/ibex_bluesky_core/plan_stubs.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,9 @@ def call_qt_aware(
return cast(T, (yield Msg(CALL_QT_AWARE_MSG_KEY, func, *args, **kwargs)))


def redefine_motor(motor: Motor, position: float) -> Generator[Msg, None, None]:
def redefine_motor(
motor: Motor, position: float, *, sleep: float = 1
) -> Generator[Msg, None, None]:
"""Redefines the current positions of a motor.

Note:
Expand All @@ -97,12 +99,15 @@ def redefine_motor(motor: Motor, position: float) -> Generator[Msg, None, None]:
Args:
motor: The motor to set a position on.
position: The position to set.
sleep: An amount of time to sleep, in seconds, after redefining. Defaults to 1 second.
This avoids race conditions where a motor is redefined and then immediately moved.

"""
logger.info("Redefining motor %s to %s", motor.name, position)

def make_motor_usable() -> Generator[Msg, None, None]:
yield from bps.abs_set(motor.set_use_switch, UseSetMode.USE)
yield from bps.sleep(sleep)

def inner() -> Generator[Msg, None, None]:
yield from bps.abs_set(motor.set_use_switch, UseSetMode.SET)
Expand Down