132 lines
4.0 KiB
Python
132 lines
4.0 KiB
Python
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_())
|