From 4833b068297108a8cce8cb1f27e6051ba2ff5285 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Thu, 13 Nov 2025 10:19:04 +0100 Subject: [PATCH] DAQ - Fluorescence spectrum allows to set transmission + energy is set correctly --- common/src/aaredaqlib/models.py | 3 ++- daq/src/aaredaq/daq.py | 9 ++++++++- daq/src/mxlibs3/fluorimeter.py | 11 +++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/common/src/aaredaqlib/models.py b/common/src/aaredaqlib/models.py index c0afd544..ead6c054 100644 --- a/common/src/aaredaqlib/models.py +++ b/common/src/aaredaqlib/models.py @@ -410,7 +410,7 @@ class SimpleScanParameters(BaseModel): start_omega_deg:float = 0 incr_omega_deg: float = 0.2 steps: int = 1800 - transmission: float = 1.0 + transmission: Annotated[float, Field(ge=0.0, le=1.0)] = 1.0 class BeamMarkCoeffModel(BaseModel): @@ -431,6 +431,7 @@ class BeamMarkCoeffModel(BaseModel): class FluorescenceSpectrumParameterModel(BaseModel): acq_time_s: float + transmission: Annotated[float, Field(ge=0,le=1)] | None = None class FluorescenceSpectrumOutputModel(BaseModel): bkg: list[float] | None = None diff --git a/daq/src/aaredaq/daq.py b/daq/src/aaredaq/daq.py index 61e22e68..eae0ad00 100644 --- a/daq/src/aaredaq/daq.py +++ b/daq/src/aaredaq/daq.py @@ -1530,13 +1530,20 @@ class AareDAQ: def fluorimeter_take_spectrum(self, fm: FluorescenceSpectrumParameterModel) -> FluorescenceSpectrumOutputModel: self.__cfg.set_busy(BeamlineStateEnum.SampleAlignment) try: + if fm.transmission is not None: + self.__devs.transmission.set(fm.transmission, wait=True) + 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))] + + offset = self.__devs.fluorimeter.offset + slope = self.__devs.fluorimeter.slope # slope is in keV! + energy = [slope * 1000.0 * i + offset for i in range(len(spectrum))] + self.__cfg.state_busy = False return FluorescenceSpectrumOutputModel(spectrum=spectrum, bkg=self.__devs.fluorimeter.get_current_background(), diff --git a/daq/src/mxlibs3/fluorimeter.py b/daq/src/mxlibs3/fluorimeter.py index 75cab584..7b664729 100644 --- a/daq/src/mxlibs3/fluorimeter.py +++ b/daq/src/mxlibs3/fluorimeter.py @@ -45,6 +45,9 @@ class Fluorimeter(object): self.__roi_1 = self.get_roi(BEAMLINE, 1) #currently SiEsc self.__roi_2 = self.get_roi(BEAMLINE, 2) #currently MnKa + self.__calibration_offset = PV(f"{BEAMLINE}-ES-SiD:mca1.CALO") + self.__calibration_slope = PV(f"{BEAMLINE}-ES-SiD:mca1.CALS") + def get_roi(self, bl, roi_num:int): if roi_num not in [1, 2]: raise ValueError(f"Invalid ROI number: {roi_num}") @@ -157,6 +160,14 @@ class Fluorimeter(object): def average_dead_time(self): return self.__average_dead_time.get() + @property + def slope(self): + return self.__calibration_slope.get() + + @property + def offset(self): + return self.__calibration_offset.get() + @property def poll_time(self): return self.__poll_time_rbv.get()