wip widget
CI for debye_bec / test (push) Failing after 31s

This commit is contained in:
x01da
2026-08-11 07:00:54 +02:00
parent f214062e36
commit 4bf8952789
2 changed files with 37 additions and 42 deletions
+16 -16
View File
@@ -143,9 +143,9 @@ class EdgeSelector(QDialog):
super().__init__(parent)
self.setWindowTitle("Absorption Edge Selector")
self.buttons = {}
self.active_edge = None
self.active_element = None
self.active_energy = None
self.selected_edge = None
self.selected_element = None
self.selected_energy = None
self.llim = llim
self.hlim = hlim
@@ -210,19 +210,19 @@ class EdgeSelector(QDialog):
@SafeSlot()
def _edge_changed(self, *_):
self.active_edge = self.edge.currentText()
self.selected_edge = self.edge.currentText()
for element, button in self.buttons.items():
# logger.info(f"{element}")
if "L" in self.active_edge and element in ["H", "He"]:
if "L" in self.selected_edge and element in ["H", "He"]:
button.setDisabled(True)
button.setChecked(False)
elif self.active_edge in ["L2", "L3"] and element == "Li":
elif self.selected_edge in ["L2", "L3"] and element == "Li":
button.setDisabled(True)
button.setChecked(False)
else:
energy = xraydb.xray_edge(element, self.active_edge, True)
if self.active_element == element:
self.active_energy = energy
energy = xraydb.xray_edge(element, self.selected_edge, True)
if self.selected_element == element:
self.selected_energy = energy
if energy is not None:
if energy < self.llim or energy > self.hlim:
button.setChecked(False)
@@ -237,25 +237,25 @@ class EdgeSelector(QDialog):
@SafeSlot()
def _element_changed(self, element: str | None = None):
if element is None:
if self.active_element is None:
if self.selected_element is None:
return
element = self.active_element
element = self.selected_element
# Uncheck all other buttons so only the picked one stays highlighted
for e, btn in self.buttons.items():
if e != element:
btn.setChecked(False)
self.buttons[element].setChecked(True)
self.active_element = element
self.active_energy = xraydb.xray_edge(element, self.active_edge, True)
self.selected_element = element
self.selected_energy = xraydb.xray_edge(element, self.selected_edge, True)
self.select_button.setEnabled(True)
self._set_select_text()
def _set_select_text(self):
if self.active_energy is not None:
if self.buttons[self.active_element].isChecked():
if self.selected_energy is not None:
if self.buttons[self.selected_element].isChecked():
self._enable_button(self.select_button, True)
self.select_button.setText(
f"Selected {self.active_element}, {self.active_edge}-edge, {self.active_energy:0.1f} eV"
f"Selected {self.selected_element}, {self.selected_edge}-edge, {self.selected_energy:0.1f} eV"
)
else:
self._enable_button(self.select_button, False)
@@ -61,6 +61,9 @@ class ScanControlXAS(ScanControl):
def __init__(self, *args, **kwargs):
self._motion_profile_group = QGroupBox("XAS scan helper")
self._motion_profile_group.setSizePolicy(
QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed
)
motion_profile_layout = QVBoxLayout(self._motion_profile_group)
self.motion_profile_widget = MotionProfileWidget(self)
motion_profile_layout.addWidget(self.motion_profile_widget)
@@ -82,7 +85,7 @@ class ScanControlXAS(ScanControl):
self.motion_profile_widget.update_plot(d_spacing=d_spacing)
def _add_metadata_form(self):
self.layout.addWidget(self._motion_profile_group, stretch=1) # type: ignore
self.layout.addWidget(self._motion_profile_group) # type: ignore
super()._add_metadata_form()
self._connect_scan_parameter_signals()
@@ -142,16 +145,13 @@ class MotionProfileWidget(QWidget):
def __init__(self, parent):
super().__init__()
self._parent_widget = parent
hostname = self.parent.client._hostname
start = hostname.find("x")
self.beamline = ""
if start != -1:
self.beamline = hostname[start : start + 5]
outer_layout = QVBoxLayout(self)
outer_layout.setContentsMargins(0, 0, 0, 0)
self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed)
edge_selector_layout = QHBoxLayout(self)
edge_selector_layout = QHBoxLayout()
edge_selector_label = QLabel("Absorption edge:")
self.edge_selector_button = QPushButton("Choose")
self.edge_label = QLabel("No edge selected")
@@ -160,7 +160,7 @@ class MotionProfileWidget(QWidget):
edge_selector_layout.addWidget(self.edge_selector_button)
edge_selector_layout.addStretch()
scan_rng_layout = QHBoxLayout(self)
scan_rng_layout = QHBoxLayout()
self.scan_rng_ckbox = QCheckBox(self)
self.scan_rng_ckbox.setCheckState(Qt.CheckState.Checked)
scan_rng_label = QLabel("Auto adjust scan range to absorption edge")
@@ -168,35 +168,24 @@ class MotionProfileWidget(QWidget):
scan_rng_layout.addWidget(scan_rng_label)
scan_rng_layout.addStretch()
plot_container = QWidget()
plot_layout = QHBoxLayout(plot_container)
plot_layout = QHBoxLayout()
plot_layout.setContentsMargins(0, 0, 0, 0)
self.plot_pos = self._make_plot(left_label="Energy<br>[eV]", bottom_label="Time [s]")
self.plot_vel = self._make_plot(
left_label="Scan Velocity<br>[eV/s]", bottom_label="Energy [eV]"
)
self.edge_energy = None
plot_layout.addWidget(self.plot_pos)
plot_layout.addWidget(self.plot_vel)
plot_container.setMinimumHeight(
int(np.max([self.plot_pos.minimumHeight(), self.plot_vel.minimumHeight()]))
)
scroll = QScrollArea()
scroll.setWidgetResizable(True)
scroll.setFrameShape(QFrame.Shape.NoFrame)
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
scroll.setWidget(plot_container)
self.edge_energy = None
self.edge_selection = QHBoxLayout()
self.edge_selection.addLayout(edge_selector_layout)
self.edge_selection.addStretch(1)
outer_layout.addLayout(self.edge_selection)
outer_layout.addLayout(scan_rng_layout)
outer_layout.addWidget(scroll, stretch=1)
outer_layout.addLayout(plot_layout)
self.scan_name = None
self.scan_parameters = None
@@ -216,8 +205,9 @@ class MotionProfileWidget(QWidget):
plot.hideButtons()
plot.getAxis("left").enableAutoSIPrefix(False)
plot.getAxis("bottom").enableAutoSIPrefix(False)
plot.setMinimumHeight(180)
plot.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.MinimumExpanding)
plot.setMinimumHeight(150)
plot.setMaximumHeight(150)
plot.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed)
return plot
def _add_edge_marker(self, plot, x_arr, y_arr, energy_arr, edge_marker):
@@ -246,6 +236,11 @@ class MotionProfileWidget(QWidget):
@SafeSlot()
def _update_edge(self, *_):
if self.beamline == "":
hostname = self._parent_widget.client._hostname
start = hostname.find("x")
if start != -1:
self.beamline = hostname[start : start + 5]
match self.beamline:
case "x01da":
dlg = EdgeSelector(self, llim=X01DA_E_MIN, hlim=X01DA_E_MAX)
@@ -254,9 +249,9 @@ class MotionProfileWidget(QWidget):
case _:
dlg = EdgeSelector(self)
if dlg.exec_():
self.edge_energy = dlg.active_energy
self.edge_energy = dlg.selected_energy
self.edge_label.setText(
f"{dlg.active_element}, {dlg.active_edge}-edge, {dlg.active_energy:0.1f} eV"
f"{dlg.selected_element}, {dlg.selected_edge}-edge, {dlg.selected_energy:0.1f} eV"
)
self._update_auto_scan_rng()
self.update_plot()