Ophyd¶
Ophyd represents hardware in Python as hierarchical objects grouping
together related values from the underlying control system. This
structure allows ophyd
to provide
- A consistent high-level interface across a wide-range of devices (
which is used by
bluesky
). - Direct low-level access to the underlying controls system for debugging and development.
By presenting a uniform interface experimental plans can be agnostic
to the details of the underlying hardware which simplifies writing
experimental plans. For example, every device has a read
method
which, somewhat tautologically, reads the device. It is up to the
object to have an understanding of which of its signals are
interesting and should be included in the reading, to reach out and
fetch those values, and then to format them into a consistent format.
Similarly, if a device can be ‘moved’ (in the most general sense) then
it must provide a set
method which is responsible for knowing how
to translate the user input into values that the control system
understands, setting those values, and then returning to the caller an
object which will signal when the requested move is complete. This
provides a direct way to implement software pseudo motors.
ophyd
contains a number of pre-built devices for common
hardware (and IOCs) as well as the tools to build custom devices.
Currently ophyd only support EPICS
via pyepics
(because it
is what we use at NSLS-II), however the library is designed to be
control-system agnostic and we are looking for a partner to port it to
other control systems.