import sys #import re #import numpy as np #import copy #import os #import json from datetime import datetime import time #from shutil import copyfile #from os.path import isfile, join from PyQt5 import QtWidgets,QtGui from PyQt5.uic import loadUiType #from PyQt5.QtGui import QPixmap, QTransform #from PyQt5.QtWidgets import QMessageBox from ui.OpticsToolsGui import Ui_OpticsGUI from OpticsModel import Model from OpticsMachine import Machine from OpticsPlotting import OpticsPlotting class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI): def __init__(self,phase=0): super(OpticsTools, self).__init__() self.setupUi(self) self.version = '1.0.1' self.setWindowIcon(QtGui.QIcon("rsc/iconoptics.png")) self.setWindowTitle("SwissFEL Optics Tools") self.plot = OpticsPlotting() self.plot.initmpl(self.mplvl, self.mplwindow) # initialize online model self.model = Model(phase) if phase == 0: self.machine = Machine() else: self.machine = None # widget signals self.UITrack.clicked.connect(self.track) # all action for optics plotting self.PBetax.toggled.connect(self.doplot) self.PAlphax.toggled.connect(self.doplot) self.PBetay.toggled.connect(self.doplot) self.PAlphay.toggled.connect(self.doplot) self.PEtax.toggled.connect(self.doplot) self.PEtay.toggled.connect(self.doplot) self.PR56.toggled.connect(self.doplot) # self.PEnergy.toggled.connect(self.doplot) self.PStart.editingFinished.connect(self.doplot) self.PEnd.editingFinished.connect(self.doplot) def track(self): start = str(self.UITrackStart.text()) end = str(self.UITrackEnd.text()) twiss = {} twiss['betax'] = float(str(self.UIBetax.text())) twiss['betay'] = float(str(self.UIBetay.text())) twiss['alphax'] = float(str(self.UIAlphax.text())) twiss['alphay'] = float(str(self.UIAlphay.text())) self.model.track(start,end,twiss) self.updateOpticsTable() def updateOpticsTable(self): self.UITwissValues.clear() if self.model.twiss is None: return res = self.model.twiss if 'NAME' in res.keys(): nrow = len(res['NAME']) if nrow == 0: return else: return ncol = len(res.keys()) self.UITwissValues.setColumnCount(ncol + 1) self.UITwissValues.setRowCount(nrow) for j,key in enumerate(res.keys()): col = res[key] self.UITwissValues.setHorizontalHeaderItem(j, QtWidgets.QTableWidgetItem(key)) for i,val in enumerate(col): if j == 0: self.UITwissValues.setItem(i, j, QtWidgets.QTableWidgetItem(val)) else: self.UITwissValues.setItem(i, j, QtWidgets.QTableWidgetItem('%10.6f' % val)) self.UITwissValues.resizeColumnsToContents() self.UITwissValues.verticalHeader().hide() self.UITwissValues.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) def doplot(self): if self.model.twiss is None: return zstart=float(str(self.PStart.text())) zend=float(str(self.PEnd.text())) filt={} filt['BETX']=self.PBetax.isChecked() filt['BETY']=self.PBetay.isChecked() filt['ALFX']=self.PAlphax.isChecked() filt['ALFY']=self.PAlphay.isChecked() filt['DX']=self.PEtax.isChecked() filt['DY']=self.PEtay.isChecked() filt['RE56']=self.PR56.isChecked() filt['Energy']=self.PEnergy.isChecked() self.plot.plot(self.model.twiss,filt,zstart,zend) # -------------------------------- # Main routine if __name__ == '__main__': QtWidgets.QApplication.setStyle(QtWidgets.QStyleFactory.create("plastique")) app = QtWidgets.QApplication(sys.argv) if len(sys.argv) > 1: arg=int(sys.argv[1]) else: arg=0 main = OpticsTools() main.show() sys.exit(app.exec_())