Added functions to create rotation and gridscans runs into aaredb.py
Build and Publish / build (push) Successful in 22s
Build and Publish / build (push) Successful in 22s
This commit is contained in:
@@ -8,7 +8,7 @@ dependencies = [
|
||||
"pydantic==2.11.4",
|
||||
"numpy==2.2.5",
|
||||
"jfjoch_client==1.0.0rc45",
|
||||
"aareDB==0.1.1a6"
|
||||
"aareDB==0.1.1a8"
|
||||
]
|
||||
|
||||
[lint]
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ dependencies = [
|
||||
"fastapi==0.115.12",
|
||||
"uvicorn==0.34.2",
|
||||
"ultralytics==8.3.133",
|
||||
"aareDB==0.1.1a6",
|
||||
"aareDB==0.1.1a8",
|
||||
"opencv-python-headless==4.11.0.86",
|
||||
"python_multipart==0.0.20",
|
||||
"websocket-client"
|
||||
|
||||
+171
-2
@@ -1,3 +1,4 @@
|
||||
import datetime
|
||||
import io
|
||||
import os
|
||||
from typing import List, Optional
|
||||
@@ -9,15 +10,26 @@ import requests
|
||||
from aareDBclient import (
|
||||
SetTellPosition,
|
||||
SampleEventCreate,
|
||||
SetTellPositionRequest )
|
||||
SetTellPositionRequest,
|
||||
RotationParameters,
|
||||
GridScanParameters,
|
||||
Detector as DetectorParameters,
|
||||
BeamlineParameters,
|
||||
ExperimentParametersCreate)
|
||||
|
||||
from aaredaqlib.diffraction_geometry import DiffractionGeometry
|
||||
from aaredaqlib.models import (
|
||||
SampleShortInfo,
|
||||
PuckLoadedInfo,
|
||||
DewarAddress,
|
||||
SampleShortInfoList,
|
||||
DAQStatusModel,
|
||||
)
|
||||
|
||||
from aaredaqlib.beamline import MXBeamline
|
||||
from aaredaqlib.raster_grid import RasterGridRequest, CompletedRasterGrid
|
||||
from aaredaqlib.rotation_scan import RotationScanRequest
|
||||
from aaredaqlib.sample_geometry import SampleGeometryModel
|
||||
|
||||
|
||||
class AareWrapper:
|
||||
@@ -34,6 +46,7 @@ class AareWrapper:
|
||||
self.__host = host
|
||||
self.__tell_api = aareDBclient.TellsRunnerApi(self.client)
|
||||
self.__sample_api = aareDBclient.SamplesRunnerApi(self.client)
|
||||
self.__proc_api = aareDBclient.ProcessingsRunnerApi(self.client)
|
||||
self.__bl = bl
|
||||
|
||||
def set_pucks_beamline(self, input_list: List[PuckLoadedInfo]):
|
||||
@@ -102,6 +115,27 @@ class AareWrapper:
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
def sample_centered(self, s: Optional[SampleShortInfo]):
|
||||
if s is not None:
|
||||
try:
|
||||
self.__sample_api.create_sample_event(
|
||||
sample_id=s.db_id,
|
||||
sample_event_create=SampleEventCreate(event_type="Centered"),
|
||||
)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
def sample_collected(self, s: Optional[SampleShortInfo]):
|
||||
if s is None:
|
||||
return
|
||||
try:
|
||||
self.__sample_api.create_sample_event(
|
||||
sample_id=s.db_id,
|
||||
sample_event_create=SampleEventCreate(event_type="Collected"),
|
||||
)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
def upload_image(self, sample_id: int, filename: str, bgr_image: np.ndarray):
|
||||
_, buffer = cv2.imencode('.jpg', bgr_image)
|
||||
jpeg_bytes = io.BytesIO(buffer)
|
||||
@@ -112,4 +146,139 @@ class AareWrapper:
|
||||
response = requests.post(url,
|
||||
files={'uploaded_file': (filename + ".jpg", jpeg_bytes, "image/jpeg")},
|
||||
verify=False, headers=headers)
|
||||
print(response.status_code)
|
||||
print(response.status_code)
|
||||
|
||||
def create_rotation_run(self, s: Optional[SampleShortInfo], r:RotationScanRequest, d:DAQStatusModel, sg:SampleGeometryModel):
|
||||
if s is None:
|
||||
return
|
||||
|
||||
try:
|
||||
rotation = RotationParameters(
|
||||
omegaStart_deg=r.start_omega_deg,
|
||||
omegaStep=r.incr_omega_deg,
|
||||
phi=r.start.phi_deg,
|
||||
chi=r.start.chi_deg,
|
||||
numberOfImages=r.steps,
|
||||
exposureTime_s=r.exp_time_s,
|
||||
)
|
||||
detector_data = DetectorParameters(
|
||||
manufacturer="DECTRIS",
|
||||
model=d.diffraction.detector_description,
|
||||
type="photon-counting",
|
||||
serialNumber=d.detector_serial_number,
|
||||
detectorDistance_mm=r.dtz,
|
||||
beamCenterX_px=d.diffraction.beam_center_pxl[0],
|
||||
beamCenterY_px=d.diffraction.beam_center_pxl[1],
|
||||
pixelSizeX_um=d.diffraction.pixel_size_mm * 1000,
|
||||
pixelSizeY_um=d.diffraction.pixel_size_mm * 1000,
|
||||
)
|
||||
beamline_params = BeamlineParameters(
|
||||
synchrotron="Swiss Light Source",
|
||||
beamline=d.bl.name,
|
||||
detector=detector_data,
|
||||
energy_keV=d.diffraction.energy_keV,
|
||||
wavelength_Ang=d.diffraction.wavelength_angstrom,
|
||||
ringCurrent_mA=d.bl.ring_current_mA,
|
||||
ringMode="Beamline Development",
|
||||
monochromator="Si111",
|
||||
transmission=r.transmission,
|
||||
focusingOptic="Kirkpatrick-Baez",
|
||||
beamlineFluxAtSample_ph_s=d.flux_ph_s,
|
||||
beamSizeWidth=sg.beam_size_mm * 100,
|
||||
beamSizeHeight=sg.beam_size_mm * 100,
|
||||
cryojetTemperature_K=d.bl.cryojet_K,
|
||||
rotation=rotation
|
||||
)
|
||||
experiment_params_payload = ExperimentParametersCreate(
|
||||
type="standard",
|
||||
beamline_parameters=beamline_params,
|
||||
sample_id=s.db_id
|
||||
)
|
||||
response = self.__sample_api.create_experiment_parameters_for_sample(
|
||||
sample_id=s.db_id,
|
||||
experiment_parameters_create=experiment_params_payload
|
||||
)
|
||||
print("Experiment parameters created:", response)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
def create_gridscan_run(self, s: Optional[SampleShortInfo], r:RasterGridRequest, d:DAQStatusModel, sg:SampleGeometryModel):
|
||||
if s is None:
|
||||
return
|
||||
|
||||
try:
|
||||
gridscan = GridScanParameters(
|
||||
#xStart=90.0,
|
||||
xStep=0.1,
|
||||
#yStart=0.0,
|
||||
yStep= 0.1,
|
||||
x_col=r.n_x,
|
||||
y_row=r.n_y,
|
||||
omegaStart_deg=r.omega_deg,
|
||||
numberOfImages=r.get_image_number,
|
||||
exposureTime_s=r.exp_time_s,
|
||||
)
|
||||
detector_data = DetectorParameters(
|
||||
manufacturer="DECTRIS",
|
||||
model=d.diffraction.detector_description,
|
||||
type="photon-counting",
|
||||
serialNumber=d.detector_serial_number,
|
||||
detectorDistance_mm=r.dtz,
|
||||
beamCenterX_px=d.diffraction.beam_center_pxl[0],
|
||||
beamCenterY_px=d.diffraction.beam_center_pxl[1],
|
||||
pixelSizeX_um=d.diffraction.pixel_size_mm * 1000,
|
||||
pixelSizeY_um=d.diffraction.pixel_size_mm * 1000,
|
||||
)
|
||||
beamline_params = BeamlineParameters(
|
||||
synchrotron="Swiss Light Source",
|
||||
beamline=d.bl.name,
|
||||
detector=detector_data,
|
||||
energy_keV=d.diffraction.energy_keV,
|
||||
wavelength_Ang=d.diffraction.wavelength_angstrom,
|
||||
ringCurrent_mA=d.bl.ring_current_mA,
|
||||
ringMode="Beamline Development",
|
||||
monochromator="Si111",
|
||||
transmission=r.transmission,
|
||||
focusingOptic="Kirkpatrick-Baez",
|
||||
beamlineFluxAtSample_ph_s=d.flux_ph_s,
|
||||
beamSizeWidth=sg.beam_size_mm * 100,
|
||||
beamSizeHeight=sg.beam_size_mm * 100,
|
||||
cryojetTemperature_K=d.bl.cryojet_K,
|
||||
gridScan=gridscan
|
||||
)
|
||||
experiment_params_payload = ExperimentParametersCreate(
|
||||
type="standard",
|
||||
beamline_parameters=beamline_params,
|
||||
sample_id=s.db_id
|
||||
)
|
||||
response = self.__sample_api.create_experiment_parameters_for_sample(
|
||||
sample_id=s.db_id,
|
||||
experiment_parameters_create=experiment_params_payload
|
||||
)
|
||||
print("Experiment parameters created:", response)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
def confirm_image_written(self, s: Optional[SampleShortInfo], r:RotationScanRequest):
|
||||
if s is None:
|
||||
return
|
||||
|
||||
try:
|
||||
response = self.__sample_api.update_dataset_for_experiment_run(
|
||||
filepath=r.file_prefix, #need to check if this is correct
|
||||
status="written",
|
||||
written_at=datetime.datetime.now().isoformat(),
|
||||
)
|
||||
print("Experiment run updated:", response)
|
||||
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
#def send_gridscan_result(self, s: Optional[SampleShortInfo], c: CompletedRasterGrid):
|
||||
# if s is None:
|
||||
# return
|
||||
#
|
||||
# try:
|
||||
# response = self.__proc_api.create_result(
|
||||
#
|
||||
# )
|
||||
Reference in New Issue
Block a user