bluesky.plans.grid_scan#

bluesky.plans.grid_scan(detectors: Sequence[Readable], *args, snake_axes: Iterable | bool | None = None, per_step: Callable[[Sequence[Readable], Movable, Any, Callable[[Sequence[Readable]], Generator[Msg, Any, Mapping[str, Reading]]] | None], Generator[Msg, Any, P]] | Callable[[Sequence[Readable], Mapping[Movable, Any], dict[Movable, Any], Callable[[Sequence[Readable]], Generator[Msg, Any, Mapping[str, Reading]]] | None], Generator[Msg, Any, P]] | None = None, md: dict[str, Any] | None = None) Generator[Msg, Any, str][source]#

Scan over a mesh; each motor is on an independent trajectory.

Parameters:
detectors: list or tuple

list of ‘readable’ objects

``*args``
patterned like (motor1, start1, stop1, num1,

motor2, start2, stop2, num2, motor3, start3, stop3, num3,motorN, startN, stopN, numN)

The first motor is the “slowest”, the outer loop. For all motors except the first motor, there is a “snake” argument: a boolean indicating whether to following snake-like, winding trajectory or a simple left-to-right trajectory.

snake_axes: boolean or iterable, optional

which axes should be snaked, either False (do not snake any axes), True (snake all axes) or a list of axes to snake. “Snaking” an axis is defined as following snake-like, winding trajectory instead of a simple left-to-right trajectory. The elements of the list are motors that are listed in args. The list must not contain the slowest (first) motor, since it can’t be snaked.

per_step: callable, optional

hook for customizing action of inner loop (messages per step). See docstring of bluesky.plan_stubs.one_nd_step() (the default) for details.

md: dict, optional

metadata

See also

bluesky.plans.rel_grid_scan()
bluesky.plans.inner_product_scan()
bluesky.plans.scan_nd()