Source code for siriushla.si_ap_idff.custom_widgets
"""Custom widgets."""
import numpy as np
from pydm.widgets import PyDMLineEdit
from pydm.widgets.waveformplot import WaveformCurveItem
from qtpy.QtCore import Slot
from siriuspy.search import IDSearch
from ..as_ap_configdb import LoadConfigDialog as _LoadConfigDialog
[docs]
class ConfigLineEdit(PyDMLineEdit):
"""Configuration line edit."""
[docs]
def mouseReleaseEvent(self, _):
"""Reimplement mouseReleaseEvent."""
config_type = 'si_idff'
popup = _LoadConfigDialog(config_type)
popup.configname.connect(self._config_changed)
popup.exec_()
def _config_changed(self, configname):
self.setText(configname)
self.send_value()
self.value_changed(configname)
[docs]
class SectionedWaveformCurveItem(WaveformCurveItem):
def __init__(self, idname, section, **kwargs):
"""Sectioned waveform curve item."""
super().__init__(**kwargs)
self.section = section
# NOTE: Up to now FF tables in beaglebones
# interpolate from zero to maximum gap (kparam),
# instead of using the actual gap values.
param = IDSearch.conv_idname_2_parameters(idname)
self.kparam_min = 0 # [mm]
self.kparam_max = param.KPARAM_MAX
[docs]
@Slot(np.ndarray)
def receiveYWaveform(self, new_waveform):
size = len(new_waveform) / 4
mini = int(size * self.section)
maxi = int(size * (self.section + 1))
ydata = new_waveform[mini:maxi]
npts = len(ydata)
kmin, kmax = self.kparam_min, self.kparam_max
grid = np.arange(0, npts) / (npts - 1)
xdata = kmin + (kmax - kmin) * grid
super().receiveXWaveform(xdata)
super().receiveYWaveform(ydata)