Devices with Built-in Support
=============================
These devices have ready-made classes in Python. To configure them, the
user need only provide a PV prefix and a name.
EPICS motor
-----------
The EPICS `motor record `_
is supported by the :class:`~ophyd.epics_motor.EpicsMotor` Device in ``ophyd``:
.. code-block:: python
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 :attr:`read_attrs`,
:attr:`configuration_attrs`, and :attr:`hints`
This must be sub-classed (like :class:`~ophyd.device.Device`) to be useful.
.. code-block:: python
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')
.. autosummary::
:toctree: ../generated
ophyd.epics_motor.EpicsMotor
ophyd.epics_motor.MotorBundle
.. _built_in.Epics.Scaler.record:
EPICS Scaler
------------
The EPICS ``scaler`` record ([#scaler]_) is supported by two alternative
``ophyd`` Devices. (You need only choose one of these two.) An important
difference between the :ref:`built_in.EpicsScaler` and the :ref:`built_in.ScalerCH`
Devices is in how each channel's name is represented, as summarized
in the next table:
=========================== ======================================= ====================================================
class channel naming examples
=========================== ======================================= ====================================================
:ref:`built_in.EpicsScaler` numbered ``scaler_channels_chan2``, ``scaler_channels_chan3``
:ref:`built_in.ScalerCH` EPICS scaler record channel name fields ``I0``, ``diode``
=========================== ======================================= ====================================================
.. [#scaler] EPICS ``scaler`` documentation:
https://htmlpreview.github.io/?https://github.com/epics-modules/scaler/blob/master/documentation/scalerRecord.html
.. _built_in.EpicsScaler:
EpicsScaler
+++++++++++
Create an :class:`~ophyd.scaler.EpicsScaler` object to control an EPICS ``scaler`` record ([#scaler]_).
.. code-block:: python
from ophyd import EpicsScaler
scaler = EpicsScaler('XF:28IDC-ES:1{Sclr:1}', name='scaler')
.. autosummary::
:toctree: ../generated
ophyd.scaler.EpicsScaler
.. _built_in.ScalerCH:
ScalerCH
++++++++
Create a :class:`~ophyd.scaler.ScalerCH` object to control an EPICS ``scaler`` record ([#scaler]_).
.. code-block:: python
from ophyd.scaler import ScalerCH
scaler = ScalerCH('XF:28IDC-ES:1{Sclr:1}', name='scaler')
.. autosummary::
:toctree: ../generated
ophyd.scaler.ScalerCH
EpicsMCA and EpicsDXP
---------------------
EPICS `MCA records `_ and
DXP-based devices are also supported, through the ``EpicsMCA`` and ``EpicsDXP``
devices.
.. autosummary::
:toctree: ../generated
ophyd.mca.EpicsMCARecord
ophyd.mca.EpicsDXP