Files
2026-01-26 11:35:00 +01:00

138 lines
4.8 KiB
Python

import sys
#import json
#import webbrowser
#import subprocess
from argparse import ArgumentParser
from PyQt5 import QtWidgets,QtGui
from ui.ElegantToolsGui import Ui_ElegantGUI
from distribution import Distribution
from plot import ElegantPlot
from model import Model
from track import Track
class ElegantTools(QtWidgets.QMainWindow, Ui_ElegantGUI):
def __init__(self,phase=0):
super(ElegantTools, self).__init__()
self.setupUi(self)
# office = office== 1
self.version = '1.0.1'
self.setWindowIcon(QtGui.QIcon("rsc/Audrey_Icon.png"))
self.plot = ElegantPlot(parent=self)
self.plot.show()
self.model = Model(phase=phase,parent=self)
self.track = Track(parent=self)
self.dists={}
self.distMapping={}
self.preferredDist = None
self.UIDistLoad.clicked.connect(self.loadDist)
self.UIDistMatch.clicked.connect(self.matchDist)
self.UIDistSave.clicked.connect(self.saveDist)
self.UIDistBlurr.clicked.connect(self.addBlurr)
self.UIDistCenter.clicked.connect(self.centerDist)
self.UIDistCut.clicked.connect(self.cutDist)
self.UIDistInput.clicked.connect(self.setPreferredDist)
self.UILoadReference.clicked.connect(self.loadLattice)
self.UISaveReference.clicked.connect(self.saveLattice)
def setPreferredDist(self):
self.preferredDist = self.getDist()
self.UITrackInput.setText(self.UIDistList.currentText())
def getDist(self):
if self.UIDistList.count() == 0:
return None
tag = self.UIDistList.currentText()
return self.dists[self.distMapping[tag]]
def matchDist(self):
dist = self.getDist()
dist.matchDist()
def addBlurr(self):
dist = self.getDist()
dist.addBlurr()
def centerDist(self):
dist = self.getDist()
dist.centerDist()
def cutDist(self):
dist = self.getDist()
dist.cutDist()
def loadDist(self):
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.DontUseNativeDialog
fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open Elegant Distribution",
"ReferenceDistribution/Gauss_200pC_20A.out",
"Elegant Files(*.*)", options=options)
if not fileName:
return
name = fileName.split('/')[-1]
self.UIDistList.addItem(name)
self.distMapping[name] = fileName
self.dists[fileName]=Distribution(parent=self,filename=fileName)
def saveDist(self):
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.DontUseNativeDialog
fileName, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Save Elegant Distribution",
"ReferenceDistribution/dist.sdds",
"Elegant Files (*.*)", options=options)
if not fileName:
return
dist=self.getDist()
dist.saveDist(fileName)
def loadLattice(self):
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.DontUseNativeDialog
fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open Lattice Settings",
"LatticeSettings/default.json",
"Json Files(*.json)", options=options)
if not fileName:
return
self.model.loadLatticeSettings(fileName)
def saveLattice(self):
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.DontUseNativeDialog
fileName, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Save Lattice Settings",
"LatticeSettings/default.json",
"Json Files(*.json)", options=options)
if not fileName:
return
self.model.saveLatticeSettings(fileName)
def closeEvent(self, event):
self.plot.close()
event.accept()
def about(self):
QtWidgets.QMessageBox.about(self, "Elegant Tools",
"Version:%s\nContact: Sven Reiche\nEmail: sven.reiche@psi.ch" % self.version)
if __name__ == '__main__':
QtWidgets.QApplication.setStyle(QtWidgets.QStyleFactory.create("plastique"))
parser = ArgumentParser()
parser.add_argument('-phase', type=int, help='Phase of the online model (0:current, 1:planned, 2:future)', default=0)
args = parser.parse_args()
app = QtWidgets.QApplication(sys.argv)
main = ElegantTools(phase = args.phase)
if main:
main.show()
sys.exit(app.exec_())