Omega timeout catch added

This commit is contained in:
2025-12-04 10:52:36 +01:00
parent 7c5360beb0
commit 72c16ca0a1
+51 -16
View File
@@ -172,13 +172,18 @@ class AareDAQ:
def omega(self, val: float):
self.__cfg.set_busy(BeamlineStateEnum.SampleAlignment)
self.__saved_box = None
if -720 < val < 720:
self.__devs.aerotech.move(val, wait=True, speed=180.0, direct=True)
self.__cfg.state_busy = False
if -2000 < val < 2000:
try:
self.__devs.aerotech.move(val, wait=True, speed=180.0, direct=True)
self.__cfg.state_busy = False
except Exception as e:
logger.error(f"Omega error: {e}")
self.__cfg.state_busy = False
logger.error("Omega move timed out")
else:
self.__cfg.state_busy = False
logger.error("Omega has to be between -720 and 720 degrees")
raise ValueError("Omega has to be between -720 and 720 degrees (for now)")
logger.error("Omega has to be between -2000 and 2000 degrees")
raise ValueError("Omega has to be between -2000 and 2000 degrees (for now)")
@property
def zoom(self) -> float:
@@ -512,7 +517,7 @@ class AareDAQ:
if r.dtz is not None:
self.__cfg.dtz = r.dtz
self.__devs.reflector_up = False
self.__set_state(BeamlineStateEnum.DataCollection)
save_smargon_position = self.__devs.smargon.readback
@@ -595,22 +600,26 @@ class AareDAQ:
if self.sample is not None and self.sample.db_id is not None and result is not None:
self.__devs.reflector_up = True
time.sleep(0.1)
logger.info(f"requesting screenshot to db")
self.save_screenshot_db(self.sample.db_id, f"post_raster_{r.omega_deg}deg")
if com and hasattr(com, "max_image"):
diffraction_image_filename = f"{self.sample.db_id}_best_diffraction_from_raster_image_{com.max_image}"
diffraction_image = self.__jfjoch.get_diffraction_image(com.max_image)
self.__aare.upload_jpg(self.sample.db_id, diffraction_image_filename, diffraction_image)
try:
logger.info(f"ingest gridscan")
self.__aare.ingest_gridscan(sample = self.sample, raster_result =result,
raster_request = r, geom = self.sample_geometry,
com = com, beam_mark_pxl=self.__cfg.get_beam_mark(self.zoom))
except Exception as e:
logger.error(f"Exception ingesting grid scan: {e}")
self.__devs.reflector_up = False
#self.__devs.reflector_up = False
return CompletedRasterGridElem(request=copy.deepcopy(r), result=result, centre_of_mass=com)
def measure_raster(self, r: RasterGridRequest, auto: bool) -> CompletedRasterGrid:
self.__cfg.try_set_busy(timeout=ceil(360))
logger.info(f"requesting to measuree raster")
try:
if auto:
result = self.__auto_center(r)
@@ -642,12 +651,13 @@ class AareDAQ:
self.__devs.transmission.set(request.transmission, wait=False)
if request.start is not None:
logger.info(f"requesting smargon to move")
self.__devs.smargon.target = request.start
logger.info(f"waiting for transmission")
self.__devs.transmission.wait()
if request.start is not None:
logger.info(f"WAITING FOR SMARGON")
self.__devs.smargon.wait()
status = self.status
self.__jfjoch.measure_rotation(request, status, self.__cfg.xrf)
self.__aare.create_rotation_run(self.sample, request, status)
@@ -656,21 +666,22 @@ class AareDAQ:
self.save_screenshot_db(self.sample.db_id, "before_dc")
if request.screening:
logger.info(f"STARTING SCREENING")
self.__devs.aerotech.measure_screening(request.start_omega_deg,
request.wedge_omega_deg,
request.exp_time_s,
request.incr_omega_deg,
request.steps)
logger.info(f"WAITING FOR AEROTECH SCAN DONE")
self.__devs.aerotech.wait_scan_done(request.exp_time_s * request.steps + 60)
else:
total_omega = request.incr_omega_deg * request.steps
total_time = request.exp_time_s * request.steps
logger.info(f"requesting AEROTECH MEASURE STANDARD")
self.__devs.aerotech.measure_standard(
request.start_omega_deg, total_omega, total_time
)
if request.start is not None and request.end is not None:
smargon_time_step = request.time_sec / float(request.steps)
pos_step = (request.end.sh_mm - request.start.sh_mm) * (1.0 / float(request.steps))
@@ -680,14 +691,17 @@ class AareDAQ:
sh_mm=request.start.sh_mm + pos_step * i
)
time.sleep(smargon_time_step)
logger.info(f"waiting aerotech done")
self.__devs.aerotech.wait_scan_done(total_time + 60)
logger.info(f"aerotech reset")
self.__devs.aerotech.reset()
logger.info(f"waiting for jfjoch")
result = self.__jfjoch.wait_till_done(60)
logger.info("send info to db")
self.__aare.sample_collected(self.sample)
if self.sample is not None and self.sample.db_id is not None:
logger.info("sending screenshot to db")
self.save_screenshot_db(self.sample.db_id, "after_dc")
return CompletedRotationScan(request=copy.deepcopy(request), result=result)
@@ -790,6 +804,7 @@ class AareDAQ:
@property
def sample_geometry(self) -> SampleGeometryModel:
startTime = time.perf_counter()
zoom = self.__devs.zoom
abr_pos = self.__cfg.abr_meas_pos
try:
@@ -807,6 +822,8 @@ class AareDAQ:
aerotech=aerotech_coord,
aerotech_meas=self.__devs.abr_pos
)
endTime = time.perf_counter()
#logger.debug(f"sample geometry calculation took {endTime - startTime:.2f} seconds")
return sample_geom
except Exception as e:
@@ -815,6 +832,8 @@ class AareDAQ:
test_x = self.__devs.gmx.value - abr_pos.x
print(f"Error creating sample geometry model: {e}")
print(f"Error not ABR, check smargon then restart server")
endTime = time.perf_counter()
logger.debug(f"sample geometry calculation failed but took {endTime - startTime:.2f} seconds")
raise Exception(f"Error getting sample geometry {e}")
except:
@@ -824,6 +843,8 @@ class AareDAQ:
print("!!!!! IF NOT RESTART GUI !!!!!")
print("CLOSING EXPERIMENTAL HUCTH FOR SAFETY")
self.__devs.exp_shutter.close()
endTime = time.perf_counter()
logger.debug(f"sample geometry calculation failed but took {endTime - startTime:.2f} seconds")
return SampleGeometryModel(
beam_location_pxl=self.__cfg.beam_mark_coeff.apply(zoom),
pixel_in_mm=self.__cfg.pixel_to_mm(zoom),
@@ -1508,8 +1529,11 @@ class AareDAQ:
@property
def diffraction_geometry(self) -> DiffractionGeometry:
start = time.perf_counter()
det_cfg = self.__jfjoch.detector()
return DiffractionGeometry(
end = time.perf_counter()
#logger.debug(f"det_cfg - polling jfjoch: {end - start}")
d = DiffractionGeometry(
energy_keV=self.__devs.energy_kev,
dtz_mm=self.__devs.dtz.value,
detector_size_pxl=(det_cfg.width, det_cfg.height),
@@ -1520,10 +1544,14 @@ class AareDAQ:
poni_rot1_rad=-0.001396263,
poni_rot2_rad=-0.003839724,
)
end = time.perf_counter()
#logger.debug(f"diffraction_geometry: {end - start}")
return d
@property
def beamline_status(self) -> BeamlineStatus:
return BeamlineStatus(
startTime = time.perf_counter()
b= BeamlineStatus(
ring_current_mA=self.__devs.ring_current,
light=self.light,
cryojet_K=self.__devs.cryojet_temp,
@@ -1538,9 +1566,16 @@ class AareDAQ:
dtz_min=self.__devs.dtz_low,
dtz_max=self.__devs.dtz_high,
)
endTime = time.perf_counter()
#logger.debug(f"beamline_status call {endTime-startTime}")
return b
@property
def status(self) -> DAQStatusModel:
startTime = time.perf_counter()
js = self.__jfjoch.status()
endTime = time.perf_counter()
#logger.debug(f"jfjoch_status_call {endTime-startTime}")
# session is initialised here and set by FastAPI server
return DAQStatusModel(
state=self.state,
@@ -1551,7 +1586,7 @@ class AareDAQ:
session=SessionStatus(),
diffraction=self.diffraction_geometry,
box=self.__saved_box,
jfjoch_status = self.__jfjoch.status(),
jfjoch_status = js,
last_best_res = self.__cfg.last_best_res,
last_best_b_factor = self.__cfg.last_best_b_factor,
crystal_size = self.__cfg.crystal_size