Devices with Built-in Support

These devices are have ready-made classes in Python. To configure them, the user need only provide a PV prefix and a name.


Create an EpicsMotor to communicate with a single EPICS motor record:

from ophyd import EpicsMotor

# the two-theta motor
tth = EpicsMotor('XF:28IDC-ES:1{Dif:1-Ax:2ThI}Mtr', name='tth')

Creating ‘bundles’ of motors is very common so we also have a helper class that tweaks the default behavior of read_attrs, configuration_attrs, and hints

This must be sub-classed (like Device) to be useful.

from ophyd import MotorBundle, EpicsMotor
from ophyd import Component as Cpt

class StageXY(MotorBundle):
    x = Cpt(EpicsMotor, ':X')
    y = Cpt(EpicsMotor, ':Y')

stage = StageXY('STAGE_PV', name='stage')

ophyd.epics_motor.EpicsMotor([prefix, kind, …])

An EPICS motor record, wrapped in a Positioner

ophyd.epics_motor.MotorBundle([prefix, …])

Sub-class this to device a bundle of motors


Create an EpicsScaler to control an EPICS scaler record:

from ophyd import EpicsScaler
scaler = EpicsScaler('XF:28IDC-ES:1{Sclr:1}', name='tth')

ophyd.scaler.EpicsScaler(*args, **kwargs)

SynApps Scaler Record interface

EpicsMCA and EpicsDXP

MCA records and DXP-based devices are also supported, through the EpicsMCA and EpicsDXP devices.

ophyd.mca.EpicsMCARecord(*args, **kwargs)

SynApps MCA Record interface

ophyd.mca.EpicsDXP([prefix, kind, …])

All high-level DXP parameters for each channel