csaxs bpm show all

This commit is contained in:
x12sa
2026-04-09 12:17:31 +02:00
parent 31c71ff406
commit 2835ca52f9
@@ -0,0 +1,132 @@
from __future__ import annotations
import builtins
if builtins.__dict__.get("dev") is not None:
dev = builtins.__dict__.get("dev")
# ============================================================
# Base classes
# ============================================================
class SingleSignalDiag:
"""Diagnostics for a single-signal device with gain control."""
def __init__(self, name, label, gain_dev, signal_dev):
self._name = name
self._label = label
self._gain = gain_dev
self._signal = signal_dev
def show_all(self):
cfg = self._gain.get()
try:
val = self._signal.signal.get()
sval = f"{val:.4f}"
except Exception:
sval = "N/A"
print(self._label)
print("-" * len(self._label))
print(f"gain : {cfg.gain:.0e}")
print(f"coupling : {cfg.coupling}")
print(f"speed : {cfg.speed}")
print(f"readback : {sval}")
print("")
print("hint:")
print(f" gain : csaxs.diagnostics.{self._name}.gain(1e5)")
print(f" raw : dev.{self._signal.name}.signal.get()")
def gain(self, value):
self._gain.set_gain(value)
class BPMDiag:
"""Diagnostics for a BPM device."""
def __init__(self, name, label, gain_dev, rb_dev):
self._name = name
self._label = label
self._gain = gain_dev
self._rb = rb_dev
def show_all(self):
cfg = self._gain.get()
rb = self._rb.get()
print(self._label)
print("-" * len(self._label))
print(f"gain : {cfg.gain:.0e}")
print(f"coupling : {cfg.coupling}")
print(f"speed : {cfg.speed}")
print("readback:")
print(f" pos_x : {rb.pos_x:.3e}")
print(f" pos_y : {rb.pos_y:.3e}")
print(f" intensity : {rb.intensity:.3f}")
print("")
print("hint:")
print(f" gain : csaxs.diagnostics.{self._name}.gain(1e6)")
print(f" raw : dev.{self._rb.name}.pos_x.get()")
def gain(self, value):
self._gain.set_gain(value)
# ============================================================
# Diagnostics root (user-facing object)
# ============================================================
class cSAXSDiagnostics:
"""User-visible diagnostics namespace."""
def __init__(self):
# BPMs
self.bpm_xbox1 = BPMDiag(
name="bpm_xbox1",
label="BPM XBox1 (OP hutch)",
gain_dev=dev.gain_bpm_xbox1,
rb_dev=dev.bpm_xbox1_slowrb,
)
self.bpm_xbox2 = BPMDiag(
name="bpm_xbox2",
label="BPM XBox2 (ES hutch)",
gain_dev=dev.gain_bpm_xbox2,
rb_dev=dev.bpm_xbox2_slowrb,
)
# Single-signal diagnostics
self.bim = SingleSignalDiag(
name="bim",
label="BIM XBox3 (ES)",
gain_dev=dev.gain_bim_xbox3,
signal_dev=dev.bim_xbox3_slowrb,
)
self.beamstop = SingleSignalDiag(
name="beamstop",
label="Beamstop diode (flight tube)",
gain_dev=dev.gain_beamstop_diode,
signal_dev=dev.beamstop_intensity,
)
self.polarization = SingleSignalDiag(
name="polarization",
label="Polarization diodes (XBox1)",
gain_dev=dev.gain_diodes_xbox1,
signal_dev=dev.diode_horizontal_xbox1_slowrb,
)
def show_all(self):
print("CSAXS diagnostics")
print("=================")
print("")
self.bpm_xbox1.show_all()
print("")
self.bpm_xbox2.show_all()
print("")
self.bim.show_all()
print("")
self.beamstop.show_all()
print("")
self.polarization.show_all()