Omega timeout catch added
This commit is contained in:
+51
-16
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user