Files
AareDAQ/src/aare/gui/gui.py
T

152 lines
5.8 KiB
Python

import sys
import traceback
from PySide6.QtCore import QCommandLineParser, QCommandLineOption
from PySide6.QtWidgets import QApplication, QMessageBox
from aare.common.logger_config import setup_logger
from aare.gui.main_window import MainWindow
#from aaregui.widgets.login import LoginDialog
from aare.common.beamline import MXBeamline, mx_beamline
from aare.gui.auth import auth
logger = setup_logger("aareGUI")
def main():
try:
app = QApplication(sys.argv)
app.setApplicationName("AareGUI")
app.setApplicationVersion("0.1.0")
app.setOrganizationName("PSI")
app.setOrganizationDomain("psi.ch")
# Create the parser
parser = QCommandLineParser()
parser.setApplicationDescription("PSI AareGUI")
parser.addHelpOption() # Adds --help option
parser.addVersionOption() # Adds --version option
#TODO if zmq and pred stream come from same source, do not need images from both streams, can combine
match mx_beamline():
case MXBeamline.X06DA:
default_url = "http://mx-x06da-queue-01.psi.ch:5210"
default_zmq_addr = "tcp://x06da-pserv-01:9089" #129.129.110.12:9089
default_pred_zmq_addr = "tcp://mx-ml:9091"
default_beamline_cam_addr = "x06da-axis-1.psi.ch"
default_gonio_cam_addr = "axis-accc8ed2972e.psi.ch"
default_gonio_camera_id = 3
case MXBeamline.X10SA:
default_url = "http://mx-x10sa-queue-01.psi.ch:5210" #"http://127.0.0.1:5210"#
default_zmq_addr = "tcp://x10sa-spark-01:9091" # "tcp://x10sa-spark-01:9091" #
default_pred_zmq_addr = "tcp://x10sa-spark-01:9091" #"tcp://sls-gpu-003:9089"#""
default_beamline_cam_addr = "axis-accc8eb02488.psi.ch"
default_gonio_cam_addr = "axis-accc8ea5e463.psi.ch"
default_gonio_camera_id = 1
case MXBeamline.X06SA:
default_url = "http://mx-x06sa-queue-01.psi.ch:5210"
default_zmq_addr = ""
default_pred_zmq_addr = ""
default_beamline_cam_addr = ""
default_gonio_cam_addr = ""
default_gonio_camera_id = 1
case _:
default_url = ""
default_zmq_addr = ""
default_pred_zmq_addr = ""
default_beamline_cam_addr = ""
default_gonio_cam_addr = ""
default_gonio_camera_id = 1
# Add custom options as needed
urlOption = QCommandLineOption(["u", "aaredaq-url"],
"Base AareDAQ URL",
"url", default_url)
parser.addOption(urlOption)
defaultImage = QCommandLineOption(["i", "image"],
"Default image to display in absence of the ZMQ stream",
"image")
parser.addOption(defaultImage)
cameraZeroMQ = QCommandLineOption(["s", "sample-camera-zmq"],
"Sample camera ZeroMQ URL",
"sample-camera-zmq",
default_zmq_addr)
parser.addOption(cameraZeroMQ)
predZmqOption = QCommandLineOption(
["p", "pred-zmq"],
"Prediction ZeroMQ URL (PUB) to subscribe to (e.g. tcp://mx-ml:9091)",
"pred-zmq",
default_pred_zmq_addr
)
parser.addOption(predZmqOption)
parser.process(app)
base_url = parser.value(urlOption)
if base_url == "" or base_url.lower() == "none":
base_url = None
zmq_addr = parser.value(cameraZeroMQ)
if zmq_addr == "":
zmq_addr = None
pred_zmq_addr = parser.value(predZmqOption)
if pred_zmq_addr == "":
pred_zmq_addr = None
if parser.isSet(defaultImage):
default_image = parser.value(defaultImage)
else:
default_image = None
try:
token = auth(base_url)
if not token or token.count(".") != 2:
raise RuntimeError(
"Authentication did not return a valid token. "
"Please check the server is running (it may still be initialising)."
)
logger.info("Authentication successful")
except Exception as e:
logger.error(f"Cannot connect to AareDAQ server. Exiting. {e}")
logger.error(traceback.format_exc())
QMessageBox.critical(
None,
"Authentication Error",
f"Cannot connect to AareDAQ server:\n{str(e)}\n\n Please check the server is running and your network connection."
)
sys.exit(1)
win = MainWindow(base_url=base_url,
token=token,
default_image=default_image,
zmq_addr=zmq_addr,
pred_zmq_addr=pred_zmq_addr,
beamline_cam_addr = default_beamline_cam_addr,
gonio_cam_addr = default_gonio_cam_addr,
gonio_cam_id = default_gonio_camera_id)
win.show()
sys.exit(app.exec())
except Exception as e:
logger.error(f"Error starting GUI: {e}")
logger.error(f"Traceback: {traceback.format_exc()}")
try:
QMessageBox.critical(
None,
"Fatal Error",
f"An error occurred during startup. See console for details."
f"\nPlease check the server is running and your network connection."
f"\n\n{str(e)}\n\n"
)
except:
pass
sys.exit(1)
if __name__ == "__main__":
main()