Implementing independent plotting window and back tracking

This commit is contained in:
2025-05-01 17:01:22 +02:00
parent ec113a7586
commit 93527fc7e5
7 changed files with 444 additions and 2960 deletions

View File

@@ -14,13 +14,12 @@ from PyQt5.uic import loadUiType
#from PyQt5.QtGui import QPixmap, QTransform
#from PyQt5.QtWidgets import QMessageBox
from ui.OpticsToolsGui import Ui_OpticsGUI
from OpticsPlot import OpticsPlot
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__()
@@ -30,90 +29,20 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI):
self.setWindowIcon(QtGui.QIcon("rsc/iconoptics.png"))
self.setWindowTitle("SwissFEL Optics Tools")
self.plot = OpticsPlotting()
self.plot.initmpl(self.mplvl, self.mplwindow)
self.plot = OpticsPlot()
self.plot.show()
# 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)
self.model = Model(phase=phase,parent=self)
# if phase == 0:
# self.machine = Machine()
# else:
# self.machine = None
def closeEvent(self, event):
self.plot.close()
event.accept()
# --------------------------------
# Main routine