DAQ/GUI - Fluorescence spectrum in a single call

This commit is contained in:
2025-11-13 09:01:05 +01:00
parent 2021cf8cf0
commit 2fffeef0cf
6 changed files with 76 additions and 46 deletions
+23 -1
View File
@@ -3,6 +3,7 @@ import json
import math
import statistics
import time
from asyncio import sleep
from datetime import datetime
from math import ceil
from typing import List, Tuple, Optional, Callable, Dict
@@ -34,7 +35,8 @@ from aaredaqlib.models import (
PuckLoadedInfo,
SampleShortInfoList,
DAQStatusModel, BeamlineStatus, SessionStatus, SampleCameraSettings, AutofocusSettings, BoundingBoxModel,
ZoomModeEnum, CrystalSize, SimpleScanParameters, MLBoxModel)
ZoomModeEnum, CrystalSize, SimpleScanParameters, MLBoxModel, FluorescenceSpectrumParameterModel,
FluorescenceSpectrumOutputModel)
from aaredaqlib.raster_grid import RasterGridRequest, CompletedRasterGrid, CompletedRasterGridElem
from aaredaqlib.rotation_scan import RotationScanRequest, CompletedRotationScan
from aaredaqlib.sample_geometry import SampleGeometryModel
@@ -1525,11 +1527,31 @@ class AareDAQ:
finally:
self.__cfg.state_busy = False
def fluorimeter_take_spectrum(self, fm: FluorescenceSpectrumParameterModel) -> FluorescenceSpectrumOutputModel:
self.__cfg.set_busy(BeamlineStateEnum.SampleAlignment)
try:
self.__devs.fluorimeter.start_acquisition(erase=True)
self.__devs.aerotech.set_shutter(1)
sleep(fm.acq_time_s)
self.__devs.aerotech.set_shutter(0)
self.__devs.fluorimeter.stop_acquisition()
spectrum = self.__devs.fluorimeter.get_current_data()
energy = [1.0 * i + 0.0 for i in range(len(spectrum))]
self.__cfg.state_busy = False
return FluorescenceSpectrumOutputModel(spectrum=spectrum,
bkg=self.__devs.fluorimeter.get_current_background(),
energy_eV=energy)
except Exception as e:
self.__cfg.state_busy = False
raise e
def fluorimeter_start(self, erase: bool = False):
self.__devs.aerotech.set_shutter(1)
self.__devs.fluorimeter.start_acquisition(erase=erase)
def fluorimeter_stop(self):
self.__devs.fluorimeter.stop_acquisition()
self.__devs.aerotech.set_shutter(0)
def fluorimeter_status(self) -> int | None:
return self.__devs.fluorimeter.check_status()
+8 -2
View File
@@ -10,7 +10,8 @@ from aaredaqlib.coordinate import SmargonCoordinate, Coordinate
from aaredaqlib.logger_config import setup_logger
from aaredaqlib.models import SampleShortInfo, DAQStatusModel, BeamlineStateEnum, BeamlineSettingsModel, \
SampleShortInfoList, SessionStatus, SampleCameraSettings, AutofocusSettings, TokenData, \
CryojetSettingsModel, SimpleScanParameters, CrystalSize
CryojetSettingsModel, SimpleScanParameters, CrystalSize, FluorescenceSpectrumParameterModel, \
FluorescenceSpectrumOutputModel
from aaredaqlib.raster_grid import RasterGridRequest, CompletedRasterGrid
from aaredaqlib.rotation_scan import RotationScanRequest, CompletedRotationScan
from aaredaqlib.sample_geometry import SampleGeometryModel
@@ -546,10 +547,15 @@ async def get_all_pgroups(token: str = Depends(oauth2_scheme)):
logger.error(f"Failed to list pgroups: {e}")
return []
@app.post("/fluorimeter/spectrum")
async def fluorimeter_spectrum(input: FluorescenceSpectrumParameterModel, token: str = Depends(oauth2_scheme)) -> FluorescenceSpectrumOutputModel:
auth.check_jwt_rw(cfg, auth.parse_token(token))
return daq.fluorimeter_take_spectrum(input)
@app.post("/fluorimeter/start")
async def fluorimeter_start(erase: bool = False, token: str = Depends(oauth2_scheme)) -> str:
auth.check_jwt_rw(cfg, auth.parse_token(token))
daq.fluorimeter_start(erase=erase)
daq.fluorimeter_start(erase)
return "OK"
@app.post("/fluorimeter/stop")