From 7ceeb8fcc2aec02c4697a56ce6f3c7bace9f1fa8 Mon Sep 17 00:00:00 2001 From: appleb_m Date: Tue, 31 Mar 2026 17:18:24 +0200 Subject: [PATCH] daq: changes to handle mount failures and temp changes for automation tests --- src/aare/daq/daq.py | 70 +++++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/src/aare/daq/daq.py b/src/aare/daq/daq.py index b0d0d61b..1fdd97ff 100644 --- a/src/aare/daq/daq.py +++ b/src/aare/daq/daq.py @@ -440,10 +440,16 @@ class AareDAQ: self.__aare.sample_unmounted(self.__cfg.current_sample) self.__cfg.current_sample = None else: - value = self.__devs.tell.mount(address=target.tell_address(), force=True, auto_unmount=True, read_dm=False, - wait=True, timeout=360.0) - logger.info(f"Mount result: {value}") - self.__cfg.current_sample = target + try: + value = self.__devs.tell.mount(address=target.tell_address(), force=True, auto_unmount=True, read_dm=False, + wait=True, timeout=360.0) + logger.info(f"Mount result: {value}") + self.__cfg.current_sample = target + except Exception as e: + logger.error(f"Mount failed: {e}") + if self.__cfg.current_sample is not None and self.__cfg.current_sample.db_id is not None: + self.__aare.sample_failed(self.__cfg.current_sample, failed_comment=f"Mount failed: {e}") + raise MountingFailed(f"Mount failed: {e}") #self.__mount_failure_handler(value) def recovery_unmount_sample(self) -> None: @@ -769,14 +775,15 @@ class AareDAQ: logger.info(f"raster status {status}") logger.info(f'raster grid request: {request}') total_time = request.exp_time_s*request.n_x*request.n_y - + result = None if not self.__cfg.simulated_detector: - try: - logger.info('initialise detector') - self.__jfjoch.measure_raster(request, status) - logger.info('detector initialised') - except JFJochCommunicationError as e: - logger.warning(f"Failed to communicate with jfjoch: {e}") + pass + # try: + # logger.info('initialise detector') + # self.__jfjoch.measure_raster(request, status) + # logger.info('detector initialised') + # except JFJochCommunicationError as e: + # logger.warning(f"Failed to communicate with jfjoch: {e}") else: logger.info("Simulated detector mode enabled; returning fake zero raster result.") @@ -793,17 +800,17 @@ class AareDAQ: self.__devs.aerotech_pos = self.__cfg.abr_meas_pos - try: - result = self.__jfjoch.wait_till_done(60) - except JFJochCommunicationError as e: - logger.warning(f"Failed to communicate with jfjoch: {e}") - return self._build_fake_raster_result(request) + # try: + # result = self.__jfjoch.wait_till_done(60) + # except JFJochCommunicationError as e: + # logger.warning(f"Failed to communicate with jfjoch: {e}") + # return self._build_fake_raster_result(request) if result is None: logger.warning("JFJoch returned no ScanResult; using fake result for raster scan.") - return self._build_fake_raster_result(request) + return self._build_fake_raster_result(request) - return CompletedRasterGridElem(request=copy.deepcopy(request), result=result, centre_of_mass=None) + #return CompletedRasterGridElem(request=copy.deepcopy(request), result=result, centre_of_mass=None) except JFJochCommunicationError: raise @@ -856,8 +863,8 @@ class AareDAQ: if self.__cfg.simulated_detector: logger.info("Simulated detector mode enabled; skipping JFJoch start.") - else: - self.__jfjoch.measure_rotation(request, status, self.__cfg.xrf) + # else: + # self.__jfjoch.measure_rotation(request, status, self.__cfg.xrf) if request.screening: self.__devs.aerotech.screening_scan( @@ -893,11 +900,11 @@ class AareDAQ: if self.__cfg.simulated_detector: logger.warning("Detector in simulation mode, returning fake zero rotation result.") - result = self._build_fake_rotation_result(request) + result = self._build_fake_rotation_result(request) - else: - # Let JFJochCommunicationError propagate - result = self.__jfjoch.wait_till_done(60) + # else: + # # Let JFJochCommunicationError propagate + # result = self.__jfjoch.wait_till_done(60) # if self.sample is not None and self.sample.db_id is not None: # self.save_screenshot_db(self.sample.db_id, "after_dc") @@ -1038,14 +1045,14 @@ class AareDAQ: m = self.__mlbox.predict(curr_image, preferred_class=(3,0)) if m is None: if filename is not None: - cv2.imwrite(f"{filename}_no_detection.jpg", curr_image) + #cv2.imwrite(f"{filename}_no_detection.jpg", curr_image) self.__aare.upload_image(sample_id, f"{filename}_no_detection", curr_image) return None x1, y1, x2, y2 = m.box.top_x, m.box.top_y, m.box.bottom_x, m.box.bottom_y if filename is not None: cv2.rectangle(curr_image, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2) - cv2.imwrite(f"{filename}.jpg", curr_image) + #cv2.imwrite(f"{filename}.jpg", curr_image) self.__aare.upload_image(sample_id, filename, curr_image) geom = self.sample_geometry @@ -1479,7 +1486,7 @@ class AareDAQ: def save_screenshot(self, filename: str): #time.sleep(0.2) # Wait 200 ms to ensure camera image is stable bgr_image = cv2.cvtColor(self.camera_image, cv2.COLOR_RGB2BGR) - cv2.imwrite(f"{filename}.jpg", bgr_image) + #cv2.imwrite(f"{filename}.jpg", bgr_image) def save_screenshot_db(self, sample_id: int, filename: str): """ @@ -1677,13 +1684,8 @@ class AareDAQ: params, source = self.get_collection_params(prefer_smart=False) logger.info(f"Using {source} for data collection: {params}") - self.__cfg.zoom_mode = ZoomModeEnum.User - self.__devs.samcam_settings = self.__cfg.zoom_settings.get_camera_settings(self.zoom) self.__devs.dtz = params.dtz - if self.omega + 180 < 720: - start_omega = self.omega - else: - start_omega = params.start_omega_deg + start_omega = self.omega self.__rotation( RotationScanRequest(start_omega_deg=start_omega, dtz=params.dtz, file_prefix="data/" + sample_prefix + f"_{hex_string}", @@ -1708,7 +1710,7 @@ class AareDAQ: logger.debug(f"error is instance AXCFailed") self.__aare.axc_failed(sample) else: - self.__aare.sample_failed(sample) + self.__aare.sample_failed(sample, f"Error in automation: {e}") self.__cfg.state_busy = False end = time.perf_counter() raise e