GUI: Raster is using more generalized DTZ/transmission settings

This commit is contained in:
2025-06-12 21:20:40 +02:00
parent fb946e6af6
commit bebb9c38d3
7 changed files with 123 additions and 58 deletions
-1
View File
@@ -1,4 +1,3 @@
import math
from typing import Annotated, List
from pydantic import Field, AfterValidator, BaseModel
+4 -1
View File
@@ -68,7 +68,10 @@ class MainWindow(QMainWindow):
)
self.raster = RasterGridManager(geom=geom)
self.data_collection = DataCollectionSettings(s=geom, parent=top_widget, raster_mgr=self.raster)
self.data_collection = DataCollectionSettings(s=geom,
parent=top_widget,
raster_mgr=self.raster,
diffraction=diffraction)
top_widget_layout.addWidget(self.data_collection)
self.camera_image = SampleCameraImageLabel(geom=geom, raster=self.raster, parent=top_widget, default_image=default_image)
@@ -7,6 +7,8 @@ from PySide6.QtWidgets import (
QPushButton,
QWidget,
)
from aaredaqlib.diffraction_geometry import DiffractionGeometry
from aaredaqlib.rotation_scan import RotationScanRequest
from aaredaqlib.sample_geometry import SampleGeometryModel
@@ -23,8 +25,11 @@ class DataCollectionSettings(QFrame):
standard_data_collection = Signal(RotationScanRequest)
evaluate_grid = Signal()
def __init__(self, s: SampleGeometryModel,
raster_mgr: RasterGridManager, parent=None):
def __init__(self,
s: SampleGeometryModel,
raster_mgr: RasterGridManager,
diffraction: DiffractionGeometry,
parent=None):
super().__init__(parent)
self.setFixedWidth(400)
self.setFrameShape(QFrame.Shape.StyledPanel)
@@ -42,7 +47,8 @@ class DataCollectionSettings(QFrame):
self.tab_widget = QTabWidget(parent=widget)
self.raster = RasterDataCollectionPanel(parent=self.tab_widget, raster_mgr=raster_mgr)
self.raster = RasterDataCollectionPanel(parent=self.tab_widget, raster_mgr=raster_mgr,
diffraction=diffraction)
self.tab_widget.addTab(self.raster, "Raster")
self.screening = ScreeningDataCollectionPanel(parent=self.tab_widget)
+2 -1
View File
@@ -1,6 +1,6 @@
from datetime import datetime
from PySide6.QtCore import Signal, Slot
from PySide6.QtCore import Signal, Slot, Qt
from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QLineEdit, QSpinBox, QCheckBox
from aaregui.widgets.title_label import TitleLabel
@@ -39,6 +39,7 @@ class FilePathPanel(QWidget):
self.run_number_edit.setStyleSheet("background-color: rgb(255, 255, 255);")
self.run_number_edit.setValue(1)
self.run_number_edit.setRange(1, 999)
self.run_number_edit.setAlignment(Qt.AlignmentFlag.AlignRight)
grid_layout.addWidget(self.run_number_edit, 4, 1)
grid_layout.addWidget(QLabel("File name", parent=self), 5, 0)
@@ -1,94 +1,80 @@
from PySide6.QtCore import Signal, Slot, Qt
from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QSizePolicy, QSpacerItem
from aaredaqlib.diffraction_geometry import DiffractionGeometry
from aaregui.panels.scan_settings_panel import ScanSettingsPanel
from aaregui.scan_logic.raster_grid_manager import RasterGridManager
from aaregui.widgets.number_line_edit import NumberLineEdit
class RasterDataCollectionPanel(QWidget):
class RasterDataCollectionPanel(ScanSettingsPanel):
grid_size_updated = Signal(float, float)
exp_time_updated = Signal(float)
transmission_updated = Signal(float)
dtz_updated = Signal(float)
def __init__(self, raster_mgr :RasterGridManager, parent=None):
super().__init__(parent)
def __init__(self, raster_mgr :RasterGridManager,
diffraction: DiffractionGeometry,
default_dtz: float = 200.0,
default_transmission: float = 1.0,
parent=None):
super().__init__(diffraction, default_dtz, default_transmission, parent)
self.__n_x = raster_mgr.active_grid.n_x
self.__n_y = raster_mgr.active_grid.n_y
self.__size_x = raster_mgr.active_grid.grid_size_mm.x * 1000.0
self.__size_y = raster_mgr.active_grid.grid_size_mm.y * 1000.0
grid_layout = QGridLayout(self)
grid_layout.addWidget(QLabel("High resolution", parent=self), 0, 0)
self.high_res_enter = NumberLineEdit(
0.5, 10, decimals=2, default=2.0, parent=self
)
grid_layout.addWidget(self.high_res_enter, 0, 1, 1, 3)
grid_layout.addWidget(QLabel("Å", parent=self), 0, 4)
grid_layout.addWidget(QLabel("Detector distance", parent=self), 1, 0)
self.dtz_enter = NumberLineEdit(60, 1000, decimals=2, default=raster_mgr.active_grid.dtz, parent=self)
grid_layout.addWidget(self.dtz_enter, 1, 1, 1, 3)
grid_layout.addWidget(QLabel("mm", parent=self), 1, 4)
self.dtz_enter.newValue.connect(self.dtz)
grid_layout.addWidget(QLabel("Beam transmission", parent=self), 2, 0)
self.transmission_enter = NumberLineEdit(
0, 1.0, decimals=4, default=raster_mgr.active_grid.transmission, parent=self
)
grid_layout.addWidget(self.transmission_enter, 2, 1,1,3)
self.transmission_enter.newValue.connect(self.transmission)
grid_layout.addWidget(QLabel("Grid element size", parent=self), 3, 0)
self._layout.addWidget(QLabel("Grid element size", parent=self), 3, 0)
self.width_enter = NumberLineEdit(5, 100, decimals=0, default=self.__size_x, parent=self)
self.width_enter.newValue.connect(self.grid_size)
grid_layout.addWidget(self.width_enter, 3, 1)
self._layout.addWidget(self.width_enter, 3, 1)
grid_layout.addWidget(QLabel(" x ", parent=self), 3, 2)
self._layout.addWidget(QLabel(" x ", parent=self), 3, 2)
self.height_enter = NumberLineEdit(5, 100, decimals=0, default=self.__size_y, parent=self)
self.height_enter.newValue.connect(self.grid_size)
grid_layout.addWidget(self.height_enter, 3, 3)
grid_layout.addWidget(QLabel("μm", parent=self), 3, 4)
grid_layout.addWidget(QLabel("Image time", parent=self), 4, 0)
self._layout.addWidget(self.height_enter, 3, 3)
self._layout.addWidget(QLabel("μm", parent=self), 3, 4)
self._layout.addWidget(QLabel("Image time", parent=self), 4, 0)
self.image_time_enter = NumberLineEdit(
0.0005, 10.0, raster_mgr.active_grid.exp_time_s, decimals=4, parent=self
)
grid_layout.addWidget(self.image_time_enter, 4, 1, 1, 3)
grid_layout.addWidget(QLabel("s", parent=self), 4, 4)
self._layout.addWidget(self.image_time_enter, 4, 1, 1, 3)
self._layout.addWidget(QLabel("s", parent=self), 4, 4)
self.image_time_enter.newValue.connect(self.exp_time_s)
grid_layout.addWidget(QLabel("Grid elements", parent=self), 5, 0)
self._layout.addWidget(QLabel("Grid elements", parent=self), 5, 0)
self.n_x_label = QLabel("-", parent=self)
self.n_x_label.setAlignment(Qt.AlignmentFlag.AlignRight)
grid_layout.addWidget(self.n_x_label, 5, 1)
grid_layout.addWidget(QLabel(" x ", parent=self), 5, 2)
self._layout.addWidget(self.n_x_label, 5, 1)
self._layout.addWidget(QLabel(" x ", parent=self), 5, 2)
self.n_y_label = QLabel("-", parent=self)
self.n_y_label.setAlignment(Qt.AlignmentFlag.AlignRight)
grid_layout.addWidget(self.n_y_label, 5, 3)
self._layout.addWidget(self.n_y_label, 5, 3)
grid_layout.addWidget(QLabel("Grid size", parent=self), 6, 0)
self._layout.addWidget(QLabel("Grid size", parent=self), 6, 0)
self.size_x_label = QLabel("-", parent=self)
self.size_x_label.setAlignment(Qt.AlignmentFlag.AlignRight)
grid_layout.addWidget(self.size_x_label, 6, 1)
grid_layout.addWidget(QLabel(" x ", parent=self), 6, 2)
self._layout.addWidget(self.size_x_label, 6, 1)
self._layout.addWidget(QLabel(" x ", parent=self), 6, 2)
self.size_y_label = QLabel("-", parent=self)
self.size_y_label.setAlignment(Qt.AlignmentFlag.AlignRight)
grid_layout.addWidget(self.size_y_label, 6, 3)
self._layout.addWidget(self.size_y_label, 6, 3)
grid_layout.addWidget(QLabel("μm", parent=self), 6, 4)
self._layout.addWidget(QLabel("μm", parent=self), 6, 4)
horizontal_spacer = QSpacerItem(
40, 20, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding
)
grid_layout.addItem(horizontal_spacer, 7, 0, 1, 4)
self._layout.addItem(horizontal_spacer, 7, 0, 1, 4)
self.update_grid_scan_size()
@Slot(float)
@@ -103,14 +89,6 @@ class RasterDataCollectionPanel(QWidget):
def exp_time_s(self, inp: float):
self.exp_time_updated.emit(inp)
@Slot(float)
def dtz(self, inp: float):
self.dtz_updated.emit(inp)
@Slot(float)
def transmission(self, inp: float):
self.transmission_updated.emit(inp)
@Slot(int, int)
def grid_scan_size_change(self, n_x: int, n_y: int):
self.__n_x = n_x
@@ -0,0 +1,72 @@
from PySide6.QtCore import Slot, Signal
from PySide6.QtWidgets import QWidget, QGridLayout, QLabel
from aaredaqlib.diffraction_geometry import DiffractionGeometry
from aaredaqlib.models import DAQStatusModel
from aaregui.widgets.number_line_edit import NumberLineEdit
class ScanSettingsPanel(QWidget):
dtz_updated = Signal(float)
dtz_move = Signal(float)
transmission_updated = Signal(float)
def __init__(self, diffraction: DiffractionGeometry,
default_dtz: float = 200.0,
default_transmission: float = 1.0,
parent=None):
super().__init__(parent)
self.__diffraction = diffraction
self._transmission = default_transmission
self._dtz = default_dtz
self._high_res = diffraction.resolution_angstrom(self._dtz)
self._layout = QGridLayout(self)
self._layout.addWidget(QLabel("High resolution", parent=self), 0, 0)
self.high_res_enter = NumberLineEdit(
0.5, 10, decimals=2, default=self._high_res, parent=self
)
self._layout.addWidget(self.high_res_enter, 0, 1, 1, 3)
self._layout.addWidget(QLabel("Å", parent=self), 0, 4)
self.high_res_enter.newValue.connect(self.set_high_res)
self._layout.addWidget(QLabel("Detector distance", parent=self), 1, 0)
self.dtz_enter = NumberLineEdit(60, 1000, decimals=2, default=self._dtz, parent=self)
self._layout.addWidget(self.dtz_enter, 1, 1, 1, 3)
self._layout.addWidget(QLabel("mm", parent=self), 1, 4)
self.dtz_enter.newValue.connect(self.set_dtz)
self._layout.addWidget(QLabel("Beam transmission", parent=self), 2, 0)
self.transmission_enter = NumberLineEdit(
0, 1.0, decimals=4, default=self._transmission, parent=self
)
self._layout.addWidget(self.transmission_enter, 2, 1, 1, 3)
self.transmission_enter.newValue.connect(self.set_transmission)
@Slot(DAQStatusModel)
def update_daq_status(self, s: DAQStatusModel):
self.__diffraction = s.diffraction
@Slot(float)
def set_dtz(self, v: float):
self._dtz = v
self._high_res = self.__diffraction.resolution_angstrom(self._dtz)
self.high_res_enter.update_value(self._high_res)
self.dtz_updated.emit(self._dtz)
@Slot(float)
def set_high_res(self, v: float):
self._high_res = v
self._dtz = self.__diffraction.calc_dtz_mm(v)
self.dtz_enter.update_value(self._dtz)
self.dtz_updated.emit(self._dtz)
@Slot(float)
def set_transmission(self, v: float):
self._transmission = v
self.transmission_enter.update_value(self._transmission)
self.transmission_updated.emit(self._transmission)
@@ -0,0 +1,6 @@
from PySide6.QtCore import QObject
class RotationScanManager(QObject):
pass