diff --git a/gui/src/aaregui/main_window.py b/gui/src/aaregui/main_window.py index 9dda03a8..180d4491 100644 --- a/gui/src/aaregui/main_window.py +++ b/gui/src/aaregui/main_window.py @@ -172,6 +172,9 @@ 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.raster.grid_scan_size_changed.connect(self.data_collection.raster.grid_scan_size_change) diff --git a/gui/src/aaregui/panels/file_path_panel.py b/gui/src/aaregui/panels/file_path_panel.py index 66881866..dc473d5e 100644 --- a/gui/src/aaregui/panels/file_path_panel.py +++ b/gui/src/aaregui/panels/file_path_panel.py @@ -1,21 +1,108 @@ -from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QLineEdit +from datetime import datetime + +from PySide6.QtCore import Signal, Slot +from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QLineEdit, QSpinBox, QCheckBox from aaregui.widgets.title_label import TitleLabel class FilePathPanel(QWidget): + path_updated = Signal(str) + def __init__(self, parent=None): super().__init__(parent) grid_layout = QGridLayout(self) + self.__filename = "" + self.__formatted_date = datetime.now().strftime('%y%m%d') grid_layout.addWidget(TitleLabel("Dataset path", self), 0, 0, 1, 2) - grid_layout.addWidget(QLabel("Directory", parent=self), 1, 0) - self.directory_edit = QLineEdit(parent=self) - self.directory_edit.setStyleSheet("background-color: rgb(255, 255, 255);") - grid_layout.addWidget(self.directory_edit, 1, 1) + self.save_file_checkbox = QCheckBox("Save data to file system", parent=self) + self.save_file_checkbox.setChecked(True) + self.save_file_checkbox.stateChanged.connect(self.update_filename) + self.save_file_checkbox.setToolTip("If not checked, images will be viewable in the preview interface, but no file will be saved on file system.") + grid_layout.addWidget(self.save_file_checkbox, 1, 0, 1, 2) - grid_layout.addWidget(QLabel("File prefix", parent=self), 2, 0) + grid_layout.addWidget(QLabel("Directory", parent=self), 2, 0) + self.directory_edit = QLineEdit("{date}", parent=self) + self.directory_edit.setStyleSheet("background-color: rgb(255, 255, 255);") + self.directory_edit.setToolTip("Provide subdirectory for your files, you can use \"{date}\" as macro for date.") + grid_layout.addWidget(self.directory_edit, 2, 1) + + grid_layout.addWidget(QLabel("File prefix", parent=self), 3, 0) self.file_prefix_edit = QLineEdit(parent=self) self.file_prefix_edit.setStyleSheet("background-color: rgb(255, 255, 255);") - grid_layout.addWidget(self.file_prefix_edit, 2, 1) + grid_layout.addWidget(self.file_prefix_edit, 3, 1) + + grid_layout.addWidget(QLabel("Run number", parent=self), 4, 0) + self.run_number_edit = QSpinBox(parent=self) + self.run_number_edit.setStyleSheet("background-color: rgb(255, 255, 255);") + self.run_number_edit.setValue(1) + self.run_number_edit.setRange(1, 999) + grid_layout.addWidget(self.run_number_edit, 4, 1) + + grid_layout.addWidget(QLabel("File name", parent=self), 5, 0) + self.file_name_label = QLabel(parent=self) + self.file_name_label.setWordWrap(True) + grid_layout.addWidget(self.file_name_label, 5, 1) + + self.directory_edit.textChanged.connect(self.set_directory) + self.file_prefix_edit.textChanged.connect(self.set_file_prefix) + self.run_number_edit.valueChanged.connect(self.set_run_number) + self.update_filename() + + def update_filename(self): + if not self.save_file_checkbox.isChecked(): + self.__filename = "" + self.file_name_label.setText("No file will be saved.") + self.file_name_label.setStyleSheet("color: rgb(128, 128, 128);") + self.path_updated.emit(self.__filename) + return + + dir_name = self.directory_edit.text() + file_prefix = self.file_prefix_edit.text() + run_number = self.run_number_edit.value() + + if dir_name == "": + self.__filename = "" + elif dir_name[-1] == "/": + self.__filename = dir_name + else: + self.__filename = dir_name + "/" + + if file_prefix == "": + self.__filename += "run" + else: + self.__filename += file_prefix + + self.__filename += f"_{run_number:03d}" + self.__filename = self.__filename.replace('{date}', self.__formatted_date) + + self.file_name_label.setText(self.__filename + "_master.h5") + self.file_name_label.setStyleSheet("color: rgb(0, 0, 0);") + self.path_updated.emit(self.__filename) + + @Slot() + def increment_run_number(self): + self.run_number_edit.setValue(self.run_number_edit.value() + 1) + self.update_filename() + + @Slot() + def reset_run_number(self): + self.run_number_edit.setValue(1) + + @Slot(str) + def set_directory(self, _: str): + self.update_filename() + + @Slot(str) + def set_file_prefix(self, _: str): + self.update_filename() + + @Slot(int) + def set_run_number(self, _: int): + self.update_filename() + + @property + def filename(self) -> str: + return self.__filename \ No newline at end of file diff --git a/gui/src/aaregui/scan_logic/raster_grid_manager.py b/gui/src/aaregui/scan_logic/raster_grid_manager.py index e9932d15..34e8085d 100644 --- a/gui/src/aaregui/scan_logic/raster_grid_manager.py +++ b/gui/src/aaregui/scan_logic/raster_grid_manager.py @@ -228,3 +228,7 @@ class RasterGridManager(QObject): @Slot(float) def update_dtz(self, dtz: float): self.__active_grid.dtz = dtz + + @Slot(str) + def update_filename(self, filename: str): + self.__active_grid.file_prefix = filename \ No newline at end of file