diff --git a/daq/src/aaredaq/aaredb.py b/daq/src/aaredaq/aaredb.py index afbe3683..7f77d674 100644 --- a/daq/src/aaredaq/aaredb.py +++ b/daq/src/aaredaq/aaredb.py @@ -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) \ No newline at end of file + 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 + +