Initial test of matching

This commit is contained in:
2025-05-15 11:44:07 +02:00
parent 2f8a07ac37
commit f67d4ec349
3 changed files with 47 additions and 93 deletions

View File

@@ -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'])

View File

@@ -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):

View File

@@ -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>