DAQ: Save Fluorescence for rotation scan

This commit is contained in:
2025-11-13 11:42:52 +01:00
parent b3502e722a
commit c0164645a9
3 changed files with 34 additions and 5 deletions
+17 -1
View File
@@ -14,7 +14,8 @@ from aaredaqlib.models import (
zoom_manager,
SampleShortInfo,
SessionStatus,
BeamlineStateEnum, SessionsStateEnum, SampleShortInfoList, CryojetSettingsModel, ZoomModel
BeamlineStateEnum, SessionsStateEnum, SampleShortInfoList, CryojetSettingsModel, ZoomModel,
FluorescenceSpectrumOutputModel
)
from aaredaqlib.beamline import MXBeamline
@@ -446,6 +447,21 @@ class BeamlineConfig:
def dtz(self, dtz: float):
self.__client.set(f"{self.__bl}:dtz", dtz)
@property
def xrf(self) -> FluorescenceSpectrumOutputModel | None:
tmp = self.__client.get(f"{self.__bl}:xrf")
if tmp is None:
return None
data_dict = json.loads(tmp)
return FluorescenceSpectrumOutputModel(**data_dict)
@xrf.setter
def xrf(self, data: FluorescenceSpectrumOutputModel | None):
if data is None:
self.__client.delete(f"{self.__bl}:xrf")
else:
self.__client.set(f"{self.__bl}:xrf", data.model_dump_json())
def clear_mark_beam(self):
self.__client.delete(f"{self.__bl}:beam_mark")
+5 -1
View File
@@ -396,6 +396,7 @@ class AareDAQ:
self.crystal_size = CrystalSize(x=0, y=0, z=0)
self.last_best_b_factor = None
self.last_best_res = None
self.__cfg.xrf = None
if curr_sample is not None and curr_sample.location is None:
self.__cfg.current_sample = None
@@ -626,7 +627,7 @@ class AareDAQ:
self.__devs.smargon.wait()
status = self.status
self.__jfjoch.measure_rotation(request, status)
self.__jfjoch.measure_rotation(request, status, self.__cfg.xrf)
self.__aare.create_rotation_run(self.sample, request, status)
if self.sample is not None and self.sample.db_id is not None:
@@ -1545,6 +1546,9 @@ class AareDAQ:
bkg=self.__devs.fluorimeter.get_current_background(),
energy_eV=energy,
average_dead_time=self.__devs.fluorimeter.average_dead_time() / 100.0)
if self.sample is not None:
self.__cfg.xrf = fluo_output
self.__set_state(BeamlineStateEnum.SampleAlignment)
self.__cfg.state_busy = False
return fluo_output
+12 -3
View File
@@ -4,7 +4,7 @@ import jfjoch_client
from aaredaqlib.beamline import MXBeamline
from aaredaqlib.diffraction_geometry import DiffractionGeometry
from aaredaqlib.models import SampleShortInfo, DAQStatusModel
from aaredaqlib.models import SampleShortInfo, DAQStatusModel, FluorescenceSpectrumOutputModel
from aaredaqlib.raster_grid import RasterGridRequest
from aaredaqlib.rotation_scan import RotationScanRequest
@@ -34,7 +34,8 @@ class JFJochWrapper:
def measure_rotation(self,
r: RotationScanRequest,
s: DAQStatusModel) -> None:
s: DAQStatusModel,
f: FluorescenceSpectrumOutputModel | None = None) -> None:
if s.sample is None:
pgroup = "p16371"
sample = "unknown_sample"
@@ -62,6 +63,13 @@ class JFJochWrapper:
images = r.steps
trigger = 1
xrf = None
if f is not None:
xrf = jfjoch_client.DatasetSettingsXrayFluorescenceSpectrum(
energy_eV=f.energy_eV,
data=f.spectrum
)
dataset_settings = jfjoch_client.DatasetSettings(
beam_x_pxl=s.diffraction.beam_center_pxl[0],
beam_y_pxl=s.diffraction.beam_center_pxl[1],
@@ -81,7 +89,8 @@ class JFJochWrapper:
poni_rot2_rad=s.diffraction.poni_rot2_rad,
total_flux=s.bl.flux_ph_s,
max_spot_count=1000,
detect_ice_rings=True
detect_ice_rings=True,
xray_fluorescence_spectrum=xrf
)
self.__api.start_post(dataset_settings=dataset_settings)