change from absolute to relative imports
CI for debye_bec / test (push) Successful in 58s
CI for debye_bec / test (pull_request) Successful in 59s

This commit is contained in:
x01da
2026-06-23 14:08:32 +02:00
parent b75f027a77
commit ec88b4d3f4
14 changed files with 86 additions and 76 deletions
@@ -0,0 +1,3 @@
from .beamline import get_parameters
parameters = get_parameters()
@@ -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
@@ -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
@@ -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:
@@ -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
@@ -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
@@ -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):
"""
@@ -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 = """
<ui language='c++'>
@@ -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
@@ -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):
@@ -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):
@@ -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
@@ -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):
@@ -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())
@@ -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