From a126f7ccb4a49f2ec23485332bbd3af873aa5bc8 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Tue, 17 Jun 2025 10:44:50 +0200 Subject: [PATCH] DAQ/GUI: Fixes during pre-beamtime test (2) --- common/src/aaredaqlib/sample_geometry.py | 6 ++++++ daq/src/aaredaq/devices.py | 13 +++++++++++++ daq/src/aaredaq/workflows.py | 11 +++++++---- gui/src/aaregui/main_window.py | 1 + .../aaregui/scan_logic/raster_grid_manager.py | 13 +++++++++---- gui/src/aaregui/widgets/camera_image.py | 18 +++++++++--------- 6 files changed, 45 insertions(+), 17 deletions(-) diff --git a/common/src/aaredaqlib/sample_geometry.py b/common/src/aaredaqlib/sample_geometry.py index 35f9c414..30b1927e 100644 --- a/common/src/aaredaqlib/sample_geometry.py +++ b/common/src/aaredaqlib/sample_geometry.py @@ -28,6 +28,12 @@ class SampleGeometryModel(BaseModel): def beam_size_pxl(self) -> Coordinate: return self.beam_size_mm / self.pixel_in_mm + + def smargon_z(self, pic_y: float) -> Coordinate: + y_mm = (pic_y - self.beam_location_pxl.y) * self.pixel_in_mm + print("Moving by ", y_mm, "mm in z direction.") + return self.smargon.sh_mm + self.smargon_nudge(Coordinate(z=y_mm)) + # This goes from image coordinates to relative beam coordinates in image plane def picture_to_sample(self, pic_pxl: Coordinate) -> Coordinate: # Relative to beam location diff --git a/daq/src/aaredaq/devices.py b/daq/src/aaredaq/devices.py index b30dfe47..f33cf06f 100644 --- a/daq/src/aaredaq/devices.py +++ b/daq/src/aaredaq/devices.py @@ -46,6 +46,8 @@ class BeamlineDevices: self.bsx = MyMotor(f"{BEAMLINE}-ES-BS:TRX1") self.bsy = MyMotor(f"{BEAMLINE}-ES-BS:TRY1") + self.__collimator = PV(f"{BEAMLINE}-ES-COL:TRY1") + self.aerotech = aerotech.Abr(beamline) self.aerotech.reload_programs() @@ -170,6 +172,17 @@ class BeamlineDevices: def zoom_sync(self, value: float): self.__zoom.move(value, wait=True) + @property + def collimator_up(self) -> bool: + return bool(abs(self.__collimator.value - 92.979) < 0.01) + + @collimator_up.setter + def collimator_up(self, value: bool): + if value: + self.__collimator.put(92.979, wait=True) + else: + self.__collimator.put(42.979, wait=True) + @property def reflector_up(self) -> bool: return bool(self.__reflector.position_is("measure")) diff --git a/daq/src/aaredaq/workflows.py b/daq/src/aaredaq/workflows.py index 04fb200e..f08601cd 100644 --- a/daq/src/aaredaq/workflows.py +++ b/daq/src/aaredaq/workflows.py @@ -141,7 +141,7 @@ def sa2dc(devs: BeamlineDevices, cfg: BeamlineConfig): _cryo = hub.cryojet_in_use cryo_meas = hub.cryojet_measurement_position - # devs.reflector = False + devs.reflector_up = False if _cryo: devs.cryo.move(cryo_meas) @@ -149,6 +149,8 @@ def sa2dc(devs: BeamlineDevices, cfg: BeamlineConfig): #devs.reflector.wait("park") devs.beamstop_stage_up = True devs.dtz.move(cfg.dtz, wait=True) + devs.collimator_up = True + pv_wait(devs.dtz, None, tolerance=1.0) wait_for_dc_devices(devs) @@ -170,14 +172,15 @@ def dc2se(devs: BeamlineDevices, cfg: BeamlineConfig): if devs.dtz.position < _dtzpark: devs.dtz.move(_dtzpark) - + devs.collimator_up = False + devs.reflector_up = True def dc2sa(devs: BeamlineDevices, cfg: BeamlineConfig): hub = cfg.settings - + devs.collimator_up = False devs.reflector_up = True - devs.gmz.move(cfg.abr_meas_pos.z, wait=True) + # devs.gmz.move(cfg.abr_meas_pos.z, wait=True) def sa2xrf(devs: BeamlineDevices, cfg: BeamlineConfig): diff --git a/gui/src/aaregui/main_window.py b/gui/src/aaregui/main_window.py index f573bfb7..1992ffbc 100644 --- a/gui/src/aaregui/main_window.py +++ b/gui/src/aaregui/main_window.py @@ -132,6 +132,7 @@ class MainWindow(QMainWindow): self.daq.update.connect(self.beamline.smargon_panel.update_daq_status) self.daq.update.connect(self.data_collection.update_daq_status) self.daq.update.connect(self.beamline.illumination_panel.update_daq_status) + self.daq.update.connect(self.raster.update_daq_status) self.daq.update.connect(self.status_panel.update_daq_status) self.daq.update.connect(self.camera_image.update_daq_status) self.daq.update.connect(self.tell_samples.update_daq_status) diff --git a/gui/src/aaregui/scan_logic/raster_grid_manager.py b/gui/src/aaregui/scan_logic/raster_grid_manager.py index 7efec9ff..428b39a3 100644 --- a/gui/src/aaregui/scan_logic/raster_grid_manager.py +++ b/gui/src/aaregui/scan_logic/raster_grid_manager.py @@ -266,12 +266,17 @@ class RasterGridManager(QObject): if values is not None: painter.setPen(Qt.PenStyle.NoPen) - min_value = min((x for x in values if not math.isnan(x)), default=0) - max_value = max((x for x in values if not math.isnan(x)), default=1) + min_value = min((x for x in values if not None and not math.isnan(x)), default=0) + max_value = max((x for x in values if not None and not math.isnan(x)), default=1) + if min_value == max_value: + diff = 1 + else: + diff = min_value - max_value + else: painter.setPen(QPen(QColor(114, 159, 207), 2, Qt.PenStyle.SolidLine)) min_value = 0 - max_value = 1 + diff = 1 g = grid.grid_size_pxl(self.__geom) c0 = grid.start_pxl(self.__geom) @@ -281,7 +286,7 @@ class RasterGridManager(QObject): if values is None or len(values) <= pxl or math.isnan(values[pxl]) or values[pxl] < 0: painter.setBrush(Qt.BrushStyle.NoBrush) else: - painter.setBrush(QBrush(float_to_viridis_brush((values[pxl] - min_value) / (max_value - min_value), alpha=alpha))) + painter.setBrush(QBrush(float_to_viridis_brush((values[pxl] - min_value) / diff, alpha=alpha))) c = self.__geom.sample_to_picture(c0 + Coordinate(x=x * grid.grid_size_mm.x, y=y * grid.grid_size_mm.y)) painter.drawRect(QRect(round(c.x), round(c.y), round(g.x), round(g.y))) diff --git a/gui/src/aaregui/widgets/camera_image.py b/gui/src/aaregui/widgets/camera_image.py index 2cace691..9a42e712 100644 --- a/gui/src/aaregui/widgets/camera_image.py +++ b/gui/src/aaregui/widgets/camera_image.py @@ -307,15 +307,15 @@ class SampleCameraImageLabel(QGraphicsView): def __left_single_click(self, event): match self.__state: case SampleCameraImageState.IDLE: - self.end_point = self.mapToScene(event.pos()) - - sample_coord = self.__geom.picture_to_sample( - Coordinate(x=self.end_point.x(), y=self.end_point.y()) - ) - smargon_coord = SmargonCoordinate( - sh_mm=self.__geom.beamline_to_smargon(sample_coord) - ) - self.smargon.emit(smargon_coord) + point = self.mapToScene(event.pos()) + if event.modifiers() & Qt.KeyboardModifier.ShiftModifier: + self.smargon.emit(self.__geom.smargon_z(point.y())) + else: + sample_coord = self.__geom.picture_to_sample(Coordinate(x=point.x(), y=point.y())) + smargon_coord = SmargonCoordinate( + sh_mm=self.__geom.beamline_to_smargon(sample_coord) + ) + self.smargon.emit(smargon_coord) def __draw_beam_center(self, painter: QPainter): beam_size_pxl = self.__geom.beam_size_pxl