diff --git a/src/aare/daq/operations/raster/service.py b/src/aare/daq/operations/raster/service.py index 53204387..02561827 100644 --- a/src/aare/daq/operations/raster/service.py +++ b/src/aare/daq/operations/raster/service.py @@ -362,8 +362,6 @@ class RasterService: ) else: scan_result = self.ctx.jfjoch.wait_till_done(60) - com = None - if scan_result is None: self.logger.error( "JFJoch returned no ScanResult for raster", @@ -373,32 +371,46 @@ class RasterService: {"exp_time_s": request.exp_time_s}, ), ) + raise RasterScanException("JFJoch returned no ScanResult for raster") - if request.n_x == 1: - x = request.grid_size_mm.x / 2.0 - else: - x = ((request.n_x - 1) * request.grid_size_mm.x) / 2.0 - y = ((request.n_y - 1) * request.grid_size_mm.y) / 2.0 - - target_coor_offset = self.ctx.sample_geometry.smargon_nudge(Coordinate(x=x, y=y)) - - self.logger.info( - "Calculated raster centre offset", - extra=merge_log_context( - sample_log_context(self.ctx.sample), - raster_request_log_context(request), - { - "centre_offset_x_mm": target_coor_offset.x, - "centre_offset_y_mm": target_coor_offset.y, - "centre_offset_z_mm": target_coor_offset.z, - "grid_half_width_x_mm": x, - "grid_half_height_y_mm": y, - "top_left_x_mm": getattr(request.smargon_top_left.sh_mm, "x", None), - "top_left_y_mm": getattr(request.smargon_top_left.sh_mm, "y", None), - "top_left_z_mm": getattr(request.smargon_top_left.sh_mm, "z", None), - }, - ), + result_array = create_quality_filtered_array( + scan_result.images, + "spots_low_res", + min_spots=None, + min_efficiency=1.0, + min_background=None, + min_low_res_spots=None, ) + com = raster_centre_of_mass(result_array, scan_result.images) + if com is None: + if request.n_x == 1: + x = request.grid_size_mm.x / 2.0 + else: + x = ((request.n_x - 1) * request.grid_size_mm.x) / 2.0 + y = ((request.n_y - 1) * request.grid_size_mm.y) / 2.0 + + target_coor_offset = self.ctx.sample_geometry.smargon_nudge(Coordinate(x=x, y=y)) + + self.logger.info( + "Calculated raster centre offset", + extra=merge_log_context( + sample_log_context(self.ctx.sample), + raster_request_log_context(request), + { + "centre_offset_x_mm": target_coor_offset.x, + "centre_offset_y_mm": target_coor_offset.y, + "centre_offset_z_mm": target_coor_offset.z, + "grid_half_width_x_mm": x, + "grid_half_height_y_mm": y, + "top_left_x_mm": getattr(request.smargon_top_left.sh_mm, "x", None), + "top_left_y_mm": getattr(request.smargon_top_left.sh_mm, "y", None), + "top_left_z_mm": getattr(request.smargon_top_left.sh_mm, "z", None), + }, + ), + ) + else: + target_coor = com.get_com_mm(request) + target_coor_offset = self.ctx.sample_geometry.smargon_nudge(target_coor) self.logger.info(f"moving Smargon to grid centre offset {target_coor_offset}") target_smargon = SmargonCoordinate(