GUI: Manual sample panel (WIP)

This commit is contained in:
leonarski_f committed 2025-06-29 11:10:50 +02:00
1 parent b1c4feaee2
commit 043a5eef45
6 files changed
+152 -21

No files matched your search

+18
View File
@@ -18,6 +18,7 @@ from aaredaqlib.sample_geometry import SampleGeometryModel
from aaregui.panels.beamline_controls import BeamlineControls
from aaregui.panels.data_collection_settings import DataCollectionSettings
from aaregui.panels.manual_sample_panel import ManualSamplePanel
from aaregui.panels.sample_queue_panel import SampleQueuePanel
from aaregui.panels.tell_sample_panel import TellSamplePanel
from aaregui.scan_logic.raster_grid_manager import RasterGridManager
@@ -121,6 +122,13 @@ class MainWindow(QMainWindow):
self.job_list_dock.setAllowedAreas(Qt.DockWidgetArea.BottomDockWidgetArea)
self.addDockWidget(Qt.DockWidgetArea.BottomDockWidgetArea, self.job_list_dock)
self.manual_sample_panel = ManualSamplePanel()
self.manual_sample_dock = QDockWidget("Manual sample", self)
self.manual_sample_dock.setWidget(self.manual_sample_panel)
self.manual_sample_dock.setAllowedAreas(Qt.DockWidgetArea.BottomDockWidgetArea)
self.addDockWidget(Qt.DockWidgetArea.BottomDockWidgetArea, self.manual_sample_dock)
self.setCentralWidget(top_widget)
self.setWindowTitle("AareGUI")
@@ -228,11 +236,14 @@ class MainWindow(QMainWindow):
self.daq.update.connect(self.beamline.zoom_panel.update_daq_status)
self.daq.update.connect(self.beamline.beam_mark.update_daq_status)
self.daq.update.connect(self.sample_logic.update_daq_status)
self.daq.update.connect(self.manual_sample_panel.update_daq_status)
self.daq.standard_scan_completed.connect(self.rotation.scan_completed)
self.daq.automated_scan_done.connect(self.job_list_panel.automated_scan_done)
self.daq.raster_scan_completed.connect(self.raster.grid_scan_completed)
self.manual_sample_panel.sample_manual.connect(self.daq.sample_manual)
def create_menu_bar(self):
"""Create a menu bar with File->Quit and Help->About."""
# Main menu bar
@@ -262,6 +273,13 @@ class MainWindow(QMainWindow):
show_job_list_action.triggered.connect(lambda: self.job_list_dock.setVisible(show_job_list_action.isChecked()))
view_menu.addAction(show_job_list_action)
show_manual_sample_action = QAction("Show manual sample", self)
show_manual_sample_action.setCheckable(True)
show_manual_sample_action.setChecked(True)
show_manual_sample_action.triggered.connect(self.manual_sample_dock.setVisible)
# When dock visibility changes, update the action's checked state
show_manual_sample_action.triggered.connect(lambda: self.manual_sample_dock.setVisible(show_job_list_action.isChecked()))
view_menu.addAction(show_manual_sample_action)
# Help menu
help_menu = menu_bar.addMenu("Help")
about_action = QAction("About", self) # Action for 'About'
+99 -17
View File
@@ -1,41 +1,123 @@
from PySide6.QtCore import Signal, Slot
from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QTextEdit, QPushButton
from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QTextEdit, QPushButton, QCheckBox, QLineEdit
from aareDBclient import DataCollectionParameters
from aaredaqlib.models import SampleShortInfo
from aaredaqlib.models import SampleShortInfo, DAQStatusModel
from aaregui.widgets.number_line_edit import NumberLineEdit
from aaregui.widgets.title_label import TitleLabel
class OmegaPanel(QWidget):
class ManualSamplePanel(QWidget):
sample_manual = Signal(SampleShortInfo)
sample_clear = Signal()
def __init__(self, parent=None):
super().__init__(parent)
self.__sample = SampleShortInfo(
db_id = -1,
puck_name="",
dewar_name="",
sample_name="Manual",
pin=0
)
self.__sample_name = "Lyso"
self.__pgroup = "p16371"
grid_layout = QGridLayout(self)
grid_layout.addWidget(TitleLabel("Manual sample", self), 0, 0, 1, 2)
grid_layout.addWidget(TitleLabel("Manual sample", self), 0, 0, 1, 3)
grid_layout.addWidget(QLabel("Name"), 1, 0)
self._text_name = QTextEdit(self.__sample.sample_name)
grid_layout.addWidget(QLabel("Sample"), 1, 0)
self._text_name = QLineEdit(self.__sample_name)
grid_layout.addWidget(self._text_name, 1, 1)
self._text_name.textChanged.connect(self._name_changed)
self._text_name.setStyleSheet("background-color: rgb(255, 255, 255);")
# Unit cell parameters
self._unit_cell = QCheckBox("Provide unit cell")
grid_layout.addWidget(self._unit_cell, 2, 1)
# a, b, c parameters (in Ångströms)
grid_layout.addWidget(QLabel("a"), 3, 0)
self._text_a = NumberLineEdit(5, 1000, 39, parent=self)
grid_layout.addWidget(self._text_a, 3, 1)
grid_layout.addWidget(QLabel("Å"), 3, 2)
grid_layout.addWidget(QLabel("b"), 4, 0)
self._text_b = NumberLineEdit(5, 1000, 78, parent=self)
grid_layout.addWidget(self._text_b, 4, 1)
grid_layout.addWidget(QLabel("Å"), 4, 2)
grid_layout.addWidget(QLabel("c"), 5, 0)
self._text_c = NumberLineEdit(5, 1000, 78, parent=self)
grid_layout.addWidget(self._text_c, 5, 1)
grid_layout.addWidget(QLabel("Å"), 5, 2)
# alpha, beta, gamma parameters (in degrees)
grid_layout.addWidget(QLabel("α"), 6, 0)
self._text_alpha = NumberLineEdit(30, 330, 90, parent=self)
grid_layout.addWidget(self._text_alpha, 6, 1)
grid_layout.addWidget(QLabel("°"), 6, 2)
grid_layout.addWidget(QLabel("β"), 7, 0)
self._text_beta = NumberLineEdit(30, 330, 90, parent=self)
grid_layout.addWidget(self._text_beta, 7, 1)
grid_layout.addWidget(QLabel("°"), 7, 2)
grid_layout.addWidget(QLabel("γ"), 8, 0)
self._text_gamma = NumberLineEdit(30, 330, 90, parent=self)
grid_layout.addWidget(self._text_gamma, 8, 1)
grid_layout.addWidget(QLabel("°"), 8, 2)
grid_layout.addWidget(QLabel("SG"), 9, 0)
self._text_sg = NumberLineEdit(1, 250, 1, 0, parent=self)
grid_layout.addWidget(self._text_sg, 9, 1)
self._add_button = QPushButton("Add")
grid_layout.addWidget(self._add_button, 2, 0, 1 ,2)
grid_layout.addWidget(self._add_button, 10, 0, 1, 3)
self._add_button.clicked.connect(self._add_clicked)
self._unit_cell.toggled.connect(self._unit_cell_toggled)
self._unit_cell_toggled(False)
@Slot(bool)
def _unit_cell_toggled(self, checked: bool):
if checked:
self._text_a.setEnabled(True)
self._text_b.setEnabled(True)
self._text_c.setEnabled(True)
self._text_alpha.setEnabled(True)
self._text_beta.setEnabled(True)
self._text_gamma.setEnabled(True)
self._text_sg.setEnabled(True)
else:
self._text_a.setEnabled(False)
self._text_b.setEnabled(False)
self._text_c.setEnabled(False)
self._text_alpha.setEnabled(False)
self._text_beta.setEnabled(False)
self._text_gamma.setEnabled(False)
self._text_sg.setEnabled(False)
@Slot(str)
def _name_vhanged(self, s: str):
self.__sample.sample_name = s
def _name_changed(self, s: str):
self.__sample_name = s
@Slot()
def _add_clicked(self):
self.sample_manual.emit(self.__sample)
data_processing = None
if self._unit_cell.isChecked():
data_processing = DataCollectionParameters(
spacegroupnumber=int(self._text_sg.value),
cellparameters=f"{self._text_a.value:.2f} {self._text_b.value:.2f} {self._text_c.value:.2f} {self._text_alpha.value:.2f} {self._text_beta.value:.2f} {self._text_gamma.value:.2f}"
)
s = SampleShortInfo(
db_id=-1,
puck_name="",
dewar_name="",
sample_name=self.__sample_name,
pin=1,
aaredb_params=data_processing,
user=self.__pgroup,
)
self.sample_manual.emit(s)
@Slot(DAQStatusModel)
def update_daq_status(self, s: DAQStatusModel):
self.__pgroup = s.session.current_pgroup
+8 -3
View File
@@ -111,9 +111,14 @@ class TellSamplePanel(QFrame):
self.table_model.updateCurrentSample(current_puck=None, current_sample=None)
else:
try:
self.curr_sample_label.setText(
f"Current sample: <b>{sample.sample_name} ({sample.location.segment}{sample.location.pos}-{sample.pin})</b>"
)
if sample.location is None:
self.curr_sample_label.setText(
f"Current sample: <b>{sample.sample_name} (Manual mount)</b>"
)
else:
self.curr_sample_label.setText(
f"Current sample: <b>{sample.sample_name} ({sample.location.segment}{sample.location.pos}-{sample.pin})</b>"
)
self.table_model.updateCurrentSample(
current_puck=sample.puck_name, current_sample=sample.db_id
)