GUI: Fluorescence improvements

This commit is contained in:
2025-11-13 10:56:33 +01:00
parent 5ca8ad9f64
commit d321d219a3
5 changed files with 23 additions and 19 deletions
+1
View File
@@ -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
+9 -14
View File
@@ -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
+2 -1
View File
@@ -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."""
@@ -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))
@@ -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