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_())