diff --git a/src/aare/common/beamline.py b/src/aare/common/beamline.py index e448fcff..8a775a0c 100644 --- a/src/aare/common/beamline.py +++ b/src/aare/common/beamline.py @@ -15,3 +15,17 @@ def mx_beamline() -> MXBeamline: return MXBeamline.SIMULATED name=name.strip().upper() return MXBeamline[name] if name in MXBeamline.__members__ else MXBeamline.SIMULATED + +def get_jfjoch_url(bl: MXBeamline) -> str: + """Centralized URL resolution for JFJoch services.""" + match bl: + case MXBeamline.X10SA: + return "http://sls-gpu-002:8080" + case MXBeamline.X06DA: + return "http://sls-gpu-001:8080" + case MXBeamline.SIMULATED: + return "http://localhost:8080" + case MXBeamline.X06SA: + raise NotImplementedError("X06SA beamline not supported yet") + case _: + raise ValueError(f"No JFJoch URL configured for beamline: {bl}") \ No newline at end of file diff --git a/src/aare/devices/jfjoch.py b/src/aare/devices/jfjoch.py index 9dc25f29..a450beb6 100644 --- a/src/aare/devices/jfjoch.py +++ b/src/aare/devices/jfjoch.py @@ -4,7 +4,7 @@ from enum import Enum import jfjoch_client -from aare.common.beamline import MXBeamline +from aare.common.beamline import MXBeamline, get_jfjoch_url from aare.common.exception_handler import JFJochCommunicationError from aare.common.models import DAQStatusModel, FluorescenceSpectrumOutputModel from aare.common.raster_grid import RasterGridRequest @@ -20,20 +20,13 @@ class ScanTypeEnum(Enum): class JFJochWrapper: def __init__(self, bl: MXBeamline): - self.__simulated = False - match bl: - case MXBeamline.X06DA: - self.__url = "http://sls-gpu-001:8080" - case MXBeamline.X10SA: - self.__url = "http://sls-gpu-002:8080" - case MXBeamline.SIMULATED: - self.__url = "http://localhost:8080" - self.__client = None - self.__api = None - self.__simulated = True - return - case _: - raise Exception("unknown beamline") + self.__simulated = (bl == MXBeamline.SIMULATED) + self.__url = get_jfjoch_url(bl) + + if self.__url == "simulated": + self.__client = None + self.__api = None + return self.__client = jfjoch_client.ApiClient(jfjoch_client.Configuration(host=self.__url)) self.__api = jfjoch_client.DefaultApi(self.__client) diff --git a/src/aare/gui/scan_logic/raster_grid_manager.py b/src/aare/gui/scan_logic/raster_grid_manager.py index 8070977d..61584627 100644 --- a/src/aare/gui/scan_logic/raster_grid_manager.py +++ b/src/aare/gui/scan_logic/raster_grid_manager.py @@ -6,6 +6,7 @@ from PySide6.QtGui import QPainter, QPen, QColor, QBrush from PySide6.QtCore import Qt, QRect from typing import List, Tuple +from aare.common.beamline import mx_beamline, get_jfjoch_url from aare.common.coordinate import Coordinate, SmargonCoordinate from aare.common.models import DAQStatusModel from aare.common.raster_grid import RasterGridRequest, CompletedRasterGrid, CompletedRasterGridElem @@ -95,6 +96,8 @@ class RasterGridManager(QObject): super().__init__() self.__sample_id = -1 + self.__beamline = mx_beamline() + self.__detector_url = get_jfjoch_url(self.__beamline) self.__beam_size_mm = geom.beam_size_mm self.__geom = geom @@ -299,7 +302,7 @@ class RasterGridManager(QObject): self.__loaded_image_index = grid.result.images[cell].number print(f"Load {grid.result.file_prefix} {grid.result.images[cell].number}") #self.image_selected.emit(grid.result.file_prefix, grid.result.images[cell].number) - self.image_selected.emit("http://sls-gpu-001:8080", grid.result.images[cell].number) + self.image_selected.emit(self.__detector_url, grid.result.images[cell].number) def is_part_of_active_grid(self, point: QPointF) -> bool: if not self._is_grid_visible(self.__active_grid): @@ -712,7 +715,7 @@ class RasterGridManager(QObject): com = last_raster.centre_of_mass logger.info(f"COM: {com}") cell = com.max_image if com else 0 - self.image_selected.emit("http://sls-gpu-001:8080", cell) + self.image_selected.emit(self.__detector_url, cell) self.completed_grid_updated.emit() @Slot(int, bool) diff --git a/src/aare/gui/threads/jfjoch_viewer.py b/src/aare/gui/threads/jfjoch_viewer.py index 3fb11456..fd3455d0 100644 --- a/src/aare/gui/threads/jfjoch_viewer.py +++ b/src/aare/gui/threads/jfjoch_viewer.py @@ -1,5 +1,7 @@ from PySide6.QtCore import QObject, Slot from PySide6.QtDBus import QDBusConnection, QDBusInterface +from aare.common.beamline import MXBeamline, mx_beamline, get_jfjoch_url + class JFJochDBusClient(QObject): def __init__(self): @@ -9,6 +11,12 @@ class JFJochDBusClient(QObject): self.__interface = None self.__dbus_available = False + self.__beamline = mx_beamline() + try: + self.__detector_url = get_jfjoch_url(self.__beamline) + except ValueError: + self.__detector_url = None + try: self.__session_bus = QDBusConnection.sessionBus() if self.__session_bus.isConnected(): @@ -66,5 +74,5 @@ class JFJochDBusClient(QObject): return if self._ensure_interface(): - reply = self.__interface.call("LoadFile", "http://sls-gpu-001:8080", -1, 1) + reply = self.__interface.call("LoadFile", self.__detector_url, -1, 1)