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]