Initial test of matching
This commit is contained in:
234
reference.py
234
reference.py
@@ -1,7 +1,23 @@
|
||||
import json
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
from fontTools.misc.cython import returns
|
||||
|
||||
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.settings={}
|
||||
self.reference={}
|
||||
self.label=None
|
||||
|
||||
self.twisswidget={'betax':self.parent.UIBetax,'betay':self.parent.UIBetay,
|
||||
'alphax':self.parent.UIAlphax,'alphay':self.parent.UIAlphay,
|
||||
'etax':self.parent.UIEtax,'etay':self.parent.UIEtay,
|
||||
@@ -10,25 +26,176 @@ class ReferenceManager:
|
||||
'px':self.parent.UIPX,'py':self.parent.UIPY}
|
||||
|
||||
|
||||
self.defineReferencePoints()
|
||||
self.loadReference('Settings/Reference.json')
|
||||
self.parent.UITrackReference.currentIndexChanged.connect(self.updateReferenceWidgets)
|
||||
#self.parent.UIMatchOrder.itemClicked.connect(self.updateMatchingPoint)
|
||||
|
||||
|
||||
|
||||
def loadReference(self, filename):
|
||||
with open(filename) as f:
|
||||
self.settings = json.load(f)
|
||||
self.order={ele['MatchID']:i for i,ele in enumerate(self.settings['Order'])}
|
||||
self.reference=self.settings['Reference']
|
||||
self.label=self.settings['Label']
|
||||
self.parameter=self.settings['Parameter']
|
||||
self.parent.UIMatchSequenceLabel.setText(self.label)
|
||||
self.updateReferenceComboBox()
|
||||
self.updateReferenceWidgets()
|
||||
self.parent.UITrackReference.currentIndexChanged.connect(self.updateReferenceWidgets)
|
||||
self.updateMatchOrder()
|
||||
|
||||
|
||||
|
||||
|
||||
def getMatchingPoint(self):
|
||||
idx = self.parent.UIMatchOrder.currentRow()
|
||||
if idx < 0:
|
||||
return None
|
||||
|
||||
ID = str(self.parent.UIMatchOrder.item(idx).text())
|
||||
print('Matching Step Label:', ID)
|
||||
idx = self.order[ID] # get index in the list
|
||||
order = self.settings['Order'][idx] # getting the specific entry from the order list
|
||||
if not order['Reference'] is None: # has a fixed referenc epoint instead of periodic solution
|
||||
twiss0 = self.getReferenceByTag(order['Reference']) # get the starting parameters by its reference
|
||||
order['Reference'] = twiss0 # put it back into the order variable
|
||||
order['Variable'] = self.parameter[ID]['Variable']
|
||||
nvar = len(order['Variable'].keys())
|
||||
target0= self.parameter[ID]['Target']
|
||||
target = {}
|
||||
ncon = 0
|
||||
for tar in target0:
|
||||
if 'Reference' in tar.keys():
|
||||
par=self.getReferenceByTag(tar['Reference'])
|
||||
loc = par['Location']
|
||||
con = {key:{'Val':par['Twiss'][key],'Condition':0} for key in par['Twiss'].keys()}
|
||||
target[loc]=con
|
||||
ncon += len(con.keys())
|
||||
elif 'Fixed' in tar.keys():
|
||||
loc=tar['Fixed']['Location']
|
||||
con = {key: {'Val': tar['Fixed']['Twiss'][key], 'Condition': 0} for key in tar['Fixed']['Twiss'].keys()}
|
||||
target[loc]=con
|
||||
ncon += len(con.keys())
|
||||
if nvar>ncon:
|
||||
dummycon={}
|
||||
for key in order['Reference']['Twiss'].keys():
|
||||
if ncon < nvar:
|
||||
dummycon[key]={'Val':order['Reference']['Twiss'][key],'Condition':0}
|
||||
ncon+=1
|
||||
target['#s']=dummycon
|
||||
order['Target'] = target
|
||||
return order
|
||||
|
||||
|
||||
#### all event selecting some tracking points
|
||||
|
||||
#--------------------------------
|
||||
# match info
|
||||
def updateMatchOrder(self):
|
||||
self.parent.UIMatchOrder.clear()
|
||||
for i,ele in enumerate(self.settings['Order']):
|
||||
self.parent.UIMatchOrder.addItem(ele['MatchID'])
|
||||
self.parent.UIMatchOrder.item(i).setBackground(CBeige)
|
||||
|
||||
def updateMatchingPoint(self):
|
||||
idx = self.parent.UIMatchOrder.currentRow()
|
||||
if idx < 0:
|
||||
return
|
||||
ID = str(self.parent.UIMatchOrder.item(idx).text())
|
||||
idx = self.order[ID]
|
||||
order=self.settings['Order'][idx]
|
||||
reference = order['Reference']
|
||||
type = order['Type']
|
||||
loc = self.reference[reference]['Location']
|
||||
self.parent.UIMatchLabel.setText(ID)
|
||||
self.parent.UIMatchType.setText(type)
|
||||
self.parent.UIMatchStart.setText(loc)
|
||||
if type == 'Periodic':
|
||||
var,tar=self.updateMatchPointPeriodic(ID)
|
||||
elif type == 'Fixed':
|
||||
var,tar=self.updateMatchPointFixed(ID)
|
||||
else:
|
||||
return
|
||||
if var is None:
|
||||
var =[]
|
||||
tar = []
|
||||
self.updateKnobs(var)
|
||||
self.updateTargets(tar)
|
||||
|
||||
def updateMatchPointFixed(self, ID):
|
||||
if not ID in self.reference.keys():
|
||||
return
|
||||
var = self.settings['Fixed'][ID]['Variable']
|
||||
reflab = self.settings['Fixed'][ID]['Reference']
|
||||
if not reflab in self.reference.keys():
|
||||
return None, None
|
||||
ref=self.reference[reflab]
|
||||
tar=[]
|
||||
for ele in ref['Twiss'].keys():
|
||||
ele0 = ele.replace('beta','bet').replace('alpha','alf').upper()
|
||||
tar.append({'Parameter':ele0,'Condition':'=','Value':ref['Twiss'][ele],'Location':ref['Location']})
|
||||
return var,tar
|
||||
|
||||
|
||||
|
||||
def updateMatchPointPeriodic(self,ID):
|
||||
if not ID in self.settings['Periodic'].keys():
|
||||
return None, None
|
||||
var = self.settings['Periodic'][ID]['Variable']
|
||||
tar = self.settings['Periodic'][ID]['Target']
|
||||
return var,tar
|
||||
|
||||
def updateKnobs(self,var):
|
||||
self.parent.UIMatchKnobs.clear()
|
||||
for ele in var:
|
||||
self.parent.UIMatchKnobs.addItem(ele)
|
||||
|
||||
def updateTargets(self,tar):
|
||||
self.parent.UIMatchTargets.clear()
|
||||
self.parent.UIMatchTargets.setColumnCount(4)
|
||||
self.parent.UIMatchTargets.setRowCount(len(tar))
|
||||
for irow,ele in enumerate(tar):
|
||||
self.parent.UIMatchTargets.setItem(irow, 0, QtWidgets.QTableWidgetItem(ele['Parameter']))
|
||||
self.parent.UIMatchTargets.setItem(irow, 1, QtWidgets.QTableWidgetItem(ele['Condition']))
|
||||
self.parent.UIMatchTargets.setItem(irow, 2, QtWidgets.QTableWidgetItem('%7.3f' % ele['Value']))
|
||||
self.parent.UIMatchTargets.setItem(irow, 3, QtWidgets.QTableWidgetItem(ele['Location']))
|
||||
self.parent.UIMatchTargets.resizeColumnsToContents()
|
||||
self.parent.UIMatchTargets.verticalHeader().hide()
|
||||
self.parent.UIMatchTargets.horizontalHeader().hide()
|
||||
|
||||
#--------------------------------
|
||||
# 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):
|
||||
return str(self.parent.UITrackLocation.text())
|
||||
|
||||
|
||||
##### interaction of the tracking reference point
|
||||
|
||||
def swithToUserDefinedLocation(self):
|
||||
n = self.parent.UITrackReference.count()
|
||||
self.parent.UITrackReference.setCurrentIndex(n-1)
|
||||
|
||||
def updateReferenceLocation(self,location):
|
||||
self.parent.UITrackLocation.setText(location)
|
||||
def updateReferenceWidgets(self):
|
||||
key = str(self.parent.UITrackReference.currentText())
|
||||
if key == 'User Defined':
|
||||
return
|
||||
|
||||
def updateReferencePoint(self,twiss):
|
||||
twiss = self.reference[key]['Twiss']
|
||||
name = self.reference[key]['Location']
|
||||
self.parent.UITrackLocation.setText(name)
|
||||
for key in self.twisswidget.keys():
|
||||
if key in twiss.keys():
|
||||
value = twiss[key]
|
||||
@@ -38,62 +205,9 @@ class ReferenceManager:
|
||||
value = 30
|
||||
self.twisswidget[key].setText('%7.3f' % value)
|
||||
|
||||
def getReferencePoint(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):
|
||||
return str(self.parent.UITrackLocation.text())
|
||||
|
||||
|
||||
def updateReferenceWidgets(self):
|
||||
key = str(self.parent.UITrackReference.currentText())
|
||||
if key == 'User Defined':
|
||||
return
|
||||
elif key == 'Start':
|
||||
twiss = {key[0:-1]:self.parent.model.startTwiss[key] for key in self.parent.model.startTwiss.keys()} # strip of the zero
|
||||
name = 'Start'
|
||||
else:
|
||||
twiss = self.reference['Reference'][key]['twiss']
|
||||
name = self.reference['Reference'][key]['location']
|
||||
self.updateReferenceLocation(name)
|
||||
self.updateReferencePoint(twiss)
|
||||
|
||||
def updateReferenceComboBox(self):
|
||||
self.parent.UITrackReference.clear()
|
||||
self.parent.UITrackReference.addItem('Start')
|
||||
for ref in self.reference['Reference'].keys():
|
||||
for ref in self.reference.keys():
|
||||
self.parent.UITrackReference.addItem(ref)
|
||||
self.parent.UITrackReference.addItem('User Defined')
|
||||
|
||||
def defineReferencePoints(self):
|
||||
self.reference={'Reference':{}}
|
||||
self.reference['Reference']['Laser Heater']=self.defineRef('sinlh02.mqua410$start',
|
||||
{'betax':11.2,'alphax':3.2,
|
||||
'betay':0.8,'alphay':0.75})
|
||||
self.reference['Reference']['Bunch Compressor1']=self.defineRef('sindi02.mqua020$start',
|
||||
{'betax': 11.1557,'alphax': -1.17,
|
||||
'betay': 50, 'alphay': 0.})
|
||||
self.reference['Reference']['Bunch Compressor 2']=self.defineRef('s10ma01.mqua020$start',
|
||||
{'betax': 6.14, 'alphax': -0.83,
|
||||
'betay': 22.86,'alphay': -1.18})
|
||||
self.reference['Reference']['Switchyard']=self.defineRef('s20sy02.mqua070$start',
|
||||
{'betax': 12.99, 'alphax': 3.7011,
|
||||
'betay': 46.339,'alphay': -6.501})
|
||||
self.reference['Reference']['Linac3']=self.defineRef('s30cb10.mqua430$start',
|
||||
{'betax': 8.83, 'alphax': 0.548,
|
||||
'betay': 30.44, 'alphay': -1.866})
|
||||
self.reference['Reference']['Aramis Stopper']=self.defineRef('sarma01.mqua010$start',
|
||||
{'betax': 2.304, 'alphax': -1.4045,
|
||||
'betay': 25.929, 'alphay': -6.363})
|
||||
self.reference['Reference']['Athos HERO']=self.defineRef('satdi01.mqua250$start',
|
||||
{'betax': 35.76, 'alphax': -1.166,
|
||||
'betay': 24.087, 'alphay': 0.648})
|
||||
self.reference['Reference']['Athos Deflector']=self.defineRef('satbd01.mqua010$start',
|
||||
{'betax': 50, 'alphax': 0,
|
||||
'betay': 50, 'alphay': 0})
|
||||
|
||||
def defineRef(self,location,twiss):
|
||||
ref={'location':location,'twiss':twiss}
|
||||
return ref
|
||||
Reference in New Issue
Block a user