From d321d219a3c1f1090c0961ae35bb7937dced71e0 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Thu, 13 Nov 2025 10:56:33 +0100 Subject: [PATCH] GUI: Fluorescence improvements --- common/src/aaredaqlib/models.py | 1 + daq/src/aaredaq/daq.py | 23 ++++++++----------- gui/src/aaregui/main_window.py | 3 ++- .../panels/fluorescence_data_collection.py | 14 +++++++---- ...resence_panel.py => fluorescence_panel.py} | 1 + 5 files changed, 23 insertions(+), 19 deletions(-) rename gui/src/aaregui/panels/{fluoresence_panel.py => fluorescence_panel.py} (99%) diff --git a/common/src/aaredaqlib/models.py b/common/src/aaredaqlib/models.py index ead6c054..0f91fdbb 100644 --- a/common/src/aaredaqlib/models.py +++ b/common/src/aaredaqlib/models.py @@ -430,6 +430,7 @@ class BeamMarkCoeffModel(BaseModel): ) class FluorescenceSpectrumParameterModel(BaseModel): + erase: bool = True acq_time_s: float transmission: Annotated[float, Field(ge=0,le=1)] | None = None diff --git a/daq/src/aaredaq/daq.py b/daq/src/aaredaq/daq.py index eae0ad00..196dc9f6 100644 --- a/daq/src/aaredaq/daq.py +++ b/daq/src/aaredaq/daq.py @@ -1,21 +1,16 @@ import copy import json -import math -import statistics +import secrets import time -from asyncio import sleep from datetime import datetime from math import ceil -from typing import List, Tuple, Optional, Callable, Dict -import secrets -import os +from typing import List, Tuple, Optional import cv2 import numpy as np import redis -from scipy import ndimage -from scipy.optimize import curve_fit +import aaredaqlib.face_detection as fd from aaredaq import workflows from aaredaq.aaredb import AareWrapper from aaredaq.autofocus import calculate_focus_measure @@ -26,16 +21,15 @@ from aaredaq.mlbox import MlBox from aaredaqlib.beamline import MXBeamline from aaredaqlib.coordinate import Coordinate, SmargonCoordinate from aaredaqlib.diffraction_geometry import DiffractionGeometry -import aaredaqlib.face_detection as fd -from aaredaqlib.logger_config import setup_logger from aaredaqlib.find_xtal import raster_centre_of_mass, create_quality_filtered_array, identify_crystal_raster, \ get_result_list_from_com, get_best_b_factor, get_best_res, get_xtal_size +from aaredaqlib.logger_config import setup_logger from aaredaqlib.models import ( SampleShortInfo, PuckLoadedInfo, SampleShortInfoList, - DAQStatusModel, BeamlineStatus, SessionStatus, SampleCameraSettings, AutofocusSettings, BoundingBoxModel, - ZoomModeEnum, CrystalSize, SimpleScanParameters, MLBoxModel, FluorescenceSpectrumParameterModel, + DAQStatusModel, BeamlineStatus, SessionStatus, SampleCameraSettings, AutofocusSettings, ZoomModeEnum, CrystalSize, + SimpleScanParameters, MLBoxModel, FluorescenceSpectrumParameterModel, FluorescenceSpectrumOutputModel) from aaredaqlib.raster_grid import RasterGridRequest, CompletedRasterGrid, CompletedRasterGridElem from aaredaqlib.rotation_scan import RotationScanRequest, CompletedRotationScan @@ -1533,11 +1527,12 @@ class AareDAQ: if fm.transmission is not None: self.__devs.transmission.set(fm.transmission, wait=True) - self.__devs.fluorimeter.start_acquisition(erase=True) + self.__devs.fluorimeter.start_acquisition(erase=fm.erase) self.__devs.aerotech.set_shutter(1) - sleep(fm.acq_time_s) + time.sleep(fm.acq_time_s) self.__devs.aerotech.set_shutter(0) self.__devs.fluorimeter.stop_acquisition() + time.sleep(0.2) spectrum = self.__devs.fluorimeter.get_current_data() offset = self.__devs.fluorimeter.offset diff --git a/gui/src/aaregui/main_window.py b/gui/src/aaregui/main_window.py index 83251ea3..b341b6c8 100644 --- a/gui/src/aaregui/main_window.py +++ b/gui/src/aaregui/main_window.py @@ -36,7 +36,7 @@ from aaregui.widgets.camera_image import SampleCameraImageLabel from aaregui.widgets.no_wheel_scroll_area import NoWheelScrollArea from aaregui.widgets.status_bar import StatusBar from aaregui.widgets.video_image import VideoGraphicsView -from aaregui.panels.fluoresence_panel import FluorescencePanel +from aaregui.panels.fluorescence_panel import FluorescencePanel logger = setup_logger("aareGUI") @@ -358,6 +358,7 @@ class MainWindow(QMainWindow): self.data_collection.fluo.fluo_scan.connect(self.daq.fluorimeter_spectrum) self.daq.fluorimeter_spectrum_update.connect(self.fluor_panel.update_plot) + self.daq.fluorimeter_spectrum_update.connect(lambda: self.fluor_panel_dock.setVisible(True)) def create_menu_bar(self): """Create a menu bar with File->Quit and Help->About.""" diff --git a/gui/src/aaregui/panels/fluorescence_data_collection.py b/gui/src/aaregui/panels/fluorescence_data_collection.py index 1baaa27e..bf112e50 100644 --- a/gui/src/aaregui/panels/fluorescence_data_collection.py +++ b/gui/src/aaregui/panels/fluorescence_data_collection.py @@ -1,5 +1,5 @@ from PySide6.QtCore import Signal, Slot -from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QPushButton +from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QPushButton, QCheckBox from aaredaqlib.models import FluorescenceSpectrumParameterModel from aaregui.widgets.number_line_edit import NumberLineEdit @@ -24,13 +24,18 @@ class FluorescenceDataCollectionPanel(QWidget): lay.addWidget(self.exposure, 1, 1) lay.addWidget(QLabel("s", self), 1, 2) + # Accumulate checkbox (reverse of erase) + self.accumulate_cb = QCheckBox("Accumulate", self) # accumulate=True => erase=False + self.accumulate_cb.setChecked(False) + lay.addWidget(self.accumulate_cb, 2, 0, 1, 3) + # Add vertical stretch - lay.setRowStretch(2, 1) + lay.setRowStretch(3, 1) # Run button self.run_btn = QPushButton("Run fluorescence", self) self.run_btn.setStyleSheet("color: rgb(78, 154, 6);") - lay.addWidget(self.run_btn, 3, 0, 1, 3) + lay.addWidget(self.run_btn, 4, 0, 1, 3) self.run_btn.clicked.connect(self._emit_params) @@ -38,4 +43,5 @@ class FluorescenceDataCollectionPanel(QWidget): def _emit_params(self): t = float(self.transmission.value) exp = float(self.exposure.value) - self.fluo_scan.emit(FluorescenceSpectrumParameterModel(acq_time_s=exp, transmission=t)) + erase = not self.accumulate_cb.isChecked() + self.fluo_scan.emit(FluorescenceSpectrumParameterModel(acq_time_s=exp, transmission=t, erase=erase)) diff --git a/gui/src/aaregui/panels/fluoresence_panel.py b/gui/src/aaregui/panels/fluorescence_panel.py similarity index 99% rename from gui/src/aaregui/panels/fluoresence_panel.py rename to gui/src/aaregui/panels/fluorescence_panel.py index 51741f92..7ebb9722 100644 --- a/gui/src/aaregui/panels/fluoresence_panel.py +++ b/gui/src/aaregui/panels/fluorescence_panel.py @@ -13,6 +13,7 @@ class FluorescencePanel(QWidget): def __init__(self, parent=None): super().__init__(parent) + self.setMinimumWidth(300) grid = QGridLayout(self) # Replace Matplotlib with Qt Charts