Files
OpticsTools/reference.py
2026-01-26 12:51:50 +01:00

96 lines
3.5 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'
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]