Optimizing matching procedure for SF+ and reporting matching strengths

This commit is contained in:
2026-01-19 16:07:14 +01:00
parent 3a82d2d464
commit 3f5b284406
7 changed files with 25 additions and 20 deletions

View File

@@ -98,8 +98,8 @@ class OpticsTools(QtWidgets.QMainWindow, QtCore.QObject, Ui_OpticsGUI):
if self.UISaveMatchSettings.isChecked():
fileName = self.match.scriptdir+'/settings.json'
self.saveSettingsdirect(fileName)
if self.UIReportMatchStrength.isChecked():
self.model.checkMagnetLimit()
def updateMatchingCase(self):

View File

@@ -14,7 +14,7 @@ s20bc01.mqua010.k1:=1.;
MATCH,SEQUENCE=Swissfel,range=s20sy02$start/s20bc02$end,beta0=twisssep;
VARY,NAME=s20bc01.mqua010.k1,STEP=0.0001;
VARY,NAME=s20bc01.mqua030.k1,STEP=0.0001;
VARY,NAME=s20bc01.mqua050.k1,STEP=0.0001;
VARY,NAME=s20bc01.mqua060.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc02$end,betx<4;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc02$end,bety<90;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc01$end,betx<250;
@@ -260,7 +260,7 @@ sarcl01.mqua190.k1 := -1.475278354;
use,sequence=swissfel;
MATCH,SEQUENCE=swissfel,range=s20SY02$start/sarma02$start,beta0=twisssep;
VARY,NAME=sarcl01.mqua020.k1,STEP=0.0001;
VARY,NAME=sarcl01.mqua020.k1,STEP=0.0001,lower=-1., upper =1.;
VARY,NAME=sarcl01.mqua050.k1,STEP=0.0001;
VARY,NAME=sarcl01.mqua080.k1,STEP=0.0001;
VARY,NAME=sarcl01.mqua100.k1,STEP=0.0001;
@@ -294,7 +294,7 @@ plot,haxis=s,vaxis=betx,bety,range=S30CB15$START/SARCL02$END,colour=100;
!-----------------
muAR=0.17;
muAR=0.16;
match,SEQUENCE=swissfel,range=sarun02$start/sarun03$end;
Vary,name=sarun02.mqua080.k1,step=0.0001;
Vary,name=sarun03.mqua080.k1,step=0.0001;

View File

@@ -117,7 +117,7 @@ twiss,SEQUENCE=swissfel,range=s20sy02$start/Satsy03.mbnd200,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100;
exit;
MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satbc01$end,beta0=twisssep;
VARY,NAME=satsy03.mqua220.k1,STEP=0.0001;

View File

@@ -8,11 +8,11 @@
2) switch between references
3) Allo filter to update quadrupoles to be part of the match scripts and not globally written in the code
#
#) Give feedback on the matching results to GUI
#) allow for some progress indication of matching
#
#) Check for maximum gradient for matched values
3) Match for sextupoles!
#) check why program crashes when matching all 3 beamlines

View File

@@ -33,6 +33,7 @@ class Model:
def eventHandling(self):
self.parent.UITrack.clicked.connect(self.track)
self.parent.UIReportMagnetStrength.clicked.connect(self.checkMagnetLimit)
def forceLatticeUpdate(self):
self.forceLat=True
@@ -308,6 +309,7 @@ class Model:
########################################3
def checkMagnetLimit(self):
# using magnet calibration
self.updateEnergy(140.)
quad={}
quad['QFA'] = [0.15, 0.173, 150.0, 91.1, 0.0, 0.74521, -0.00813, -0.03542,
22.5e-3] # From MEASUREMENT. Documentation: https://intranet.psi.ch/pub/Swiss_FEL/FinQuadrupoles/QFA.pdf
@@ -317,6 +319,7 @@ class Model:
1.0] # From DESIGN(?). Documentation: Injector wiki, Subsystems (as of 14th Aug 2014)
quad['QFD'] = [0.15, 0.1628, 10.0, 5.6, 0.0, 0.23313, -27.6e-4, 15.5e-4,
0.011] # From Measurement. Documentation: FEL-SS88-007-7.pdf (found in Alfresco: Company Home > Projects > SwissFEL > Facility > 8850 Magnets)
quad['QFDM'] = quad['QFD'] # same type but weaker windings for corrector
quad['QFF'] = [0.08, 0.0875, 10.0, 2.9, 0.0, 0.32897, -0.5e-4, -42.9e-4,
0.006] # From Measurement. Documentation: FEL-SS88-008-8.pdf (found in Alfresco)
quad['QFM'] = [0.3, 0.311, 50.0, 21.1, 0.0, 0.64541, -0.00296, -0.00617, 0.011] # From Measurement
@@ -345,4 +348,6 @@ class Model:
k1max=k1brho[bg]/brho
rat=np.abs(ele.k1/k1max)*100.
print('%s: %5.1f (percent)' % (ele.Name.replace('.','-'),rat))
else:
print('%s: Unsupported type %s' % (ele.Name.replace('.','-'),bg))

