From ec88b4d3f499c7b5ea06f8d036cf88345052d681 Mon Sep 17 00:00:00 2001 From: x01da Date: Tue, 23 Jun 2026 14:08:32 +0200 Subject: [PATCH] change from absolute to relative imports --- .../widgets/digital_twin/__init__.py | 3 + .../widgets/digital_twin/beamline.py | 51 +++++++++++++++++ .../calculations/calc_positions.py | 4 +- .../calculations/calc_sideview.py | 4 +- .../calculations/calc_surfaces.py | 4 +- .../digital_twin/calculations/calc_varia.py | 2 +- .../widgets/digital_twin/digital_twin.py | 56 ++++--------------- .../digital_twin/digital_twin_plugin.py | 4 +- .../digital_twin/panels/input_panel.py | 10 +--- .../digital_twin/panels/mover_panel.py | 7 +-- .../widgets/digital_twin/panels/plots.py | 6 +- .../digital_twin/panels/settings_panel.py | 6 +- .../digital_twin/register_digital_twin.py | 2 +- .../digital_twin/widgets/move_widget.py | 3 +- 14 files changed, 86 insertions(+), 76 deletions(-) create mode 100644 debye_bec/bec_widgets/widgets/digital_twin/beamline.py diff --git a/debye_bec/bec_widgets/widgets/digital_twin/__init__.py b/debye_bec/bec_widgets/widgets/digital_twin/__init__.py index e69de29..a42cb09 100644 --- a/debye_bec/bec_widgets/widgets/digital_twin/__init__.py +++ b/debye_bec/bec_widgets/widgets/digital_twin/__init__.py @@ -0,0 +1,3 @@ +from .beamline import get_parameters + +parameters = get_parameters() diff --git a/debye_bec/bec_widgets/widgets/digital_twin/beamline.py b/debye_bec/bec_widgets/widgets/digital_twin/beamline.py new file mode 100644 index 0000000..3653284 --- /dev/null +++ b/debye_bec/bec_widgets/widgets/digital_twin/beamline.py @@ -0,0 +1,51 @@ +import socket + +from bec_lib import bec_logger + +from .types import BeamlineId + +logger = bec_logger.logger + + +def get_beamline_id() -> BeamlineId: + """ + Based on the bec servers hostname, tries to extract the beamline + identifier (e.g. x01da, x10da, etc). + + Raises: + ValueError if beamline cannot be extracted from hostname or beamline not implemented. + """ + bec_hostname = socket.gethostname() + start = bec_hostname.find("x") + if start != -1: + beamline = bec_hostname[start : start + 5] + match beamline: + case "x01da": + return BeamlineId.X01DA + case "x10da": + return BeamlineId.X10DA + case _: + raise ValueError(f"Not implemented beamline {beamline}") + else: + logger.warning(f"Failed to extract beamline from bec server hostname {bec_hostname}") + choice = input("Do you want to manually select a beamline? (yes/no): ").strip().lower() + if choice in ["yes", "y"]: + bl = input(f"Choose from: {[bl.value for bl in BeamlineId]}") + if bl in BeamlineId: + logger.info(f"Manually selected beamline {bl}") + return BeamlineId(bl) + else: + raise ValueError(f"Wrong selection {bl}") + else: + raise ValueError("Cannot open digital twin without a beamline") + + +def get_parameters(): + beamline = get_beamline_id() + if beamline == "x01da": + from . import x01da_parameters as parameters + elif beamline == "x10da": + from . import x10da_parameters as parameters + else: + raise ValueError(f"Unknown beamline: {beamline}") + return parameters diff --git a/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_positions.py b/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_positions.py index 885dcb3..6347d4b 100644 --- a/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_positions.py +++ b/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_positions.py @@ -5,8 +5,8 @@ Calculates the positions of axes based on a beamline config import numpy as np from bec_lib import bec_logger -import debye_bec.bec_widgets.widgets.digital_twin.x01da_parameters as bl -from debye_bec.bec_widgets.widgets.digital_twin.types import ConfigDict +from .. import parameters as bl +from ..types import ConfigDict logger = bec_logger.logger diff --git a/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_sideview.py b/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_sideview.py index 7ec677d..135c76d 100644 --- a/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_sideview.py +++ b/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_sideview.py @@ -4,8 +4,8 @@ Calculates the sideview coordinates based on a beamline config. import numpy as np -import debye_bec.bec_widgets.widgets.digital_twin.x01da_parameters as bl -from debye_bec.bec_widgets.widgets.digital_twin.types import ConfigDict, DataDict +from .. import parameters as bl +from ..types import ConfigDict, DataDict def calc_sideview(cfg: ConfigDict) -> DataDict: diff --git a/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_surfaces.py b/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_surfaces.py index 0b90b93..9411ded 100644 --- a/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_surfaces.py +++ b/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_surfaces.py @@ -7,8 +7,8 @@ import re import numpy as np from bec_lib import bec_logger -import debye_bec.bec_widgets.widgets.digital_twin.x01da_parameters as bl -from debye_bec.bec_widgets.widgets.digital_twin.types import ConfigDict, SurfaceDict +from .. import parameters as bl +from ..types import ConfigDict, SurfaceDict logger = bec_logger.logger diff --git a/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_varia.py b/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_varia.py index db7c471..33ad7cf 100644 --- a/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_varia.py +++ b/debye_bec/bec_widgets/widgets/digital_twin/calculations/calc_varia.py @@ -10,7 +10,7 @@ from bec_lib import bec_logger from scipy.interpolate import UnivariateSpline from xrt.backends.raycing.physconsts import AVOGADRO, CHeVcm -import debye_bec.bec_widgets.widgets.digital_twin.x01da_parameters as bl +from .. import parameters as bl logger = bec_logger.logger diff --git a/debye_bec/bec_widgets/widgets/digital_twin/digital_twin.py b/debye_bec/bec_widgets/widgets/digital_twin/digital_twin.py index 96a6343..180e9fb 100644 --- a/debye_bec/bec_widgets/widgets/digital_twin/digital_twin.py +++ b/debye_bec/bec_widgets/widgets/digital_twin/digital_twin.py @@ -2,7 +2,6 @@ Digital Twin: Custom BEC widget to support the beamline alignment. """ -import socket import sys from pathlib import Path from typing import Literal, cast @@ -36,10 +35,11 @@ from qtpy.QtWidgets import ( QWidget, ) -from debye_bec.bec_widgets.widgets.digital_twin.calculations.calc_positions import calc_positions -from debye_bec.bec_widgets.widgets.digital_twin.calculations.calc_sideview import calc_sideview -from debye_bec.bec_widgets.widgets.digital_twin.calculations.calc_surfaces import calc_surfaces -from debye_bec.bec_widgets.widgets.digital_twin.calculations.calc_varia import ( +from .beamline import get_beamline_id +from .calculations.calc_positions import calc_positions +from .calculations.calc_sideview import calc_sideview +from .calculations.calc_surfaces import calc_surfaces +from .calculations.calc_varia import ( cm_critical_angle, cm_reflectivity, cm_stripe_to_trx, @@ -53,12 +53,12 @@ from debye_bec.bec_widgets.widgets.digital_twin.calculations.calc_varia import ( sldi_gap_to_acc, table_to_smpl_pos, ) -from debye_bec.bec_widgets.widgets.digital_twin.panels.input_panel import InputPanel -from debye_bec.bec_widgets.widgets.digital_twin.panels.mover_panel import MoverPanel -from debye_bec.bec_widgets.widgets.digital_twin.panels.plots import SideviewPlot, SurfacePlots -from debye_bec.bec_widgets.widgets.digital_twin.panels.settings_panel import SettingsPanel -from debye_bec.bec_widgets.widgets.digital_twin.types import BeamlineId, ConfigDict -from debye_bec.bec_widgets.widgets.digital_twin.widgets.qt_widgets import ComboBox, InputNumberField +from .panels.input_panel import InputPanel +from .panels.mover_panel import MoverPanel +from .panels.plots import SideviewPlot, SurfacePlots +from .panels.settings_panel import SettingsPanel +from .types import ConfigDict +from .widgets.qt_widgets import ComboBox, InputNumberField logger = bec_logger.logger @@ -78,7 +78,7 @@ class DigitalTwin(BECWidget, QWidget): super().__init__(parent=parent, theme_update=True, *arg, **kwargs) self.get_bec_shortcuts() - self.beamline = self.get_beamline_id() + self.beamline = get_beamline_id() # Debugging, override beamline! # self.beamline = BeamlineId.X10DA @@ -200,38 +200,6 @@ class DigitalTwin(BECWidget, QWidget): self.surface_plots.apply_theme(theme) self.mover.apply_theme(theme) - def get_beamline_id(self) -> BeamlineId: - """ - Based on the bec servers hostname, tries to extract the beamline - identifier (e.g. x01da, x10da, etc). - - Raises: - ValueError if beamline cannot be extracted from hostname or beamline not implemented. - """ - bec_hostname = socket.gethostname() - start = bec_hostname.find("x") - if start != -1: - beamline = bec_hostname[start : start + 5] - match beamline: - case "x01da": - return BeamlineId.X01DA - case "x10da": - return BeamlineId.X10DA - case _: - raise ValueError(f"Not implemented beamline {beamline}") - else: - logger.warning(f"Failed to extract beamline from bec server hostname {bec_hostname}") - choice = input("Do you want to manually select a beamline? (yes/no): ").strip().lower() - if choice in ["yes", "y"]: - bl = input(f"Choose from: {[bl.value for bl in BeamlineId]}") - if bl in BeamlineId: - logger.info(f"Manually selected beamline {bl}") - return BeamlineId(bl) - else: - raise ValueError(f"Wrong selection {bl}") - else: - raise ValueError("Cannot open digital twin without a beamline") - @SafeSlot() def check_bec_config(self, *args): """ diff --git a/debye_bec/bec_widgets/widgets/digital_twin/digital_twin_plugin.py b/debye_bec/bec_widgets/widgets/digital_twin/digital_twin_plugin.py index 2decf97..921fd6b 100644 --- a/debye_bec/bec_widgets/widgets/digital_twin/digital_twin_plugin.py +++ b/debye_bec/bec_widgets/widgets/digital_twin/digital_twin_plugin.py @@ -5,7 +5,7 @@ from bec_widgets.utils.bec_designer import designer_material_icon from qtpy.QtDesigner import QDesignerCustomWidgetInterface from qtpy.QtWidgets import QWidget -from debye_bec.bec_widgets.widgets.digital_twin.digital_twin import DigitalTwin +from .digital_twin import DigitalTwin DOM_XML = """ @@ -22,7 +22,7 @@ class DigitalTwinPlugin(QDesignerCustomWidgetInterface): # pragma: no cover def createWidget(self, parent): if parent is None: - return QWidget() + return QWidget() t = DigitalTwin(parent) return t diff --git a/debye_bec/bec_widgets/widgets/digital_twin/panels/input_panel.py b/debye_bec/bec_widgets/widgets/digital_twin/panels/input_panel.py index 2620b9b..c0ae458 100644 --- a/debye_bec/bec_widgets/widgets/digital_twin/panels/input_panel.py +++ b/debye_bec/bec_widgets/widgets/digital_twin/panels/input_panel.py @@ -7,14 +7,8 @@ from typing import Union # pylint: disable=E0611 from qtpy.QtWidgets import QVBoxLayout, QWidget -from debye_bec.bec_widgets.widgets.digital_twin.types import BeamlineId -from debye_bec.bec_widgets.widgets.digital_twin.widgets.qt_widgets import ( - Button, - ComboBox, - Group, - InputNumberField, - NumberIndicator, -) +from ..types import BeamlineId +from ..widgets.qt_widgets import Button, ComboBox, Group, InputNumberField, NumberIndicator class InputPanel(QWidget): diff --git a/debye_bec/bec_widgets/widgets/digital_twin/panels/mover_panel.py b/debye_bec/bec_widgets/widgets/digital_twin/panels/mover_panel.py index fcf3703..1e1ba99 100644 --- a/debye_bec/bec_widgets/widgets/digital_twin/panels/mover_panel.py +++ b/debye_bec/bec_widgets/widgets/digital_twin/panels/mover_panel.py @@ -7,11 +7,8 @@ from typing import Literal # pylint: disable=E0611 from qtpy.QtWidgets import QVBoxLayout, QWidget -from debye_bec.bec_widgets.widgets.digital_twin.widgets.move_widget import ( - AbsorberWidget, - MoveWidget, -) -from debye_bec.bec_widgets.widgets.digital_twin.widgets.qt_widgets import Group +from ..widgets.move_widget import AbsorberWidget, MoveWidget +from ..widgets.qt_widgets import Group class MoverPanel(QWidget): diff --git a/debye_bec/bec_widgets/widgets/digital_twin/panels/plots.py b/debye_bec/bec_widgets/widgets/digital_twin/panels/plots.py index 8cbafce..0080ef0 100644 --- a/debye_bec/bec_widgets/widgets/digital_twin/panels/plots.py +++ b/debye_bec/bec_widgets/widgets/digital_twin/panels/plots.py @@ -15,14 +15,14 @@ from qtpy.QtGui import QBrush, QColor # pylint: disable=E0611 from qtpy.QtWidgets import QApplication, QGraphicsRectItem, QHBoxLayout, QVBoxLayout, QWidget -from debye_bec.bec_widgets.widgets.digital_twin.calculations.calc_varia import ( +from ..calculations.calc_varia import ( mirror_surface_geometries, mo_surface_geometries, pipe_geometries, wall_geometries, ) -from debye_bec.bec_widgets.widgets.digital_twin.types import DataDict, SurfaceDict -from debye_bec.bec_widgets.widgets.digital_twin.widgets.qt_widgets import Group +from ..types import DataDict, SurfaceDict +from ..widgets.qt_widgets import Group logger = bec_logger.logger diff --git a/debye_bec/bec_widgets/widgets/digital_twin/panels/settings_panel.py b/debye_bec/bec_widgets/widgets/digital_twin/panels/settings_panel.py index 88ce3e1..2bf74d2 100644 --- a/debye_bec/bec_widgets/widgets/digital_twin/panels/settings_panel.py +++ b/debye_bec/bec_widgets/widgets/digital_twin/panels/settings_panel.py @@ -5,11 +5,7 @@ Settings panel for the digital twin widget # pylint: disable=E0611 from qtpy.QtWidgets import QVBoxLayout, QWidget -from debye_bec.bec_widgets.widgets.digital_twin.widgets.qt_widgets import ( - Button, - Group, - TextIndicator, -) +from ..widgets.qt_widgets import Button, Group, TextIndicator class SettingsPanel(QWidget): diff --git a/debye_bec/bec_widgets/widgets/digital_twin/register_digital_twin.py b/debye_bec/bec_widgets/widgets/digital_twin/register_digital_twin.py index 0c5d315..024c888 100644 --- a/debye_bec/bec_widgets/widgets/digital_twin/register_digital_twin.py +++ b/debye_bec/bec_widgets/widgets/digital_twin/register_digital_twin.py @@ -6,7 +6,7 @@ def main(): # pragma: no cover return from PySide6.QtDesigner import QPyDesignerCustomWidgetCollection - from debye_bec.bec_widgets.widgets.digital_twin.digital_twin_plugin import DigitalTwinPlugin + from .digital_twin_plugin import DigitalTwinPlugin QPyDesignerCustomWidgetCollection.addCustomWidget(DigitalTwinPlugin()) diff --git a/debye_bec/bec_widgets/widgets/digital_twin/widgets/move_widget.py b/debye_bec/bec_widgets/widgets/digital_twin/widgets/move_widget.py index 65efd74..4bd529c 100644 --- a/debye_bec/bec_widgets/widgets/digital_twin/widgets/move_widget.py +++ b/debye_bec/bec_widgets/widgets/digital_twin/widgets/move_widget.py @@ -15,7 +15,8 @@ from qtpy.QtCore import QObject, QPropertyAnimation, Qt, QThread from qtpy.QtGui import QTransform from qtpy.QtWidgets import QApplication, QHBoxLayout, QLabel, QPushButton, QWidget -from debye_bec.devices.absorber import STATUS as ABS_STATUS +# pylint: disable=E0402 +from .....devices.absorber import STATUS as ABS_STATUS logger = bec_logger.logger