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:
+36
-1
@@ -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)))
|
||||
|
||||
Reference in New Issue
Block a user