diff --git a/daq/src/aaredaq/aaredb.py b/daq/src/aaredaq/aaredb.py index bb56245a..0470f3e2 100644 --- a/daq/src/aaredaq/aaredb.py +++ b/daq/src/aaredaq/aaredb.py @@ -148,7 +148,7 @@ class AareWrapper: verify=False, headers=headers) print(response.status_code) - def create_rotation_run(self, s: Optional[SampleShortInfo], r:RotationScanRequest, d:DAQStatusModel, sg:SampleGeometryModel): + def create_rotation_run(self, s: Optional[SampleShortInfo], r:RotationScanRequest, d:DAQStatusModel): if s is None: return @@ -156,8 +156,8 @@ class AareWrapper: rotation = RotationParameters( omegaStart_deg=r.start_omega_deg, omegaStep=r.incr_omega_deg, - phi=r.start.phi_deg, - chi=r.start.chi_deg, + phi=d.geom.smargon.phi_deg, + chi=d.geom.smargon.chi_deg, numberOfImages=r.steps, exposureTime_s=r.exp_time_s, ) @@ -165,7 +165,7 @@ class AareWrapper: manufacturer="DECTRIS", model=d.diffraction.detector_description, type="photon-counting", - serialNumber=d.detector_serial_number, + serialNumber=d.diffraction.detector_serial_number, detectorDistance_mm=r.dtz, beamCenterX_px=d.diffraction.beam_center_pxl[0], beamCenterY_px=d.diffraction.beam_center_pxl[1], @@ -184,8 +184,8 @@ class AareWrapper: 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, + beamSizeWidth=d.geom.beam_size_mm * 100, + beamSizeHeight=d.geom.beam_size_mm * 100, cryojetTemperature_K=d.bl.cryojet_K, rotation=rotation ) @@ -202,27 +202,27 @@ class AareWrapper: except Exception as e: print(e) - def create_gridscan_run(self, s: Optional[SampleShortInfo], r:RasterGridRequest, d:DAQStatusModel, sg:SampleGeometryModel): + def create_gridscan_run(self, s: Optional[SampleShortInfo], r:RasterGridRequest, d:DAQStatusModel): if s is None: return try: gridscan = GridScanParameters( #xStart=90.0, - xStep=0.1, + xStep=r.grid_size_mm.x, #yStart=0.0, - yStep= 0.1, + yStep= r.grid_size_mm.y, x_col=r.n_x, y_row=r.n_y, omegaStart_deg=r.omega_deg, - numberOfImages=r.get_image_number, + numberOfImages=r.n_x * r.n_y, exposureTime_s=r.exp_time_s, ) detector_data = DetectorParameters( manufacturer="DECTRIS", model=d.diffraction.detector_description, type="photon-counting", - serialNumber=d.detector_serial_number, + serialNumber=d.diffraction.detector_serial_number, detectorDistance_mm=r.dtz, beamCenterX_px=d.diffraction.beam_center_pxl[0], beamCenterY_px=d.diffraction.beam_center_pxl[1], @@ -241,8 +241,8 @@ class AareWrapper: 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, + beamSizeWidth=d.geom.beam_size_mm * 100, + beamSizeHeight=d.geom.beam_size_mm * 100, cryojetTemperature_K=d.bl.cryojet_K, gridScan=gridscan ) diff --git a/daq/src/aaredaq/daq.py b/daq/src/aaredaq/daq.py index 02ae93ed..2e9f62b3 100644 --- a/daq/src/aaredaq/daq.py +++ b/daq/src/aaredaq/daq.py @@ -8,6 +8,7 @@ import numpy as np import redis from aaredaq import workflows +from aaredaq.aaredb import AareWrapper from aaredaq.autofocus import calculate_focus_measure from aaredaq.config import BeamlineConfig, ABR_POS_MOUNT from aaredaq.config import BeamlineStateEnum @@ -48,7 +49,8 @@ class AareDAQ: self.__mlbox = MlBox() self.__jfjoch = JFJochWrapper(bl) self.__bl = bl.value.upper() - + self.__aare = AareWrapper(bl) + @property def state(self) -> BeamlineStateEnum: return self.__cfg.state @@ -185,7 +187,7 @@ class AareDAQ: raise Exception("Beamstop Z below 24.0 mm - potentially unsafe with mounting") if self.__devs.magnet_position_sensor.value != 0: raise Exception("Magnet position sensor is not in position") - self.__devs.tell.check_enable_motion() +# self.__devs.tell.check_enable_motion() self.__devs.tell.set_in_mount_position(True) curr_sample = self.__cfg.current_sample @@ -193,15 +195,12 @@ class AareDAQ: if target is None: self.__devs.tell.unmount(wait=True, timeout=360) - - if curr_sample is not None: - self.__devs.aare.sample_unmounted(curr_sample) + self.__aare.sample_unmounted(curr_sample) self.__cfg.current_sample = None else: if target.location is None: raise Exception("Sample not loaded into dewar") - if curr_sample is not None: - self.__devs.aare.sample_unmounted(curr_sample) + self.__aare.sample_unmounted(curr_sample) self.__devs.tell.mount( address=target.tell_address(), force=True, @@ -211,7 +210,7 @@ class AareDAQ: timeout=360, ) - self.__devs.aare.sample_mounted(target) + self.__aare.sample_mounted(target) self.__cfg.current_sample = target @sample.setter @@ -258,6 +257,9 @@ class AareDAQ: self.__devs.aerotech.move(r.omega_deg, wait=True, speed=360.0) save_smargon_position = self.__devs.smargon.readback self.__devs.smargon.target = r.smargon + + self.__aare.create_gridscan_run(self.sample, r, self.status) + self.__devs.aerotech.measure_raster_simple( r.exp_time_s, r.grid_size_mm.x, r.grid_size_mm.y, r.n_x, r.n_y ) @@ -289,8 +291,9 @@ class AareDAQ: self.__devs.smargon.target = request.start self.__devs.smargon.wait() - self.__jfjoch.measure_rotation(request, self.diffraction_geometry, self.sample) - + self.__jfjoch.measure_rotation(request, self.diffraction_geometry, self.sample) + self.__aare.create_rotation_run(self.sample, request, self.status) + if request.screening: self.__devs.aerotech.measure_screening(request.start_omega_deg, request.wedge_omega_deg, @@ -319,6 +322,7 @@ class AareDAQ: self.__devs.aerotech.wait_scan_done(total_time + 60) self.__jfjoch.wait_till_done(60) + self.__aare.confirm_image_written(self.sample, request) self.__devs.aerotech.reset() def measure_rotation(self, request: RotationScanRequest): @@ -454,8 +458,7 @@ class AareDAQ: if filename is not None: cv2.rectangle(bgr_image, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2) cv2.imwrite(f"{filename}.jpg", bgr_image) - if sample_id is not None: - self.__devs.aare.upload_image(sample_id, filename, bgr_image) + self.__aare.upload_image(sample_id, filename, bgr_image) if move: geom = self.sample_geometry coord = geom.picture_to_smargon(Coordinate(x=x1, y=y1)) @@ -570,12 +573,11 @@ class AareDAQ: def save_screenshot_db(self, sample_id: int, filename: str): time.sleep(0.2) # Wait 200 ms to ensure camera image is stable bgr_image = cv2.cvtColor(self.camera_image, cv2.COLOR_RGB2BGR) - self.__devs.aare.upload_image(sample_id, filename, bgr_image) + self.__aare.upload_image(sample_id, filename, bgr_image) @property def sample_spreadsheet(self) -> SampleShortInfoList: - return SampleShortInfoList(s=[]) - #return self.__devs.aare.get_sample_info() + return self.__aare.get_sample_info() def sample_spreadsheet_user(self, pgroup: str) -> SampleShortInfoList: sample = self.sample_spreadsheet diff --git a/daq/src/aaredaq/devices.py b/daq/src/aaredaq/devices.py index f33cf06f..79b497db 100644 --- a/daq/src/aaredaq/devices.py +++ b/daq/src/aaredaq/devices.py @@ -1,7 +1,7 @@ -from aaredaqlib.coordinate import Coordinate from epics import PV from aaredaqlib.beamline import MXBeamline +from aaredaqlib.coordinate import Coordinate from aaredaqlib.models import SampleCameraSettings from mxlibs3 import aerotech, smargon from mxlibs3.area_detector import epicsAD @@ -11,6 +11,7 @@ from mxlibs3.non_standard import NonStandard from mxlibs3.tell_client import TellClient from mxlibs3.workflow_tools import wait_position + #from bec_lib.client import BECClient #from bec_lib.service_config import ServiceConfig @@ -23,8 +24,6 @@ class BeamlineDevices: #self.__bec_dev = client.device_manager.devices #self.__bec_scans = client.scans - # self.aare = AareWrapper(beamline) - BEAMLINE = beamline.value.upper() self.tell = TellClient(beamline) diff --git a/daq/src/aaredaq/server.py b/daq/src/aaredaq/server.py index dc925263..7ebe80fb 100644 --- a/daq/src/aaredaq/server.py +++ b/daq/src/aaredaq/server.py @@ -177,8 +177,7 @@ async def sample(token: str = Depends(oauth2_scheme)) -> SampleShortInfo: async def mount(dbid: int, token: str = Depends(oauth2_scheme)): token_data = auth.parse_token(token) auth.check_jwt_rw(cfg, auth.parse_token(token)) - # st = daq.sample_spreadsheet - st = SampleShortInfoList(s=[]) + st = daq.sample_spreadsheet index = -1 for i in range(len(st.s)):