Initial test of matching
This commit is contained in:
4
model.py
4
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'])
|
||||
|
||||
112
reference.py
112
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):
|
||||
|
||||
@@ -833,16 +833,6 @@
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_16">
|
||||
<property name="text">
|
||||
<string>Match</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="UIMatchLabel"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_17">
|
||||
<property name="text">
|
||||
@@ -850,18 +840,18 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="UIMatchStart"/>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="UIMatchLabel"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_18">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_16">
|
||||
<property name="text">
|
||||
<string>Type</string>
|
||||
<string>Match</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="UIMatchType"/>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="UIMatchStart"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
|
||||
Reference in New Issue
Block a user