diff --git a/src/aare/daq/daq.py b/src/aare/daq/daq.py index e8d62ebb..d5281017 100644 --- a/src/aare/daq/daq.py +++ b/src/aare/daq/daq.py @@ -902,39 +902,37 @@ class AareDAQ: def __raster(self, request: RasterGridRequest) -> CompletedRasterGridElem: self.__devs.aerotech_omega = request.omega_deg - previous_smargon_pos = self.__devs.smargon_pos self.__setup_datacollection(request=request) status = self.status 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+request.n_y*0.3 - 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}") - else: - logger.info("Simulated detector mode enabled; returning fake zero raster result.") + total_time = request.exp_time_s*request.n_x*request.n_y+request.n_y*0.3 try: if self.sample is not None and self.sample.db_id is not None: self.__aare.create_gridscan_run(self.sample, request, status) - self.__devs.aerotech.grid_scan(grid_elem_size_y_um=request.grid_size_mm.y*1000, - grid_elem_size_x_um=request.grid_size_mm.x*1000, - grid_elem_count_x=request.n_x, - grid_elem_count_y=request.n_y, - time_sec=request.exp_time_s, - run_async=True) - self.__devs.aerotech.wait_till_done(timeout=int(round(total_time*2,0))) + if not self.__cfg.simulated_detector: + logger.info("initialise detector") + self.__jfjoch.measure_raster(request, status) + logger.info("detector initialised") + else: + logger.info("Simulated detector mode enabled; using fake raster result.") + self.__devs.aerotech.grid_scan( + grid_elem_size_y_um=request.grid_size_mm.y * 1000, + grid_elem_size_x_um=request.grid_size_mm.x * 1000, + grid_elem_count_x=request.n_x, + grid_elem_count_y=request.n_y, + time_sec=request.exp_time_s, + run_async=True, + ) + + self.__devs.aerotech.wait_till_done(timeout=int(round(total_time * 2, 0))) #go back to aerotech x,y,z home not U home (0 degrees). - if type(self.__cfg.abr_meas_pos) is Coordinate: + if isinstance(self.__cfg.abr_meas_pos, Coordinate): coord = self.__cfg.abr_meas_pos else: coord = self.__cfg.abr_meas_pos.at_mm @@ -960,36 +958,41 @@ class AareDAQ: self.__devs.smargon_pos = grid_centre_smargon self.__devs.smargon_wait(timeout=180) - try: - result = self.__jfjoch.wait_till_done(60) - except JFJochCommunicationError as e: - logger.warning(f"Failed to communicate with jfjoch: {e}") + if self.__cfg.simulated_detector: + scan_result = self._build_fake_scan_result( + file_prefix=request.file_prefix, + image_count=request.n_x * request.n_y, + ) + else: + scan_result = self.__jfjoch.wait_till_done(60) + if scan_result is None: + logger.warning("JFJoch returned no ScanResult; using fake result for raster scan.") + scan_result = self._build_fake_scan_result( + file_prefix=request.file_prefix, + image_count=request.n_x * request.n_y, + ) + + sample_id = self.sample.db_id if self.sample and self.sample.db_id is not None else None + if sample_id: self.__set_state(BeamlineStateEnum.SampleAlignment) - return self._build_fake_raster_result(request) + self.save_screenshot_db(sample_id, f"{sample_id}_post_raster_{request.omega_deg}deg") + self.__aare.ingest_gridscan( + sample=self.sample, + raster_result=scan_result, + raster_request=request, + geom=self.sample_geometry, + com=None, + beam_mark_pxl=self.__cfg.get_beam_mark(self.zoom), + ) - try: - sample_id = self.sample.db_id if self.sample is not None and self.sample.db_id is not None else None - if sample_id: - self.__set_state(BeamlineStateEnum.SampleAlignment) - self.save_screenshot_db(sample_id, f"{sample_id}_post_raster_{request.omega_deg}deg") - self.__aare.ingest_gridscan(sample = self.sample, raster_result = result.result, - raster_request = request, geom = self.sample_geometry, - com = None, beam_mark_pxl=self.__cfg.get_beam_mark(self.zoom)) - except Exception as e: - logger.error(f"Exception ingesting grid scan: {e}") + return CompletedRasterGridElem( + request=copy.deepcopy(request), + result=scan_result, + centre_of_mass=None, + ) - - if result is None: - logger.warning("JFJoch returned no ScanResult; using fake result for raster scan.") - - return CompletedRasterGridElem(request=copy.deepcopy(request), result=result, centre_of_mass=None) - - - - except JFJochCommunicationError: - raise - except Exception as e: - logger.error(f"Failed during raster: {e}") + except Exception: + logger.exception("Failed during raster") raise def measure_raster(self, r: RasterGridRequest, auto: bool) -> CompletedRasterGrid: @@ -1050,7 +1053,7 @@ class AareDAQ: #Is this for helical scans...? do we do smargon scans? if request.start is not None and request.end is not None: - smargon_time_step = request.time_sec / float(request.steps) + smargon_time_step = request.exp_time_s / float(request.steps) pos_step = (request.end.sh_mm - request.start.sh_mm) * (1.0 / float(request.steps)) for i in range(request.steps):