Source code for photons.equipment.widgets.sia_cmi
"""
Widget for a Switched Integrator Amplifier from CMI.
"""
import re
from msl.qt import ComboBox
from msl.qt import MICRO
from msl.qt import QtWidgets
from msl.qt import Slot
from ..base import BaseEquipmentWidget
from ..base import widget
from ..sia_cmi import SIA3CMI
_gain_regex = re.compile(r'TIME_(?P<value>\d+)(?P<unit>[um]?)')
[docs]
@widget(manufacturer=r'CMI', model=r'SIA3')
class SIA3CMIWidget(BaseEquipmentWidget):
connection: SIA3CMI
def __init__(self,
connection: SIA3CMI,
*,
parent: QtWidgets.QWidget = None) -> None:
"""Widget for a Switched Integrator Amplifier from CMI.
Args:
connection: The connection to the amplifier.
parent: The parent widget.
"""
super().__init__(connection, parent=parent)
index = None
int_time = connection.get_integration_time(as_enum=True)
items = {}
for i, enum in enumerate(SIA3CMI.Integration):
if enum.value == int_time:
index = i
d = _gain_regex.search(enum.name).groupdict()
if not d['unit']:
text = f'{d["value"]} s'
elif d['unit'] == 'u':
text = f'{d["value"]} {MICRO}s'
else:
text = f'{d["value"]} {d["unit"]}s'
items[text] = enum.value
if index is None:
raise ValueError(f'Cannot determine the QComboBox index for '
f'{self.__class__.__name__!r}')
self.gain_combobox = ComboBox(
items=items,
initial=index,
tooltip='SIA integration time',
index_changed=self.on_index_changed,
)
if not self.connected_as_link:
connection.integration_time_changed.connect(self.on_integration_time_changed)
form = QtWidgets.QFormLayout()
form.addRow('Integration time:', self.gain_combobox)
self.setLayout(form)
[docs]
def notification_handler(self, integration_time: int) -> None:
"""Handle notifications from the SIA3CMI Service."""
self.on_integration_time_changed(integration_time)
[docs]
@Slot(int)
def on_index_changed(self, index: int) -> None:
"""Set the integration time."""
self.connection.set_integration_time(index + 5)
[docs]
@Slot(int)
def on_integration_time_changed(self, value: int) -> None:
"""Update the combobox without emitting the signal."""
previous = self.gain_combobox.blockSignals(True)
for index in range(self.gain_combobox.count()):
if self.gain_combobox.itemData(index) == value:
self.gain_combobox.setCurrentIndex(index)
break
self.gain_combobox.blockSignals(previous)