diff --git a/src/aare/daq/operations/raster/service.py b/src/aare/daq/operations/raster/service.py index 3b6091b2..d7a55bbe 100644 --- a/src/aare/daq/operations/raster/service.py +++ b/src/aare/daq/operations/raster/service.py @@ -20,7 +20,6 @@ from aarecommon.math.find_xtal import ( raster_highest_score, ) from aarecommon.math.raster_grid import grid_to_image_id -from aarecommon.math.simulate_raster import generate_no_beam_scan_result from aarecommon.models.models import BeamlineStateEnum, MLBoxType from aarecommon.models.raster_grid import ( CompletedRasterGrid, @@ -460,89 +459,78 @@ class RasterService: x = None y = None - if self.ctx.deps.cfg.simulated_detector: - self.logger.info("Simulated detector mode enabled; using fake raster result.") - scan_result = generate_no_beam_scan_result(request) - com = raster_highest_score(scan_result.images) - target_coor = com.get_com_mm(request) - target_coor_offset = self.ctx.sample_geometry.smargon_nudge(target_coor) - target_smargon = SmargonCoordinate( - sh_mm=request.smargon_top_left.sh_mm + target_coor_offset, - phi_deg=request.smargon_top_left.phi_deg, - chi_deg=request.smargon_top_left.chi_deg, + scan_result = self.ctx.deps.jfjoch.wait_till_done(60) + if scan_result is None: + self.logger.error( + "JFJoch returned no ScanResult for raster", + extra=merge_log_context( + sample_log_context(self.ctx.sample), + raster_request_log_context(request), + {"exp_time_s": request.exp_time_s}, + ), + ) + raise RasterScanException("JFJoch returned no ScanResult for raster") + else: + self.logger.info( + f"Raster scan results from JFJoch: file {scan_result.file_prefix} with images {scan_result.images}" + ) + com = raster_highest_score(scan_result.images) + if com is None: + self.logger.info("Calcualted COM is None -> using centre image") + 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: - scan_result = self.ctx.deps.jfjoch.wait_till_done(60) - if scan_result is None: - self.logger.error( - "JFJoch returned no ScanResult for raster", - extra=merge_log_context( - sample_log_context(self.ctx.sample), - raster_request_log_context(request), - {"exp_time_s": request.exp_time_s}, - ), - ) - raise RasterScanException("JFJoch returned no ScanResult for raster") - - com = raster_highest_score(scan_result.images) - if com is None: - self.logger.info("Calcualted COM is None -> using centre image") - 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: - self.logger.info("Calcualted COM is not None, proceeding") - target_coor = com.get_com_mm(request) - target_coor_offset = self.ctx.sample_geometry.smargon_nudge(target_coor) - 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), - }, - ), - ) - - self.logger.info(f"moving Smargon to grid centre offset {target_coor_offset}") - target_smargon = SmargonCoordinate( - sh_mm=request.smargon_top_left.sh_mm + target_coor_offset, - phi_deg=request.smargon_top_left.phi_deg, - chi_deg=request.smargon_top_left.chi_deg, + self.logger.info("Calcualted COM is not None, proceeding") + target_coor = com.get_com_mm(request) + target_coor_offset = self.ctx.sample_geometry.smargon_nudge(target_coor) + 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), + }, + ), ) + self.logger.info(f"moving Smargon to grid centre offset {target_coor_offset}") + target_smargon = SmargonCoordinate( + sh_mm=request.smargon_top_left.sh_mm + target_coor_offset, + phi_deg=request.smargon_top_left.phi_deg, + chi_deg=request.smargon_top_left.chi_deg, + ) + self.ctx.deps.devs.smargon_pos = target_smargon self.ctx.deps.devs.smargon_wait(timeout=180) diff --git a/src/aare/devices/jfjoch.py b/src/aare/devices/jfjoch.py index 4edb52b4..73b4fd70 100644 --- a/src/aare/devices/jfjoch.py +++ b/src/aare/devices/jfjoch.py @@ -305,7 +305,8 @@ class JFJochWrapper: if self._simulated: return None try: - self._api.wait_till_done_post_with_http_info(timeout=math.ceil(timeout)) + res = self._api.wait_till_done_post_with_http_info(timeout=math.ceil(timeout)) + logger.info(f"wait_till_done response: {res}") return self._api.result_scan_get() except Exception as e: raise self._jfjoch_error( diff --git a/src/aare/gui/panels/rotation_data_collection.py b/src/aare/gui/panels/rotation_data_collection.py index 94d7fa04..32f14336 100644 --- a/src/aare/gui/panels/rotation_data_collection.py +++ b/src/aare/gui/panels/rotation_data_collection.py @@ -1,3 +1,4 @@ +import secrets from pathlib import Path from aarecommon.config.beamline import cfg_get @@ -188,7 +189,7 @@ class RotationDataCollectionPanel(ScanSettingsPanel): if is_single_image: r = RotationScanRequest( - file_prefix=str(add_screening_to_path(self._filename)), + file_prefix=str(add_screening_to_path(self._filename)) + "_" + secrets.token_hex(3), start_omega_deg=self.start_angle.value, incr_omega_deg=self.screening_image_angle.value, wedge_omega_deg=screening_settings["omega_step_deg"], @@ -200,7 +201,7 @@ class RotationDataCollectionPanel(ScanSettingsPanel): ) else: r = RotationScanRequest( - file_prefix=str(add_screening_to_path(self._filename)), + file_prefix=str(add_screening_to_path(self._filename)) + "_" + secrets.token_hex(3), start_omega_deg=self.start_angle.value, wedge_omega_deg=self.screening_image_angle.value, incr_omega_deg=screening_settings["omega_step_deg"], @@ -224,7 +225,7 @@ class RotationDataCollectionPanel(ScanSettingsPanel): logger.error("Cannot run measurement because of check") return r = RotationScanRequest( - file_prefix=str(add_data_to_path(self._filename)), + file_prefix=str(add_data_to_path(self._filename)) + "_" + secrets.token_hex(3), start_omega_deg=self.start_angle.value, steps=self.image_number(), incr_omega_deg=self.image_angle.value, diff --git a/src/aare/gui/panels/smart_rotation_panel.py b/src/aare/gui/panels/smart_rotation_panel.py index 28e5f1b0..dfda61e2 100644 --- a/src/aare/gui/panels/smart_rotation_panel.py +++ b/src/aare/gui/panels/smart_rotation_panel.py @@ -1,4 +1,5 @@ import math +import secrets from aarecommon.config.logger import setup_logger from aarecommon.models.models import CrystalSize, DAQStatusModel, SimpleScanParameters @@ -410,7 +411,7 @@ class SimpleRotationSettingsPanel(QWidget): @Slot() def run_measurement(self): r = RotationScanRequest( - file_prefix=str(add_data_to_path(self._filename)), + file_prefix=str(add_data_to_path(self._filename)) + "_" + secrets.token_hex(3), start_omega_deg=self.start_angle_enter.value, steps=self.n_images, incr_omega_deg=self.image_angle_enter.value, diff --git a/src/aare/gui/scan_logic/raster_grid_manager.py b/src/aare/gui/scan_logic/raster_grid_manager.py index 0457ee81..ee75d9ca 100644 --- a/src/aare/gui/scan_logic/raster_grid_manager.py +++ b/src/aare/gui/scan_logic/raster_grid_manager.py @@ -1,4 +1,5 @@ import math +import secrets from enum import Enum import numpy as np @@ -458,7 +459,7 @@ class RasterGridManager(QObject): grid = RasterGridRequest( dtz=ag.dtz, transmission=ag.transmission, - file_prefix=ag.file_prefix, + file_prefix=ag.file_prefix + "_" + secrets.token_hex(3), exp_time_s=ag.exp_time_s, n_x=ag.n_x, n_y=ag.n_y, @@ -484,7 +485,7 @@ class RasterGridManager(QObject): grid = RasterGridRequest( dtz=ag.dtz, transmission=ag.transmission, - file_prefix=ag.file_prefix, + file_prefix=ag.file_prefix + "_" + secrets.token_hex(3), exp_time_s=ag.exp_time_s, n_x=ag.n_x, n_y=ag.n_y,