GUI: Run raster scan (image time/dtz/transmission work)
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user