Add new edge selector to digital twin
This commit is contained in:
@@ -35,6 +35,7 @@ from qtpy.QtWidgets import (
|
||||
QWidget,
|
||||
)
|
||||
|
||||
from ..edge_selector import EdgeSelector
|
||||
from .beamline import get_beamline_id
|
||||
from .calculations.calc_positions import calc_positions
|
||||
from .calculations.calc_sideview import calc_sideview
|
||||
@@ -66,6 +67,11 @@ logger = bec_logger.logger
|
||||
OFFSET_FILE_X01DA = Path(__file__).with_name("x01da_offsets.yaml")
|
||||
OFFSET_FILE_X10DA = Path(__file__).with_name("x10da_offsets.yaml")
|
||||
|
||||
X01DA_E_MIN = 4500
|
||||
X01DA_E_MAX = 60000
|
||||
X10DA_E_MIN = 4500
|
||||
X10DA_E_MAX = 35000
|
||||
|
||||
|
||||
class DigitalTwin(BECWidget, QWidget):
|
||||
"""
|
||||
@@ -140,6 +146,7 @@ class DigitalTwin(BECWidget, QWidget):
|
||||
self.setWindowTitle("Digital Twin")
|
||||
self.resize(1450, 950)
|
||||
|
||||
self.input.edge_selector.clicked_connect(self.open_edge_selector)
|
||||
self.input.energy.value_changed_connect(self.calc_assistant)
|
||||
self.input.sldi_hacc.value_changed_connect(self.calc_assistant)
|
||||
self.input.sldi_vacc.value_changed_connect(self.calc_assistant)
|
||||
@@ -162,6 +169,7 @@ class DigitalTwin(BECWidget, QWidget):
|
||||
self.settings.load_offsets.clicked_connect(self.load_offsets)
|
||||
self.settings.show_offsets.clicked_connect(self.show_offsets)
|
||||
|
||||
self.edge_selector_energy = 0.0
|
||||
self.bragg_angle = 0.0
|
||||
self.qy = 0.0
|
||||
self.offsets = {}
|
||||
@@ -326,6 +334,7 @@ class DigitalTwin(BECWidget, QWidget):
|
||||
self.calc_fm_ideal_pitch()
|
||||
self.calc_mo1_energy_resolution()
|
||||
case "energy":
|
||||
self.update_edge_selected()
|
||||
self.calc_mo1_bragg_angle()
|
||||
self.calc_cm_crit_pitch()
|
||||
self.calc_cm_reflectivity()
|
||||
@@ -789,6 +798,24 @@ class DigitalTwin(BECWidget, QWidget):
|
||||
surfaces = calc_surfaces(config)
|
||||
self.surface_plots.update_surfaces(scene="reality", data=surfaces)
|
||||
|
||||
@SafeSlot()
|
||||
def open_edge_selector(self, *_):
|
||||
match self.beamline:
|
||||
case "x01da":
|
||||
dlg = EdgeSelector(self, llim=X01DA_E_MIN, hlim=X01DA_E_MAX)
|
||||
case "x10da":
|
||||
dlg = EdgeSelector(self, llim=X10DA_E_MIN, hlim=X10DA_E_MAX)
|
||||
case _:
|
||||
dlg = EdgeSelector(self)
|
||||
if dlg.exec_():
|
||||
self.input.edge_selected.setText(f"{dlg.selected_element}, {dlg.selected_edge}-edge")
|
||||
self.edge_selector_energy = dlg.selected_energy
|
||||
self.input.energy.set_number(dlg.selected_energy)
|
||||
|
||||
def update_edge_selected(self):
|
||||
if self.input.energy.value() != self.edge_selector_energy:
|
||||
self.input.edge_selected.setText("-")
|
||||
|
||||
def calc_mo1_energy_resolution(self):
|
||||
"""
|
||||
Calculates the energy resolution of the monochromator
|
||||
|
||||
@@ -5,10 +5,17 @@ Panel for user inputs of the digital twin widget
|
||||
from typing import Union
|
||||
|
||||
# pylint: disable=E0611
|
||||
from qtpy.QtWidgets import QVBoxLayout, QWidget
|
||||
from qtpy.QtWidgets import QHBoxLayout, QLabel, QPushButton, QVBoxLayout, QWidget
|
||||
|
||||
from ..types import BeamlineId
|
||||
from ..widgets.qt_widgets import Button, ComboBox, Group, InputNumberField, NumberIndicator
|
||||
from ..widgets.qt_widgets import (
|
||||
Button,
|
||||
ComboBox,
|
||||
Group,
|
||||
InputNumberField,
|
||||
NumberIndicator,
|
||||
TextIndicator,
|
||||
)
|
||||
|
||||
|
||||
class InputPanel(QWidget):
|
||||
@@ -28,11 +35,28 @@ class InputPanel(QWidget):
|
||||
# Adapt to reality
|
||||
self.adapt_reality = Button(label_button="Adapt to reality", enabled=True)
|
||||
|
||||
# Energy
|
||||
# edge_selector_layout = QVBoxLayout()
|
||||
# edge_selector_label = QLabel("Absorption edge:")
|
||||
# self.edge_selector_button = QPushButton("Choose")
|
||||
# self.edge_label = QLabel("No edge selected")
|
||||
# edge_selector_layout.addWidget(edge_selector_label)
|
||||
# edge_selector_layout.addWidget(self.edge_label)
|
||||
# edge_selector_layout.addWidget(self.edge_selector_button)
|
||||
# edge_selector_layout.addStretch()
|
||||
|
||||
# Edge selector
|
||||
self.edge_selector = Button("Absorption edge", "Choose", enabled=True)
|
||||
|
||||
# Chosen absorption edge
|
||||
self.edge_selected = TextIndicator("Chosen edge")
|
||||
|
||||
# Direct Energy Input
|
||||
self.energy = InputNumberField(
|
||||
"energy", "Energy", unit="eV", init=8979, decimals=0, single_step=100, ll=4000, hl=65000
|
||||
)
|
||||
|
||||
self.energy_group = Group("Energy", [self.edge_selector, self.edge_selected, self.energy])
|
||||
|
||||
# FE Slits Acceptance
|
||||
self.sldi_hacc = InputNumberField(
|
||||
"h_acc",
|
||||
@@ -156,7 +180,7 @@ class InputPanel(QWidget):
|
||||
"User Input",
|
||||
[
|
||||
self.adapt_reality,
|
||||
self.energy,
|
||||
self.energy_group,
|
||||
self.sldi_ass_group,
|
||||
self.cm_ass_group,
|
||||
self.mo1_ass_group,
|
||||
|
||||
Reference in New Issue
Block a user