97 lines
3.6 KiB
Python
97 lines
3.6 KiB
Python
from PyQt5 import QtGui
|
|
|
|
CBeige = QtGui.QColor(250, 240, 200)
|
|
CGreen = QtGui.QColor(100, 255, 100)
|
|
CYellow = QtGui.QColor(255, 255, 0)
|
|
CRed = QtGui.QColor(255, 100, 100)
|
|
|
|
|
|
class ReferenceManager:
|
|
def __init__(self, parent):
|
|
self.parent = parent
|
|
self.reference={} # list of location with twiss parameters
|
|
self.locationDict={}
|
|
|
|
self.twisswidget={'betx':self.parent.UIBetax,'bety':self.parent.UIBetay,
|
|
'alfx':self.parent.UIAlphax,'alfy':self.parent.UIAlphay,
|
|
'etax':self.parent.UIEtax,'etay':self.parent.UIEtay,
|
|
'etapx':self.parent.UIEtapx,'etapy':self.parent.UIEtapy,
|
|
'x':self.parent.UIX,'y':self.parent.UIY,
|
|
'px':self.parent.UIPX,'py':self.parent.UIPY}
|
|
|
|
self.parent.UITrackReference.currentIndexChanged.connect(self.updateReferenceWidgets)
|
|
|
|
####################################33
|
|
# handling the reference point system
|
|
|
|
def initReferencePoints(self,matchmaker):
|
|
self.reference.clear()
|
|
self.locationDict.clear()
|
|
for i, key in enumerate(matchmaker.referencePoints.keys()):
|
|
if i is 0:
|
|
tag = 'Start'
|
|
self.parent.model.startTwiss=matchmaker.referencePoints[key]['Twiss'] # save initial referenc point for save settings
|
|
else:
|
|
label = matchmaker.referencePoints[key]['Label']
|
|
if label is None:
|
|
tag = 'Matchpoint %d' % i
|
|
else:
|
|
tag = label
|
|
self.reference[tag]= {'Location':key,'Twiss':matchmaker.referencePoints[key]['Twiss']}
|
|
self.updateReferenceComboBox()
|
|
|
|
def swithToUserDefinedLocation(self):
|
|
n = self.parent.UITrackReference.count()
|
|
self.parent.UITrackReference.setCurrentIndex(n - 1)
|
|
|
|
def updateReferenceWidgets(self):
|
|
key = str(self.parent.UITrackReference.currentText())
|
|
if key == 'User Defined':
|
|
return
|
|
if key == '': # some quick solution in the case that the referenc epoints are regenerated, generating a signal for empty table
|
|
return
|
|
twiss = self.reference[key]['Twiss']
|
|
name_orig = self.reference[key]['Location']
|
|
name = name_orig.upper().replace('.','-')
|
|
if '$' in name:
|
|
name=name.replace('$',' (')+')'
|
|
self.locationDict[name]=name_orig
|
|
self.parent.UITrackLocation.setText(name)
|
|
for key in self.twisswidget.keys():
|
|
if key in twiss.keys():
|
|
value = twiss[key]
|
|
else:
|
|
value = 0
|
|
if 'beta' in key:
|
|
value = 30
|
|
self.twisswidget[key].setText('%7.3f' % value)
|
|
|
|
def updateReferenceComboBox(self):
|
|
self.parent.UITrackReference.clear()
|
|
for ref in self.reference.keys():
|
|
self.parent.UITrackReference.addItem(ref)
|
|
self.parent.UITrackReference.addItem('User Defined')
|
|
|
|
###########################################
|
|
|
|
#--------------------------------
|
|
# obtaining reference data
|
|
def getReference(self):
|
|
return self.getReferenceLocation(),self.getReferenceTwiss()
|
|
|
|
def getReferenceByTag(self,tag):
|
|
if not tag in self.reference.keys():
|
|
return None
|
|
return self.reference[tag]
|
|
|
|
|
|
def getReferenceTwiss(self):
|
|
self.updateReferenceWidgets() # enforce that the data is consistent
|
|
twiss = {key:float(str(self.twisswidget[key].text())) for key in self.twisswidget.keys()}
|
|
return twiss
|
|
|
|
def getReferenceLocation(self):
|
|
tag = str(self.parent.UITrackLocation.text())
|
|
return self.locationDict[tag]
|
|
|