DAQ - Fluorescence spectrum allows to set transmission + energy is set correctly

This commit is contained in:
leonarski_f committed 2025-11-13 10:19:04 +01:00
1 parent 2fffeef0cf
commit 4833b06829
3 files changed
+21 -2

No files matched your search

+2 -1
View File
@@ -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
+8 -1
View File
@@ -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(),
+11
View File
@@ -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()