diff --git a/gui/src/aaregui/main_window.py b/gui/src/aaregui/main_window.py
index 833cb892..16f4aac4 100644
--- a/gui/src/aaregui/main_window.py
+++ b/gui/src/aaregui/main_window.py
@@ -173,16 +173,8 @@ class MainWindow(QMainWindow):
# )
#
- self.data_collection.standard_data_collection.connect(self.daq.standard_scan)
-
- self.data_collection.helical.show_helical_start.connect(self.camera_image.show_helical_start)
- self.data_collection.helical.show_helical_end.connect(self.camera_image.show_helical_end)
-
self.camera_image.autofocus.connect(self.daq.autofocus)
- self.camera_image.set_helical_start.connect(self.data_collection.helical.set_start_point)
- self.camera_image.set_helical_end.connect(self.data_collection.helical.set_end_point)
-
self.camera_image.evaluate_grid.connect(self.raster.run_grid_scan)
self.data_collection.raster.evaluate_grid.connect(self.raster.run_grid_scan)
@@ -201,10 +193,8 @@ class MainWindow(QMainWindow):
self.data_collection.raster.transmission_updated.connect(self.raster.update_transmission)
self.data_collection.raster.dtz_updated.connect(self.raster.update_dtz)
- self.data_collection.file_path_panel.set_file_prefix(self.raster.update_filename)
- self.raster.update_filename(self.data_collection.file_path_panel.filename)
-
self.raster.grid_scan.connect(self.daq.raster_scan)
+ self.data_collection.screening.rotation_scan.connect(self.daq.standard_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)
diff --git a/gui/src/aaregui/panels/data_collection_settings.py b/gui/src/aaregui/panels/data_collection_settings.py
index 56e8e1a4..b919f938 100644
--- a/gui/src/aaregui/panels/data_collection_settings.py
+++ b/gui/src/aaregui/panels/data_collection_settings.py
@@ -14,10 +14,8 @@ from aaredaqlib.rotation_scan import RotationScanRequest
from aaredaqlib.sample_geometry import SampleGeometryModel
from aaregui.panels.file_path_panel import FilePathPanel
-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.panels.rotation_data_collection import RotationDataCollectionPanel
from aaregui.scan_logic.raster_grid_manager import RasterGridManager
from aaregui.widgets.title_label import TitleLabel
@@ -36,81 +34,32 @@ class DataCollectionSettings(QFrame):
self.setFrameShape(QFrame.Shape.StyledPanel)
self.setFrameShadow(QFrame.Shadow.Raised)
- self.grid_layout = QGridLayout(self)
+ v_layout = QVBoxLayout(self)
self.file_path_panel = FilePathPanel(self)
- self.grid_layout.addWidget(self.file_path_panel, 0, 0, 1, 2)
+ v_layout.addWidget(self.file_path_panel)
- widget = QWidget(self)
- v_layout = QVBoxLayout(widget)
- widget.setLayout(v_layout)
+ v_layout.addWidget(TitleLabel("Grid scan"))
- v_layout.addWidget(TitleLabel("Data collection settings"))
+ self.raster = RasterDataCollectionPanel(parent=self, raster_mgr=raster_mgr, diffraction=diffraction)
- self.tab_widget = QTabWidget(parent=widget)
+ v_layout.addWidget(self.raster)
- self.raster = RasterDataCollectionPanel(parent=self.tab_widget, raster_mgr=raster_mgr,
- diffraction=diffraction)
- self.tab_widget.addTab(self.raster, "Raster")
+ v_layout.addWidget(TitleLabel("Data collection"))
- self.screening = ScreeningDataCollectionPanel(parent=self.tab_widget,
- diffraction=diffraction,)
- self.tab_widget.addTab(self.screening, "Screening")
+ self.screening = RotationDataCollectionPanel(parent=self, diffraction=diffraction)
+ v_layout.addWidget(self.screening)
- self.standard = StandardDataCollectionPanel(parent=self.tab_widget)
- self.tab_widget.addTab(self.standard, "Standard")
-
- self.helical = HelicalDataCollectionPanel(s=s, parent=self.tab_widget)
- self.tab_widget.addTab(self.helical, "Helical")
-
- v_layout.addWidget(self.tab_widget)
v_layout.addStretch()
- self.grid_layout.addWidget(widget, 1, 0, 1, 2)
- def run_data_collection(self):
- current_tab = self.tab_widget.currentWidget()
+ self.abort_button = QPushButton("Abort measurement", parent=self)
+ self.abort_button.setStyleSheet("color: rgb(164, 0, 0);")
+ v_layout.addWidget(self.abort_button)
- if current_tab == self.screening:
- data = self.screening.screening_type.itemData(
- self.screening.screening_type.currentIndex()
- )
-
- if data is None:
- print("No screening type selected.")
- return
-
- r = RotationScanRequest(
- start_omega_deg=self.screening.start_angle.value,
- exp_time_s=self.screening.image_time_enter.value,
- incr_omega_deg=data["omega_step_deg"],
- wedge_omega_deg=0.1,
- steps=data["steps"],
- screening=True
- )
- self.standard_data_collection.emit(r)
- elif current_tab == self.standard:
- total_angle = self.standard.total_angle.value
- image_angle = self.standard.image_angle.value
- if total_angle <= 0 or total_angle < image_angle:
- print("Total angle is not valid.")
- return
-
- image_number = round(total_angle / image_angle)
-
- r = RotationScanRequest(
- start_omega_deg=self.standard.start_angle.value,
- incr_omega_deg=self.standard.image_angle.value,
- steps=image_number,
- exp_time_s=self.standard.image_time_enter.value,
- )
- self.standard_data_collection.emit(r)
- elif current_tab == self.helical:
- r = self.helical.get_request()
- if r is not None:
- self.standard_data_collection.emit(r)
- else:
- print("No matching tab found.")
+ raster_mgr.update_filename(self.file_path_panel.filename)
+ self.screening.update_filename(self.file_path_panel.filename)
+ self.file_path_panel.path_updated.connect(raster_mgr.update_filename)
+ self.file_path_panel.path_updated.connect(self.screening.update_filename)
@Slot(DAQStatusModel)
def update_daq_status(self, s: DAQStatusModel):
self.raster.update_daq_status(s)
- self.helical.update_daq_status(s)
diff --git a/gui/src/aaregui/panels/helical_scan_panel.py b/gui/src/aaregui/panels/helical_scan_panel.py
deleted file mode 100644
index 39191773..00000000
--- a/gui/src/aaregui/panels/helical_scan_panel.py
+++ /dev/null
@@ -1,133 +0,0 @@
-from PySide6.QtCore import Signal, Slot
-from PySide6.QtWidgets import (
- QWidget,
- QGridLayout,
- QLabel,
- QSizePolicy,
- QSpacerItem,
- QPushButton,
-)
-from aaredaqlib.coordinate import SmargonCoordinate
-from aaredaqlib.rotation_scan import RotationScanRequest
-from aaredaqlib.models import DAQStatusModel
-from aaredaqlib.sample_geometry import SampleGeometryModel
-
-from aaregui.widgets.number_line_edit import NumberLineEdit
-
-
-class HelicalDataCollectionPanel(QWidget):
- helical_scan = Signal(RotationScanRequest)
- show_helical_start = Signal(SmargonCoordinate)
- show_helical_end = Signal(SmargonCoordinate)
-
- def __init__(self, s: SampleGeometryModel, parent=None):
- super().__init__(parent)
- grid_layout = QGridLayout(self)
-
- self.__geom = s
- self.__steps = 100
-
- self.__image_time = 0.005
- self.__image_angle = 0.1
- self.__total_angle = 360.0
-
- self.__start = SmargonCoordinate()
- self.__end = SmargonCoordinate()
-
- 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)
- grid_layout.addWidget(QLabel("Å", parent=self), 0, 2)
-
- grid_layout.addWidget(QLabel("Detector distance", parent=self), 1, 0)
- self.dtz_enter = NumberLineEdit(60, 1000, decimals=2, default=120, parent=self)
- grid_layout.addWidget(self.dtz_enter, 1, 1)
- grid_layout.addWidget(QLabel("mm", parent=self), 1, 2)
-
- grid_layout.addWidget(QLabel("Beam transmission", parent=self), 2, 0)
- self.transmission_enter = NumberLineEdit(
- 0, 1.0, decimals=4, default=1.0, parent=self
- )
- grid_layout.addWidget(self.transmission_enter, 2, 1)
-
- grid_layout.addWidget(QLabel("Start angle", parent=self), 3, 0)
- self.start_angle = NumberLineEdit(-720, 719.0, 0, decimals=3, parent=self)
- grid_layout.addWidget(self.start_angle, 3, 1)
- grid_layout.addWidget(QLabel("°", parent=self), 3, 2)
-
- grid_layout.addWidget(QLabel("Total angle", parent=self), 4, 0)
- self.total_angle = NumberLineEdit(
- 0, 999.0, self.__total_angle, decimals=3, parent=self
- )
- grid_layout.addWidget(self.total_angle, 4, 1)
- grid_layout.addWidget(QLabel("°", parent=self), 4, 2)
-
- grid_layout.addWidget(QLabel("Image angle", parent=self), 5, 0)
- self.image_angle = NumberLineEdit(
- 0, 10.0, self.__image_angle, decimals=3, parent=self
- )
- grid_layout.addWidget(self.image_angle, 5, 1)
- grid_layout.addWidget(QLabel("°", parent=self), 5, 2)
-
- grid_layout.addWidget(QLabel("Image time", parent=self), 6, 0)
- self.image_time_enter = NumberLineEdit(
- 0.0005, 10.0, self.__image_time, decimals=4, parent=self
- )
- grid_layout.addWidget(self.image_time_enter, 6, 1)
- grid_layout.addWidget(QLabel("s", parent=self), 6, 2)
-
- start_button = QPushButton("Save start point", parent=self)
- start_button.clicked.connect(self.set_start_point_curr)
- grid_layout.addWidget(start_button, 7, 0, 1, 3)
-
- end_button = QPushButton("Save end point", parent=self)
- end_button.clicked.connect(self.set_end_point_curr)
- grid_layout.addWidget(end_button, 8, 0, 1, 3)
-
- horizontal_spacer = QSpacerItem(
- 40, 20, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding
- )
- grid_layout.addItem(horizontal_spacer, 9, 0, 1, 3)
-
- @Slot(DAQStatusModel)
- def update_daq_status(self, s: DAQStatusModel):
- self.__geom = s.geom
-
- @Slot()
- def set_end_point_curr(self):
- self.set_end_point(self.__geom.smargon)
-
- @Slot()
- def set_start_point_curr(self):
- self.set_start_point(self.__geom.smargon)
-
- @Slot(SmargonCoordinate)
- def set_start_point(self, s: SmargonCoordinate):
- self.__start = s
- if s.sh_mm is not None:
- self.start_angle.update_value(self.__geom.omega_deg)
- self.show_helical_start.emit(self.__start)
-
- @Slot(SmargonCoordinate)
- def set_end_point(self, s: SmargonCoordinate):
- self.__end = s
- self.show_helical_end.emit(self.__end)
-
-
- def get_request(self) -> RotationScanRequest | None:
- if self.__start.sh_mm is None or self.__end.sh_mm is None:
- return
-
- image_number = round(self.total_angle.value / self.image_angle.value)
-
- h = RotationScanRequest(
- start=self.__start,
- end=self.__end,
- start_omega_deg=self.start_angle.value,
- incr_omega_deg=self.image_angle.value,
- exp_time_s=self.image_time_enter.value,
- steps=image_number,
- )
- return h
diff --git a/gui/src/aaregui/panels/raster_data_collection.py b/gui/src/aaregui/panels/raster_data_collection.py
index a0d29ac4..54af6a0c 100644
--- a/gui/src/aaregui/panels/raster_data_collection.py
+++ b/gui/src/aaregui/panels/raster_data_collection.py
@@ -77,19 +77,10 @@ class RasterDataCollectionPanel(ScanSettingsPanel):
)
self._layout.addItem(horizontal_spacer, 7, 0, 1, 4)
- button_layout = QHBoxLayout()
-
- self.start_button = QPushButton("Start")
+ self.start_button = QPushButton("Evaluate grid")
self.start_button.setStyleSheet("color: rgb(78, 154, 6);")
- button_layout.addWidget(self.start_button)
self.start_button.clicked.connect(self.evaluate_grid)
-
- self.abort_button = QPushButton("Abort")
- self.abort_button.setStyleSheet("color: rgb(164, 0, 0);")
- button_layout.addWidget(self.abort_button)
-
- # Add the button layout to the main layout
- self._layout.addLayout(button_layout, 8, 0, 1, 5)
+ self._layout.addWidget(self.start_button, 8, 0, 1, 5)
self.update_grid_scan_size()
diff --git a/gui/src/aaregui/panels/rotation_data_collection.py b/gui/src/aaregui/panels/rotation_data_collection.py
new file mode 100644
index 00000000..bf6c8343
--- /dev/null
+++ b/gui/src/aaregui/panels/rotation_data_collection.py
@@ -0,0 +1,120 @@
+from PySide6.QtCore import Slot, Signal
+from PySide6.QtWidgets import QLabel, QComboBox, QPushButton
+
+from aaredaqlib.diffraction_geometry import DiffractionGeometry
+from aaredaqlib.rotation_scan import RotationScanRequest
+from aaregui.panels.scan_settings_panel import ScanSettingsPanel
+from aaregui.widgets.number_line_edit import NumberLineEdit
+
+
+class RotationDataCollectionPanel(ScanSettingsPanel):
+ rotation_scan = Signal(RotationScanRequest)
+
+ def __init__(self, diffraction: DiffractionGeometry,
+ default_dtz: float = 200.0,
+ default_transmission: float = 1.0,
+ parent=None):
+ super().__init__(parent=parent,
+ diffraction=diffraction,
+ default_dtz=default_dtz,
+ default_transmission=default_transmission)
+
+ self._filename = ""
+
+ self._layout.addWidget(QLabel("Start angle", parent=self), 3, 0)
+ self.start_angle = NumberLineEdit(-720, 720.0, 0.0, decimals=3, parent=self)
+ self._layout.addWidget(self.start_angle, 3, 1, 1, 3)
+ self._layout.addWidget(QLabel("°", parent=self), 3, 4)
+
+ self._layout.addWidget(QLabel("