AAREDB: WIP changes to ingest RASTER grid scan into DB

This commit is contained in:
2025-09-19 16:19:40 +02:00
parent 69b4dd6481
commit 49823f54a9
+65 -1
View File
@@ -1,5 +1,6 @@
import datetime
import io
import json
import os
from typing import List, Optional
@@ -33,6 +34,7 @@ from aaredaqlib.raster_grid import RasterGridRequest, CompletedRasterGrid
from aaredaqlib.rotation_scan import RotationScanRequest
from aaredaqlib.sample_geometry import SampleGeometryModel
from jfjoch_client.models import ScanResult
class AareWrapper:
def __init__(
@@ -49,6 +51,7 @@ class AareWrapper:
self.__tell_api = aareDBclient.TellsRunnerApi(self.client)
self.__sample_api = aareDBclient.SamplesRunnerApi(self.client)
self.__proc_api = aareDBclient.ProcessingsRunnerApi(self.client)
self.__raster_api = aareDBclient.GridscanRunnerApi(self.client)
self.__bl = bl
def set_pucks_beamline(self, input_list: List[PuckLoadedInfo]):
@@ -314,4 +317,65 @@ class AareWrapper:
)
print("Experiment parameters created:", response)
except Exception as e:
print(e)
print(e)
def _create_default_geometry(self):
"""Create default geometry configuration for raster grid ingestion."""
return {
'beam_location_pxl': {'x': 512, 'y': 384, 'z': 0},
'pixel_in_mm': 0.01,
'aerotech': {'x': 0, 'y': 0, 'z': 0},
'aerotech_meas': {'x': 0, 'y': 0, 'z': 0},
'smargon': {
'sh_mm': {'x': 0, 'y': 0, 'z': 0},
'phi_deg': 0,
'chi_deg': 0
},
'omega_deg': 0,
'beam_size_mm': {'x': 0.02, 'y': 0.02, 'z': 0},
}
def ingest_gridscan(self, s: Optional[SampleShortInfo], raster_result: ScanResult, r: RasterGridRequest):
if s is None:
return
payload = self.format_gridscan_payload(s, raster_result, r)
if payload is None:
return
url = f"{self.__host}/protected_router/gridscan_runner/ingest"
headers = {
"accept": "application/json",
"X-Shared-Password": os.getenv("AAREDB_SHARED_PASSWORD")
}
response = requests.post(url,
auth=(os.getenv("AAREDB_USERNAME"), os.getenv("AAREDB_PASSWORD")),
headers=headers, data=json.dumps(payload), timeout=30, verify=False)
response.raise_for_status()
print(f"Response status code: {response.status_code}")
def format_gridscan_payload(self, s: Optional[SampleShortInfo], raster_result:ScanResult, r:RasterGridRequest):
try:
geometry = self._create_default_geometry()
payload = {
"request": r.model_dump(), # RasterGridRequest as dict
"result": raster_result.model_dump(), # ScanResult as dict
"geometry": geometry, # SampleGeometryModel as dict
"sample_id": s.db_id,
"attach_image": True,
}
return payload
except Exception as e:
print(e)
raise e