DAQ: automatically move to an optimal data collection point following a grid scan. Bug fix in _draw_grid to check if values[pxl] is None.

This commit is contained in:
2025-07-08 11:50:57 +02:00
parent 6fb53e9bbd
commit 35249295e1
2 changed files with 37 additions and 2 deletions
+36 -1
View File
@@ -288,6 +288,34 @@ class AareDAQ:
def list_loaded_pucks(self) -> List[PuckLoadedInfo]:
return self.__devs.tell.get_detected_pucks()
def identify_crystal_raster(self, result, r: RasterGridRequest):
if result.images:
indexed_images = [(i, img) for i, img in enumerate(result.images) if img.index]
if indexed_images:
max_image = max(indexed_images, key=lambda x: x[1].spots_low_res)
max_index, max_image = max_image
print(f"Image with maximum spots_low_res: {max_image}")
print(f"Maximum spots_low_res value: {max_image.spots_low_res}")
else:
images = [(i, img) for i, img in enumerate(result.images)]
print("No indexed images found.")
max_image = max(images, key=lambda x: x[1].spots_low_res)
max_index, max_image = max_image
print(f"Image with maximum spots_low_res: {max_image}")
print(f"Maximum spots_low_res value: {max_image.spots_low_res}")
grid_x = max_index % r.n_x
grid_y = max_index // r.n_x
print(f"Grid coordinates: ({grid_x}, {grid_y})")
grid_mm_x = grid_x * r.grid_size_mm.x + r.grid_size_mm.x/2
grid_mm_y = grid_y * r.grid_size_mm.y + r.grid_size_mm.y/2
print(f"Grid coordinates in mm: ({grid_mm_x}, {grid_mm_y})")
delta_mm = self.sample_geometry.smargon_nudge(Coordinate(x=grid_mm_x, y=grid_mm_y))
return delta_mm
else:
return None
def __raster(self, r: RasterGridRequest) -> CompletedRasterGrid:
max_time = r.exp_time_s * r.n_y * r.n_x + 60
self.__cfg.dtz = r.dtz
@@ -322,8 +350,15 @@ class AareDAQ:
self.__devs.aerotech.wait_scan_done(max_time)
self.__devs.aerotech.reset()
self.__devs.abr_pos = self.__cfg.abr_meas_pos
self.__devs.smargon.target = save_smargon_position
result = self.__jfjoch.wait_till_done(60)
new_delta_mm = self.identify_crystal_raster(result, r)
if new_delta_mm is not None:
self.__devs.smargon.target = SmargonCoordinate(sh_mm=r.smargon.sh_mm + new_delta_mm,
phi_deg=r.smargon.phi_deg,
chi_deg=r.smargon.chi_deg)
else:
print("Auto finding optimal image failed due to no images found. Using previous position.")
self.__devs.smargon.target = save_smargon_position
return CompletedRasterGrid(request=copy.deepcopy(r), result=result)
def measure_raster(self, r: RasterGridRequest) -> CompletedRasterGrid:
@@ -346,7 +346,7 @@ class RasterGridManager(QObject):
for x in range(grid.n_x):
for y in range(grid.n_y):
pxl = x + y * grid.n_x
if values is None or len(values) <= pxl or math.isnan(values[pxl]) or values[pxl] < 0:
if values is None or len(values) <= pxl or values[pxl] is None or math.isnan(values[pxl]) or values[pxl] < 0:
painter.setBrush(Qt.BrushStyle.NoBrush)
else:
painter.setBrush(QBrush(float_to_viridis_brush((values[pxl] - min_value) / diff, alpha=alpha)))