diff --git a/model.py b/model.py index eb47612..704417f 100644 --- a/model.py +++ b/model.py @@ -169,8 +169,8 @@ class Model: def match(self): - config,ID = self.parent.reference.getMatchingPoint() - if config is None: + config,ID, status = self.parent.reference.getMatchingPoint() + if status is False: return self.setBranch(config['Destination']) diff --git a/reference.py b/reference.py index bc67668..85233e2 100644 --- a/reference.py +++ b/reference.py @@ -1,5 +1,5 @@ import json - +import copy from PyQt5 import QtCore, QtGui, QtWidgets from fontTools.misc.cython import returns @@ -34,6 +34,7 @@ class ReferenceManager: def clearMatching(self): self.save.clear() + self.updateMatchOrder() def updateMatchOrder(self): self.parent.UIMatchOrder.clear() @@ -49,11 +50,10 @@ class ReferenceManager: self.label=self.settings['Label'] self.parameter=self.settings['Parameter'] self.dependence=self.settings['Dependence'] - self.save.clear() self.parent.UIMatchSequenceLabel.setText(self.label) + self.clearMatching() self.updateReferenceComboBox() self.updateReferenceWidgets() - self.updateMatchOrder() def saveTwiss(self, ID, twiss): @@ -63,12 +63,12 @@ class ReferenceManager: def getMatchingPoint(self): idx = self.parent.UIMatchOrder.currentRow() if idx < 0: - return None,None + return None,None,False + status = True 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 + 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 @@ -94,10 +94,13 @@ class ReferenceManager: IDsave = tar['Save']['SaveID'] if not IDsave in self.save.keys(): print('Needs first the matching point of',IDsave) - return - con = {key:{'Val': self.save[IDsave][key],'Condition':0} for key in self.save[IDsave].keys()} + 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 - ncon += len(con.keys()) print('Saved Target',loc,target[loc]) if nvar>ncon: dummycon={} @@ -107,7 +110,7 @@ class ReferenceManager: ncon+=1 target['#s']=dummycon order['Target'] = target - return order, ID + return order, ID, status def updateMatchPoint(self,ID,val): idx = self.order[ID] @@ -129,78 +132,39 @@ class ReferenceManager: #-------------------------------- # match info - def displayMatchingPoint(self): - order,ID = self.getMatchingPoint() + order,ID,status = self.getMatchingPoint() + if status is None: + return self.parent.UIMatchLabel.setText(ID) - return - - def getoldMatchingPoint(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) + if order['Reference'] is None: + self.parent.UIMatchStart.setText('Start') 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.UIMatchStart.setText(order['Reference']['Location']) self.parent.UIMatchKnobs.clear() - for ele in var: - self.parent.UIMatchKnobs.addItem(ele) - - def updateTargets(self,tar): + for ele in order['Variable'].keys(): + self.parent.UIMatchKnobs.addItem(ele) 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.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) + 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')) self.parent.UIMatchTargets.resizeColumnsToContents() self.parent.UIMatchTargets.verticalHeader().hide() self.parent.UIMatchTargets.horizontalHeader().hide() - + return #-------------------------------- # obtaining reference data def getReference(self): diff --git a/ui/OpticsToolsGui.ui b/ui/OpticsToolsGui.ui index 6ce3b2e..c09507b 100644 --- a/ui/OpticsToolsGui.ui +++ b/ui/OpticsToolsGui.ui @@ -833,16 +833,6 @@ - - - - Match - - - - - - @@ -850,18 +840,18 @@ - - + + - - + + - Type + Match - - + +