ibex_bluesky_core.plans

Generic plans.

Submodules

muons

Plans specific to Muon beamlines.

reflectometry

Plans specific to Reflectometry beamlines.

sans

Plans specific to SANS beamlines.

Members

adaptive_scan

Scan the DAE against a block using an adaptive scan.

motor_adaptive_scan

Wrap adaptive_scan() plan and create a block_mot and a DAE object.

motor_scan

Wrap our scan() plan and create a block_mot and a DAE object.

polling_plan

Move to a destination but drop updates from readable if motor position has not changed.

scan

Scan the DAE against a Movable.

ibex_bluesky_core.plans.adaptive_scan(dae: SimpleDae, block: NamedMovable[float], start: float, stop: float, min_step: float, max_step: float, target_delta: float, *, model: FitMethod | None = None, periods: bool = True, save_run: bool = False, rel: bool = False) Generator[Msg, None, ISISCallbacks][source]

Scan the DAE against a block using an adaptive scan.

This will scan coarsely until target_delta occurs, then it will go back and perform finer scans.

Parameters:
  • dae – the simple DAE object to use.

  • block – a movable to move during the scan.

  • start – the starting position of the block.

  • stop – the final position of the block.

  • min_step – smallest step for fine regions.

  • max_step – largest step for coarse regions.

  • target_delta – desired fractional change in detector signal between steps

  • model – the fit method to use.

  • periods – whether or not to use software periods.

  • save_run – whether or not to save run.

  • rel – whether or not to scan around the current position or use absolute positions.

Returns:

an ibex_bluesky_core.callbacks.ISISCallbacks instance.

ibex_bluesky_core.plans.motor_adaptive_scan(block_name: str, start: float, stop: float, min_step: float, max_step: float, target_delta: float, *, frames: int, det: int, mon: int, model: FitMethod | None = None, pixel_range: int = 0, periods: bool = True, save_run: bool = False, rel: bool = False) Generator[Msg, None, ISISCallbacks][source]

Wrap adaptive_scan() plan and create a block_mot and a DAE object.

This only works with blocks that are pointing at motor records. This is really just a wrapper around ibex_bluesky_core.plans.adaptive_scan()

Parameters:
  • block_name – the name of the block to scan.

  • start – the starting position of the block.

  • stop – the final position of the block.

  • min_step – smallest step for fine regions.

  • max_step – largest step for coarse regions.

  • target_delta – desired fractional change in detector signal between steps.

  • frames – the number of frames to wait for when scanning.

  • det – the detector number.

  • mon – the monitor number.

  • pixel_range – the range of pixels to scan over, using det as a centred pixel.

  • model – the fit method to use.

  • periods – whether or not to use software periods.

  • save_run – whether or not to save run.

  • rel – whether or not to scan around the current position or use absolute positions.

Returns:

an ibex_bluesky_core.callbacks.ISISCallbacks instance.

ibex_bluesky_core.plans.motor_scan(block_name: str, start: float, stop: float, num: int, *, frames: int, det: int, mon: int, model: FitMethod | None = None, pixel_range: int = 0, periods: bool = True, save_run: bool = False, rel: bool = False) Generator[Msg, None, ISISCallbacks][source]

Wrap our scan() plan and create a block_mot and a DAE object.

This only works with blocks that are pointing at motor records. This is really just a wrapper around ibex_bluesky_core.plans.scan()

Parameters:
  • block_name – the name of the block to scan.

  • start – the starting position of the block.

  • stop – the final position of the block.

  • num – the number of points to make.

  • frames – the number of frames to wait for when scanning.

  • det – the detector number.

  • mon – the monitor number.

  • pixel_range – the range of pixels to scan over, using det as a centred pixel.

  • model – the fit method to use.

  • periods – whether or not to use software periods.

  • save_run – whether or not to save run.

  • rel – whether or not to scan around the current position or use absolute positions.

Returns:

an ibex_bluesky_core.callbacks.ISISCallbacks instance.

ibex_bluesky_core.plans.polling_plan(motor: NamedReadableAndMovable, readable: Readable[Any], destination: float) Generator[Msg, None, None][source]

Move to a destination but drop updates from readable if motor position has not changed.

Parameters:
  • motor – the motor to move.

  • readable – the readable to read updates from, but drop if motor has not moved.

  • destination – the destination position.

Returns:

None

If we just used bp.scan() with a readable that updates more frequently than a motor can register that it has moved, we would have lots of updates with the same motor position, which may not be helpful.

ibex_bluesky_core.plans.scan(dae: SimpleDae, block: NamedMovable[float], start: float, stop: float, num: int, *, model: FitMethod | None = None, periods: bool = True, save_run: bool = False, rel: bool = False) Generator[Msg, None, ISISCallbacks][source]

Scan the DAE against a Movable.

Parameters:
  • dae – the simple DAE object to use.

  • block – a movable to move during the scan.

  • start – the starting position.

  • stop – the final position.

  • num – the number of points to make.

  • model – the fit method to use.

  • periods – whether or not to use software periods.

  • save_run – whether or not to save run.

  • rel – whether or not to scan around the current position or use absolute positions.