From cf3b61bd320e28fb8928cda7115fa8326739a690 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Thu, 12 Jun 2025 14:28:30 +0200 Subject: [PATCH] GUI: Run raster scan (image time/dtz/transmission work) --- gui/src/aaregui/main_window.py | 10 ++++-- .../panels/data_collection_settings.py | 6 ++-- .../aaregui/panels/raster_data_collection.py | 35 ++++++++++++++----- .../aaregui/scan_logic/raster_grid_manager.py | 31 +++++++++++++--- 4 files changed, 65 insertions(+), 17 deletions(-) diff --git a/gui/src/aaregui/main_window.py b/gui/src/aaregui/main_window.py index b5cd9266..9dda03a8 100644 --- a/gui/src/aaregui/main_window.py +++ b/gui/src/aaregui/main_window.py @@ -58,10 +58,10 @@ class MainWindow(QMainWindow): aerotech_meas=Coordinate() ) - self.data_collection = DataCollectionSettings(s=geom, parent=top_widget) + self.raster = RasterGridManager(geom=geom) + self.data_collection = DataCollectionSettings(s=geom, parent=top_widget, raster_mgr=self.raster) top_widget_layout.addWidget(self.data_collection) - self.raster = RasterGridManager(geom=geom) self.camera_image = SampleCameraImageLabel(geom=geom, raster=self.raster, parent=top_widget, default_image=default_image) top_widget_layout.addWidget(self.camera_image) @@ -168,6 +168,12 @@ class MainWindow(QMainWindow): self.tell_samples.unmount.connect(self.daq.unmount) self.data_collection.raster.grid_size_updated.connect(self.raster.update_grid_size) + self.data_collection.raster.exp_time_updated.connect(self.raster.update_exposure_time) + self.data_collection.raster.transmission_updated.connect(self.raster.update_transmission) + self.data_collection.raster.dtz_updated.connect(self.raster.update_dtz) + + self.raster.grid_scan.connect(self.daq.raster_scan) + self.raster.grid_scan_size_changed.connect(self.data_collection.raster.grid_scan_size_change) self.status_bar.set_pgroup.connect(self.daq.set_pgroup) self.status_bar.end_session.connect(self.daq.end_session) diff --git a/gui/src/aaregui/panels/data_collection_settings.py b/gui/src/aaregui/panels/data_collection_settings.py index f6ef6b1e..8631f284 100644 --- a/gui/src/aaregui/panels/data_collection_settings.py +++ b/gui/src/aaregui/panels/data_collection_settings.py @@ -15,13 +15,15 @@ from aaregui.panels.helical_scan_panel import HelicalDataCollectionPanel from aaregui.panels.raster_data_collection import RasterDataCollectionPanel from aaregui.panels.screening_data_collection import ScreeningDataCollectionPanel from aaregui.panels.standard_data_collection import StandardDataCollectionPanel +from aaregui.scan_logic.raster_grid_manager import RasterGridManager from aaregui.widgets.title_label import TitleLabel class DataCollectionSettings(QFrame): standard_data_collection = Signal(RotationScanRequest) - def __init__(self, s: SampleGeometryModel, parent=None): + def __init__(self, s: SampleGeometryModel, + raster_mgr: RasterGridManager, parent=None): super().__init__(parent) self.setFixedWidth(400) self.setFrameShape(QFrame.Shape.StyledPanel) @@ -39,7 +41,7 @@ class DataCollectionSettings(QFrame): self.tab_widget = QTabWidget(parent=widget) - self.raster = RasterDataCollectionPanel(parent=self.tab_widget) + self.raster = RasterDataCollectionPanel(parent=self.tab_widget, raster_mgr=raster_mgr) self.tab_widget.addTab(self.raster, "Raster") self.screening = ScreeningDataCollectionPanel(parent=self.tab_widget) diff --git a/gui/src/aaregui/panels/raster_data_collection.py b/gui/src/aaregui/panels/raster_data_collection.py index 8c08a5fc..811eeb01 100644 --- a/gui/src/aaregui/panels/raster_data_collection.py +++ b/gui/src/aaregui/panels/raster_data_collection.py @@ -1,18 +1,22 @@ from PySide6.QtCore import Signal, Slot, Qt from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QSizePolicy, QSpacerItem +from aaregui.scan_logic.raster_grid_manager import RasterGridManager from aaregui.widgets.number_line_edit import NumberLineEdit class RasterDataCollectionPanel(QWidget): grid_size_updated = Signal(float, float) + exp_time_updated = Signal(float) + transmission_updated = Signal(float) + dtz_updated = Signal(float) - def __init__(self, parent=None): + def __init__(self, raster_mgr :RasterGridManager, parent=None): super().__init__(parent) - self.__n_x = 0 - self.__n_y = 0 - self.__size_x = 20 - self.__size_y = 20 + 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) @@ -23,15 +27,17 @@ class RasterDataCollectionPanel(QWidget): 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=120, parent=self) + 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=1.0, parent=self + 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) @@ -49,10 +55,11 @@ class RasterDataCollectionPanel(QWidget): grid_layout.addWidget(QLabel("Image time", parent=self), 4, 0) self.image_time_enter = NumberLineEdit( - 0.0005, 10.0, 0.005, decimals=4, parent=self + 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.image_time_enter.newValue.connect(self.exp_time_s) grid_layout.addWidget(QLabel("Grid elements", parent=self), 5, 0) @@ -92,6 +99,18 @@ class RasterDataCollectionPanel(QWidget): self.__size_y / 1000.0) self.update_grid_scan_size() + @Slot(float) + 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 diff --git a/gui/src/aaregui/scan_logic/raster_grid_manager.py b/gui/src/aaregui/scan_logic/raster_grid_manager.py index 6843d21f..e9932d15 100644 --- a/gui/src/aaregui/scan_logic/raster_grid_manager.py +++ b/gui/src/aaregui/scan_logic/raster_grid_manager.py @@ -72,10 +72,16 @@ class RasterGridManager(QObject): smargon = self.__geom.smargon, grid_size_mm=Coordinate(x=0.01, y=0.01), omega_deg=self.__geom.omega_deg, - exp_time_s=1.0 + exp_time_s=1.0, + transmission=1.0, + dtz=120.0 ) self.__completed_grids : List[CompletedRasterGrid] = [] + @property + def active_grid(self) -> RasterGridRequest: + return self.__active_grid + def _is_grid_visible(self, grid: RasterGridRequest): if ( abs(normalize_angle(grid.omega_deg - self.__geom.omega_deg)) < 1.0 @@ -142,6 +148,9 @@ class RasterGridManager(QObject): self.__active_grid.n_y = 0 self.grid_scan_size_changed.emit(self.__active_grid.n_x, self.__active_grid.n_y) + def clear_completed_grids(self): + self.__completed_grids.clear() + def is_part_of_active_grid(self, point: QPointF) -> bool: if not self._is_grid_visible(self.__active_grid): return False @@ -152,10 +161,6 @@ class RasterGridManager(QObject): 0 <= delta.y < self.__active_grid.n_y * self.__active_grid.grid_size_mm.y ) - @Slot(float) - def update_exposure_time(self, exp_time_s: float): - self.__active_grid.exp_time_s = exp_time_s - @Slot(float, float) def update_grid_size(self, grid_size_mm_x: float, grid_size_mm_y: float): if (grid_size_mm_x <= 0) or (grid_size_mm_y <= 0): @@ -171,6 +176,10 @@ class RasterGridManager(QObject): @Slot() def run_grid_scan(self): self.grid_scan.emit(self.__active_grid) + + @Slot() + def grid_scan_completed(self, r: CompletedRasterGrid): + self.__completed_grids.append(r) self.__active_grid.n_x = 0 self.__active_grid.n_y = 0 @@ -207,3 +216,15 @@ class RasterGridManager(QObject): painter.drawRect(QRect(int(c.x), int(c.y), int(g.x), int(g.y))) painter.setBrush(Qt.BrushStyle.NoBrush) + + @Slot(float) + def update_exposure_time(self, exp_time_s: float): + self.__active_grid.exp_time_s = exp_time_s + + @Slot(float) + def update_transmission(self, transmission: float): + self.__active_grid.transmission = transmission + + @Slot(float) + def update_dtz(self, dtz: float): + self.__active_grid.dtz = dtz