DAQ - Fluorescence spectrum allows to set transmission + energy is set correctly
This commit is contained in:
1 parent
2fffeef0cf
commit
4833b06829
3 files changed
+21
-2
No files matched your search
@@ -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
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in new issue
Block a user