View File

@@ -356,9 +356,6 @@ class Ui_OpticsGUI(object):
self.UIInitAllMagnets = QtWidgets.QCheckBox(self.widget)
self.UIInitAllMagnets.setObjectName("UIInitAllMagnets")
self.verticalLayout_3.addWidget(self.UIInitAllMagnets)
self.UIReportMatchStrength = QtWidgets.QCheckBox(self.widget)
self.UIReportMatchStrength.setObjectName("UIReportMatchStrength")
self.verticalLayout_3.addWidget(self.UIReportMatchStrength)
self.label_19 = QtWidgets.QLabel(self.widget)
font = QtGui.QFont()
font.setBold(True)
@@ -383,6 +380,9 @@ class Ui_OpticsGUI(object):
item = QtWidgets.QTableWidgetItem()
self.UIMatchKnobs.setHorizontalHeaderItem(1, item)
self.verticalLayout_3.addWidget(self.UIMatchKnobs)
self.UIReportMagnetStrength = QtWidgets.QPushButton(self.widget)
self.UIReportMagnetStrength.setObjectName("UIReportMagnetStrength")
self.verticalLayout_3.addWidget(self.UIReportMagnetStrength)
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_3.addItem(spacerItem1)
self.horizontalLayout_4.addWidget(self.widget)
@@ -660,13 +660,13 @@ class Ui_OpticsGUI(object):
self.UIMatchAramis.setText(_translate("OpticsGUI", "Aramis"))
self.UISaveMatchSettings.setText(_translate("OpticsGUI", "Save matched machine settings automtically"))
self.UIInitAllMagnets.setText(_translate("OpticsGUI", "Initialize all magnets to zero before matching"))
self.UIReportMatchStrength.setText(_translate("OpticsGUI", "Report matched quadrupole strength"))
self.label_19.setText(_translate("OpticsGUI", "Matching Variables"))
self.UIModifyKnobs.setText(_translate("OpticsGUI", "Overwrite default values for matching variables "))
item = self.UIMatchKnobs.horizontalHeaderItem(0)
item.setText(_translate("OpticsGUI", "Parameter"))
item = self.UIMatchKnobs.horizontalHeaderItem(1)
item.setText(_translate("OpticsGUI", "Value"))
self.UIReportMagnetStrength.setText(_translate("OpticsGUI", "Report Matched Quadrupole Strength"))
self.TabMaster.setTabText(self.TabMaster.indexOf(self.tab_3), _translate("OpticsGUI", "Track"))
self.groupBox_8.setTitle(_translate("OpticsGUI", "Magnets (Angle/ k1L / k2L)"))
self.label_23.setText(_translate("OpticsGUI", "Start"))

View File

@@ -581,13 +581,6 @@
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="UIReportMatchStrength">
<property name="text">
<string>Report matched quadrupole strength</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_19">
<property name="font">
@@ -628,6 +621,13 @@
</column>
</widget>
</item>
<item>
<widget class="QPushButton" name="UIReportMagnetStrength">
<property name="text">
<string>Report Matched Quadrupole Strength</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">