Source code for apstools.devices.srs570_preamplifier

"""
Ophyd support for Stanford Research Systems 570 preamplifier from synApps

Public Structures

.. autosummary::

    ~SRS570_PreAmplifier

This device connects with the SRS570 support from synApps.
(https://github.com/epics-modules/ip/blob/master/ipApp/Db/SR570.db)

The SRS570 synApps support is part of the ``ip`` module:
https://htmlpreview.github.io/?https://raw.githubusercontent.com/epics-modules/ip/R3-6-1/documentation/swaitRecord.html

:see: https://github.com/epics-modules/ip
"""

# -----------------------------------------------------------------------------
# :author:    Pete R. Jemian
# :email:     jemian@anl.gov
# :copyright: (c) 2017-2022, UChicago Argonne, LLC
#
# Distributed under the terms of the Creative Commons Attribution 4.0 International Public License.
#
# The full license is in the file LICENSE.txt, distributed with this software.
# -----------------------------------------------------------------------------

from ophyd import Component
from ophyd import EpicsSignal
from .preamp_base import PreamplifierBaseDevice

import logging
import pint

logger = logging.getLogger(__name__)


[docs]class SRS570_PreAmplifier(PreamplifierBaseDevice): """ Ophyd support for Stanford Research Systems 570 preamplifier from synApps. """ # These values are strings because that is how they are defined # in the EPICS .db file. Must cast them to ``float()`` or ``int()`` # as desired. # see: https://github.com/epics-modules/ip/blob/master/ipApp/Db/SR570.db sensitivity_value = Component(EpicsSignal, "sens_num", kind="config", string=True) sensitivity_unit = Component(EpicsSignal, "sens_unit", kind="config", string=True) offset_on = Component(EpicsSignal, "offset_on", kind="config", string=True) offset_sign = Component(EpicsSignal, "offset_sign", kind="config", string=True) offset_value = Component(EpicsSignal, "offset_num", kind="config", string=True) offset_unit = Component(EpicsSignal, "offset_unit", kind="config", string=True) offset_fine = Component(EpicsSignal, "off_u_put", kind="config", string=True) offset_cal = Component(EpicsSignal, "offset_cal", kind="config", string=True) set_all = Component(EpicsSignal, "init.PROC", kind="config") bias_value = Component(EpicsSignal, "bias_put", kind="config", string=True) bias_on = Component(EpicsSignal, "bias_on", kind="config", string=True) filter_type = Component(EpicsSignal, "filter_type", kind="config", string=True) filter_lowpass = Component(EpicsSignal, "low_freq", kind="config", string=True) filter_highpass = Component(EpicsSignal, "high_freq", kind="config", string=True) gain_mode = Component(EpicsSignal, "gain_mode", kind="config", string=True) invert = Component(EpicsSignal, "invert_on", kind="config", string=True) blank = Component(EpicsSignal, "blank_on", kind="config", string=True) @property def computed_gain(self): """ Amplifier gain (A/V), as floating-point number. """ return pint.Quantity( float(self.sensitivity_value.get()), self.sensitivity_unit.get() ).to("A/V").magnitude
[docs] def cb_gain(self, *args, **kwargs): """ Called when sensitivity changes (EPICS CA monitor event). """ self.gain.put(self.computed_gain)
def __init__(self, *args, **kwargs): """ Update the gain when the sensitivity changes. """ super().__init__(*args, **kwargs) self.sensitivity_value.subscribe(self.cb_gain) self.sensitivity_unit.subscribe(self.cb_gain) # amplifier gain is the most relevant value self.gain.name = self.name