DAQ/AAREDB: update how raster messages are sent to the db - now include COM, max_iamge number, beam_size and beamLocation.

This commit is contained in:
appleb_m committed 2025-11-27 12:20:09 +01:00
1 parent 19e569dc81
commit d30729f655
7 files changed
+43 -28

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
[project]
name = "aaredaqlib"
version = "0.2.63"
version = "0.2.64"
description = "Libraries shared between AareDAQ and AareGUI"
readme = "README.md"
requires-python = ">=3.11"
+5 -3
View File
@@ -42,7 +42,7 @@ def identify_crystal_raster(result, r: RasterGridRequest) -> CenterOfMassModel |
logger.debug(f"Maximum spots_low_res value: {max_image.spots_low_res}")
logger.debug(f"Maximum image found at grid coordiantes {max_image.nx}, {max_image.ny}")
logger.debug(f"Maximum image found at umL {max_image.nx * r.grid_size_mm.x}, {max_image.ny * r.grid_size_mm.y}")
com = CenterOfMassModel(n_x=max_image.n_x, n_y=max_image.n_y)
com = CenterOfMassModel(n_x=max_image.n_x, n_y=max_image.n_y, max_image=max_image.number)
com_mm = com.get_com_mm(r)
grid_mm_x = com_mm.x
grid_mm_y = com_mm.y
@@ -278,7 +278,8 @@ def get_com_image_number(com, images):
for image in images:
if image.nx == round(com[0]) and image.ny == round(com[1]):
logger.info(f"com found for image: {image.number}")
return
return image.number
return None
@@ -287,7 +288,8 @@ def raster_centre_of_mass(result_array, r:RasterGridRequest) -> CenterOfMassMode
com = ndimage.center_of_mass(result_array)
if com or not np.isnan(com[0]) or not np.isnan(com[1]):
logger.info(f"Center of mass: {com}")
return CenterOfMassModel(n_x=com[0], n_y=com[1])
max_image = get_com_image_number(com, result_array.images)
return CenterOfMassModel(n_x=com[0], n_y=com[1], max_image=max_image)
else:
logger.warning("No valid center of mass found")
return None
+15 -10
View File
@@ -4,6 +4,7 @@ from enum import Enum
from typing import Annotated, Literal, Tuple, List, Optional
import numpy as np
from pydantic import BaseModel, Field, field_validator, AfterValidator
from aaredaqlib.coordinate import Coordinate, positive_coords
@@ -781,18 +782,10 @@ class SimpleScanParameters(BaseModel):
d_vis: float | None = None
d_tar: float | None = None
class RasterPayloadModel(BaseModel):
request: RasterGridRequest
result: ScanResult
sample_id: int
attach_image: bool = True
center_pxl: Coordinate | None
start_pxl: Coordinate
cell_size_pxl: Annotated[Coordinate, AfterValidator(positive_coords)]
class CenterOfMassModel(BaseModel):
n_x: float
n_y: float
max_image: int | None = None
@classmethod
def model_validate_maybe(cls, n_x: float, n_y: float) -> "CenterOfMassModel | None":
@@ -812,4 +805,16 @@ class CenterOfMassModel(BaseModel):
def com_nan_check(self):
# True if both values are finite (not NaN)
return not (np.isnan(self.n_x) or np.isnan(self.n_y))
return not (np.isnan(self.n_x) or np.isnan(self.n_y))
class RasterPayloadModel(BaseModel):
request: RasterGridRequest
result: ScanResult
sample_id: int
attach_image: bool = True
centre_of_mass: CenterOfMassModel | None = None
center_pxl: Coordinate | None
start_pxl: Coordinate
cell_size_pxl: Annotated[Coordinate, AfterValidator(positive_coords)]
beam_mark_pxl: tuple[float, float]
beam_size_mm: Annotated[Coordinate, AfterValidator(positive_coords)]
+2 -2
View File
@@ -1,6 +1,6 @@
[project]
name = "aaredaq"
version = "0.2.63"
version = "0.2.64"
description = "AareDAQ data acquisition server"
readme = "README.md"
requires-python = ">=3.11"
@@ -18,7 +18,7 @@ dependencies = [
"python_multipart==0.0.20",
"websocket-client==1.8.0",
"sseclient-py==1.8.0",
"aaredaqlib==0.2.63",
"aaredaqlib==0.2.64",
]
[lint]
+17 -9
View File
@@ -341,12 +341,13 @@ class AareWrapper:
print(e)
def ingest_gridscan(self, sample: Optional[SampleShortInfo], raster_result: ScanResult,
raster_request: RasterGridRequest, geom: SampleGeometryModel, com: Optional[CenterOfMassModel]):
raster_request: RasterGridRequest, geom: SampleGeometryModel,
com: Optional[CenterOfMassModel], beam_mark_pxl:tuple[float,float]):
if sample is None:
return
payload = self.format_gridscan_payload(sample, raster_result, raster_request, geom, com).model_dump()
payload = self.format_gridscan_payload(sample, raster_result, raster_request, geom, com, beam_mark_pxl).model_dump()
if payload is None:
return
@@ -366,15 +367,10 @@ class AareWrapper:
def format_gridscan_payload(self, sample: Optional[SampleShortInfo], raster_result:ScanResult,
raster_request:RasterGridRequest, geom:SampleGeometryModel,
com: Optional[CenterOfMassModel]) -> RasterPayloadModel|None:
com: Optional[CenterOfMassModel], beam_mark_pxl:tuple[float,float]) -> RasterPayloadModel|None:
try:
if com:
center_pxl = com.get_com_pxl(raster_request, geom)
else:
center_pxl = None
cell_size_pxl = Coordinate(x=raster_request.grid_size_mm.x/geom.pixel_in_mm,
y=raster_request.grid_size_mm.y/geom.pixel_in_mm)
@@ -382,16 +378,28 @@ class AareWrapper:
beam_loc = geom.smargon.sh_mm
else:
beam_loc = raster_request.smargon_top_left.sh_mm
start_pxl = geom.smargon_to_picture(beam_loc)
if com:
com_grid_pxl = com.get_com_pxl(raster_request, geom)
x = start_pxl.x + com_grid_pxl.x
y = start_pxl.y + com_grid_pxl.y
center_pxl = Coordinate(x=x,y=y)
else:
center_pxl = None
payload = RasterPayloadModel(
request = raster_request,
result = raster_result,
sample_id = sample.db_id,
attach_image = True,
centre_of_mass = com,
start_pxl = start_pxl,
center_pxl = center_pxl,
cell_size_pxl = cell_size_pxl
cell_size_pxl = cell_size_pxl,
beam_mark_pxl = beam_mark_pxl,
beam_size_mm = geom.beam_size_mm
)
return payload
+1 -1
View File
@@ -599,7 +599,7 @@ class AareDAQ:
try:
self.__aare.ingest_gridscan(sample = self.sample, raster_result =result,
raster_request = r, geom = self.sample_geometry,
com = com)
com = com, beam_mark_pxl=self.__cfg.get_beam_mark(self.zoom))
except Exception as e:
logger.error(f"Exception ingesting grid scan: {e}")
self.__devs.reflector_up = False
+2 -2
View File
@@ -1,6 +1,6 @@
[project]
name = "aaregui"
version = "0.2.63"
version = "0.2.64"
description = "Beamline control GUI"
readme = "README.md"
requires-python = ">=3.11"
@@ -9,7 +9,7 @@ dependencies = [
"pyzmq==26.4.0",
"opencv-python-headless==4.11.0.86",
"PySide6==6.9.0",
"aaredaqlib==0.2.63"
"aaredaqlib==0.2.64"
]
[lint]