DAQ: Deconvolute beam mark / beam center

This commit is contained in:
2025-06-13 11:33:39 +02:00
parent 3988c345c9
commit ca69bb0094
8 changed files with 82 additions and 31 deletions
+9 -9
View File
@@ -9,7 +9,7 @@ import redis_lock
from aaredaqlib.coordinate import Coordinate
from aaredaqlib.models import (
BeamlineSettingsModel,
BeamCenterCoeffModel,
BeamMarkCoeffModel,
LoopCenteringZoomModel,
def_loop_centering_zoom,
SampleShortInfo,
@@ -241,16 +241,16 @@ class BeamlineConfig:
self.__client.set(f"{self.__bl}:current_sample", sample.model_dump_json())
@property
def beam_center_coeff(self) -> BeamCenterCoeffModel:
def beam_mark_coeff(self) -> BeamMarkCoeffModel:
tmp = self.__client.get(f"{self.__bl}:beam_center_camera")
if tmp is None:
return BeamCenterCoeffModel()
return BeamMarkCoeffModel()
data_dict = json.loads(tmp)
return BeamCenterCoeffModel(**data_dict)
return BeamMarkCoeffModel(**data_dict)
@beam_center_coeff.setter
def beam_center_coeff(self, data: BeamCenterCoeffModel):
@beam_mark_coeff.setter
def beam_mark_coeff(self, data: BeamMarkCoeffModel):
self.__client.set(f"{self.__bl}:beam_center_camera", data.model_dump_json())
@property
@@ -343,14 +343,14 @@ class BeamlineConfig:
x_pxls.append(float(json.loads(v)["x"]))
y_pxls.append(float(json.loads(v)["y"]))
model = BeamCenterCoeffModel(
model = BeamMarkCoeffModel(
coeff_x=tuple(np.polyfit(zooms, x_pxls, deg=2)),
coeff_y=tuple(np.polyfit(zooms, y_pxls, deg=2)),
)
self.beam_center_coeff = model
self.beam_mark_coeff = model
def get_beam_mark(self, zoom: float) -> tuple[float, float]:
model = self.beam_center_coeff
model = self.beam_mark_coeff
x_pxl = np.polyval(model.coeff_x, zoom)
y_pxl = np.polyval(model.coeff_y, zoom)
return float(x_pxl), float(y_pxl)
+15 -8
View File
@@ -389,7 +389,7 @@ class AareDAQ:
zoom = self.__devs.zoom
abr_pos = self.__cfg.abr_meas_pos
return SampleGeometryModel(
beam_location_pxl=self.__cfg.beam_center_coeff.apply(zoom),
beam_location_pxl=self.__cfg.beam_mark_coeff.apply(zoom),
pixel_in_mm=self.__cfg.pixel_to_mm(zoom),
omega_deg=self.__devs.aerotech.omega,
smargon=self.__devs.smargon.readback,
@@ -399,11 +399,18 @@ class AareDAQ:
y=self.__devs.gmy.value - abr_pos.y,
z=self.__devs.gmz.value - abr_pos.z,
),
aerotech_meas=self.__devs.abr_pos,
detector_radius_mm = 115.0 # PILATUS4 2M / JUNGFRAU 9M
aerotech_meas=self.__devs.abr_pos
)
def get_beam_center(self):
@property
def beam_center(self) -> Tuple[float, float]:
return self.__cfg.beam_center
@beam_center.setter
def beam_center(self, val: Tuple[float, float]):
self.__cfg.beam_center = val
def get_beam_mark(self):
return self.__cfg.get_beam_mark(self.__devs.zoom)
def listen_changes(self) -> redis.client.PubSub:
@@ -603,10 +610,10 @@ class AareDAQ:
)
)
self.__rotation(
RotationScanRequest(total_omega_deg=360,
start_omega_deg=0,
total_time_sec=18))
#self.__rotation(
# RotationScanRequest(total_omega_deg=360,
# start_omega_deg=0,
# total_time_sec=18))
self.save_screenshot_db(sample.db_id, "after_dc.jpeg")
+9 -3
View File
@@ -98,19 +98,25 @@ async def save_abr_meas_pos(token: str = Depends(oauth2_scheme)):
return "OK"
@app.post("/beam_center/mark")
@app.post("/beam_mark/add")
async def mark_beam_center(x: float, y: float, token: str = Depends(oauth2_scheme)):
auth.check_jwt_staff(auth.parse_token(token))
daq.mark_beam(x, y)
return "OK"
@app.post("/beam_center/clear")
async def clear_beam_center(token: str = Depends(oauth2_scheme)):
@app.post("/beam_mark/clear")
async def clear_beam_mark(token: str = Depends(oauth2_scheme)):
auth.check_jwt_staff(auth.parse_token(token))
daq.clear_mark_beam()
return "OK"
@app.post("/beamline/beam_center")
async def beam_center(x: float, y: float, token: str = Depends(oauth2_scheme)):
auth.check_jwt_staff(auth.parse_token(token))
daq.beam_center = (x, y)
return "OK"
@app.put("/beamline/samcam")
async def samcam_settings(s: SampleCameraSettings, token: str = Depends(oauth2_scheme)):
auth.check_jwt_rw(cfg, auth.parse_token(token))