diff --git a/daq/src/aaredaq/daq.py b/daq/src/aaredaq/daq.py index 9ba4eaef..fc9ffdd3 100644 --- a/daq/src/aaredaq/daq.py +++ b/daq/src/aaredaq/daq.py @@ -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