GUI: Run raster scan (image time/dtz/transmission work)

This commit is contained in:
2025-06-12 14:28:30 +02:00
parent c234ac5cd3
commit cf3b61bd32
4 changed files with 65 additions and 17 deletions
+8 -2
View File
@@ -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)
@@ -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)
@@ -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
@@ -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