Initial test of matching
This commit is contained in:
190
reference.py
190
reference.py
@@ -49,7 +49,7 @@ class ReferenceManager:
|
||||
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.reference=self.settings['Reference'] # this are fixed points in the lattice
|
||||
self.label=self.settings['Label']
|
||||
self.parameter=self.settings['Parameter']
|
||||
self.dependence=self.settings['Dependence']
|
||||
@@ -66,63 +66,69 @@ class ReferenceManager:
|
||||
def getMatchingPoint(self):
|
||||
idx = self.parent.UIMatchOrder.currentRow()
|
||||
if idx < 0:
|
||||
return None,None,False
|
||||
return None
|
||||
|
||||
status = True
|
||||
ID = str(self.parent.UIMatchOrder.item(idx).text())
|
||||
idx = self.order[ID] # get index in the list
|
||||
order = copy.deepcopy(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 'Script' in tar.keys():
|
||||
loc = tar['Script']['Location']
|
||||
file = tar['Script']['Script']
|
||||
target[loc] = {'File':file} # all condition are in the script
|
||||
ncon += 100
|
||||
elif 'Fixed' in tar.keys():
|
||||
loc=tar['Fixed']['Location']
|
||||
if 'Limit' in tar['Fixed'].keys():
|
||||
condi = tar['Fixed']['Limit']
|
||||
order = copy.deepcopy(self.settings['Order'][idx])
|
||||
destination = order['Destination']
|
||||
save = order['Save']
|
||||
|
||||
sequence = order['Sequence']
|
||||
if not sequence is None:
|
||||
if isinstance(sequence,str):
|
||||
start = sequence+'$start'
|
||||
end = sequence+'$end'
|
||||
elif isinstance(sequence,list):
|
||||
start = sequence[0]+'$start'
|
||||
end = sequence[-1]+'$end'
|
||||
twiss0 = {'Location': start, 'twiss': {}}
|
||||
else:
|
||||
end = order['End']
|
||||
if end is None:
|
||||
end = '#e'
|
||||
start = order['Reference']
|
||||
if start is None:
|
||||
twiss0 = {'Location':'#s','twiss':{}}
|
||||
else:
|
||||
twiss0 = self.getReferenceByTag(order['Reference'])
|
||||
if twiss0['Location'].upper() == 'START':
|
||||
twiss0['Location']= '#s'
|
||||
sequence='swissfel'
|
||||
|
||||
varlist = self.parameter[ID]['Variable']
|
||||
variable = self.parent.model.getVariableInfo(varlist)
|
||||
|
||||
cond = {}
|
||||
targets = self.parameter[ID]['Target']
|
||||
for target in targets:
|
||||
if 'Location' in target.keys():
|
||||
loc = target['Location']
|
||||
if not loc in cond.keys():
|
||||
cond[loc]=[]
|
||||
if 'Limit' in target.keys():
|
||||
limit = target['Limit']
|
||||
else:
|
||||
condi = 0
|
||||
con = {key: {'Val': tar['Fixed']['Twiss'][key], 'Condition': condi} for key in tar['Fixed']['Twiss'].keys()}
|
||||
target[loc]=con
|
||||
ncon += len(con.keys())
|
||||
elif 'Save' in tar.keys():
|
||||
loc=tar['Save']['Location']
|
||||
IDsave = tar['Save']['SaveID']
|
||||
if not IDsave in self.save.keys():
|
||||
print('Needs first the matching point of',IDsave)
|
||||
status = False
|
||||
con = {}
|
||||
ncon+=100 # make sure that this will abort any matching and not filled by dummy constraints
|
||||
else:
|
||||
con = {key:{'Val': self.save[IDsave][key],'Condition':0} for key in self.save[IDsave].keys()}
|
||||
ncon += len(con.keys())
|
||||
target[loc]=con
|
||||
print('Saved Target',loc,target[loc])
|
||||
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, ID, status
|
||||
limit = 0
|
||||
if 'Twiss' in target.keys():
|
||||
for key0 in target['Twiss'].keys():
|
||||
cond[loc].append((key0,limit,target['Twiss'][key0]))
|
||||
elif 'SavedID':
|
||||
if target['SavedID'] in self.save.keys():
|
||||
twisssaved = self.save[target['SavedID']]
|
||||
for twkey in twisssaved.keys():
|
||||
cond[loc].append((twkey,0,twisssaved[twkey]))
|
||||
else:
|
||||
cond[loc].append(target['SavedID'])
|
||||
elif 'Script' in target.keys():
|
||||
cond['Script']=target['Script']
|
||||
|
||||
config={'ID':ID,'start':twiss0,'end':end,
|
||||
'destination':destination,'sequence':sequence,
|
||||
'variable':variable,'target':cond,'save':save}
|
||||
return config
|
||||
|
||||
|
||||
|
||||
def updateMatchPoint(self,ID,val):
|
||||
idx = self.order[ID]
|
||||
@@ -150,42 +156,56 @@ class ReferenceManager:
|
||||
# match info
|
||||
|
||||
def displayMatchingPoint(self):
|
||||
order,ID,status = self.getMatchingPoint()
|
||||
if status is None:
|
||||
return
|
||||
self.parent.UIMatchLabel.setText(ID)
|
||||
if order['Reference'] is None:
|
||||
self.parent.UIMatchStart.setText('Start')
|
||||
else:
|
||||
self.parent.UIMatchStart.setText(order['Reference']['Location'])
|
||||
self.parent.UIMatchKnobs.clear()
|
||||
for ele in order['Variable'].keys():
|
||||
self.parent.UIMatchKnobs.addItem(ele)
|
||||
self.parent.UIMatchTargets.clear()
|
||||
config = self.getMatchingPoint()
|
||||
if config is None:
|
||||
return
|
||||
self.parent.UIMatchLabel.setText(config['ID'])
|
||||
self.parent.UIMatchStart.setText(config['start']['Location'])
|
||||
self.parent.UIMatchEnd.setText(config['end'])
|
||||
self.parent.UIMatchSequence.setText(config['sequence'])
|
||||
|
||||
self.parent.UIMatchKnobs.setColumnCount(3)
|
||||
self.parent.UIMatchKnobs.setRowCount(len(config['variable'].keys()))
|
||||
for i , key in enumerate(config['variable'].keys()):
|
||||
self.parent.UIMatchKnobs.setItem(i, 0, QtWidgets.QTableWidgetItem(key))
|
||||
self.parent.UIMatchKnobs.setItem(i, 1, QtWidgets.QTableWidgetItem('%7.3f' % config['variable'][key]['Val']))
|
||||
arg = config['variable'][key]['Max']
|
||||
if arg is None:
|
||||
self.parent.UIMatchKnobs.setItem(i, 2, QtWidgets.QTableWidgetItem(''))
|
||||
else:
|
||||
self.parent.UIMatchKnobs.setItem(i, 2, QtWidgets.QTableWidgetItem('%7.3f' % arg))
|
||||
self.parent.UIMatchKnobs.resizeColumnsToContents()
|
||||
self.parent.UIMatchKnobs.verticalHeader().hide()
|
||||
|
||||
self.parent.UIMatchTargets.setColumnCount(2)
|
||||
self.parent.UIMatchTargets.setRowCount(0)
|
||||
irow = 0
|
||||
sym=['=','<','>']
|
||||
for key0 in order['Target'].keys():
|
||||
info = order['Target'][key0]
|
||||
for key in info.keys():
|
||||
self.parent.UIMatchTargets.insertRow(irow)
|
||||
if key == 'File':
|
||||
self.parent.UIMatchTargets.setItem(irow, 0, QtWidgets.QTableWidgetItem('Script'))
|
||||
self.parent.UIMatchTargets.setItem(irow, 1, QtWidgets.QTableWidgetItem(info['File']))
|
||||
else:
|
||||
self.parent.UIMatchTargets.setItem(irow, 0, QtWidgets.QTableWidgetItem(key0))
|
||||
val = '%7.3f' % info[key]['Val']
|
||||
txt = key + sym[info[key]['Condition']] + val.strip()
|
||||
self.parent.UIMatchTargets.setItem(irow, 1, QtWidgets.QTableWidgetItem(txt))
|
||||
irow+=1
|
||||
if irow == 0:
|
||||
self.parent.UIMatchTargets.insertRow(irow)
|
||||
self.parent.UIMatchTargets.setItem(0, 0, QtWidgets.QTableWidgetItem('Needs previous matching'))
|
||||
if 'Script' in config['target'].keys():
|
||||
self.parent.UIMatchTargets.insertRow(0)
|
||||
self.parent.UIMatchTargets.setItem(0, 0, QtWidgets.QTableWidgetItem('Script'))
|
||||
self.parent.UIMatchTargets.setItem(0, 1, QtWidgets.QTableWidgetItem(config['target']['Script']))
|
||||
else:
|
||||
irow = 0
|
||||
for key in config['target'].keys():
|
||||
for ele in config['target'][key]:
|
||||
self.parent.UIMatchTargets.insertRow(irow)
|
||||
self.parent.UIMatchTargets.setItem(irow, 0, QtWidgets.QTableWidgetItem(key))
|
||||
if isinstance(ele, tuple):
|
||||
fld = self.convertTargetTuple(ele)
|
||||
self.parent.UIMatchTargets.setItem(irow, 1, QtWidgets.QTableWidgetItem(fld))
|
||||
elif isinstance(ele,str):
|
||||
self.parent.UIMatchTargets.setItem(irow, 1, QtWidgets.QTableWidgetItem('Result from: %s ' % ele))
|
||||
self.parent.UIMatchTargets.resizeColumnsToContents()
|
||||
self.parent.UIMatchTargets.verticalHeader().hide()
|
||||
self.parent.UIMatchTargets.horizontalHeader().hide()
|
||||
return
|
||||
|
||||
def convertTargetTuple(self,tuple_in):
|
||||
sym = ['=', '<', '>']
|
||||
retval = tuple_in[0]+sym[int(tuple_in[1])]
|
||||
if tuple_in[2] is None:
|
||||
return retval+'undefined'
|
||||
flt = '%7.3f' % tuple_in[2]
|
||||
return retval + flt.strip()
|
||||
|
||||
#--------------------------------
|
||||
# obtaining reference data
|
||||
def getReference(self):
|
||||
|
||||
Reference in New Issue
Block a user