SF+ matching and support for ELegant lattice export

This commit is contained in:
reiche committed 2026-10-13 10:37:20 +02:00
1 parent 4e9a35b0e7
commit 37b74ee81c
3 files changed
+177 -18

No files matched your search

+61 -18
View File
@@ -38,6 +38,15 @@ class Elegant(ApplicationTemplate):
return
start = str(self.parent.UITrackStart.text()).upper()
end = str(self.parent.UITrackEnd.text()).upper()
self.charge=float(str(self.parent.UIElegantCharge.text()))
if self.parent.UIElegantCSR.isChecked():
self.csr=1
else:
self.csr=0
if self.parent.UIElegantLSC.isChecked():
self.lsc=1
else:
self.lsc=0
if len(start) > 7:
start = start[0:7]
if len(end) > 7:
@@ -56,31 +65,65 @@ class Elegant(ApplicationTemplate):
return
self.model.om.setBranch(end.upper())
print('Exporting from', start, 'to', end, '(Reference Location:', refloc, ')')
# self.doTrack(start, end, refloc, twiss0)
# , project='SwissFEL', start='SINLH01', end='SARBD01', lsc=True, csr=True, Q=200e-12, dump=[],
# align=[]):
# start, end = self.checkRange(start, end)
# self.setBranch(end)
# lat = Lattice()
# lat.charge = Q
# lat.dump = dump
# if lsc:
# lat.lsc = 1
# else:
# lat.lsc = 0
# if csr:
# lat.csr = 1
# else:
# lat.csr = 0
# lat.center = align
filename = self.openLatticeStream('Elegant', 'SwissFEL')
self.model.om.exportBranch(self)
self.closeLatticeStream()
if self.parent.UIElegantMainInput.isChecked():
print('Writing Elegant input file')
self.writeInputFile('Elegant','SwissFEL',twiss0)
return filename
def writeInputFile(self,path : str, root: str,twiss0:dict):
#path,name,latfile,distfile,distinfo,ds):
print(twiss0)
filename = path+'/'+root+'.ele'
latfile=filename.replace('ele','lat')
with open(filename, 'w') as fid:
fid.write('&run_setup\n')
fid.write('\tlattice\t\t= %s,\n' % (latfile))
fid.write('\tuse_beamline\t= SwissFEL,\n')
fid.write('\trootname\t= %s,\n' % root)
fid.write('\toutput\t\t= %s/%%s.out,\n' % path)
fid.write('\tcentroid\t\t= %s/%%s.cen,\n' % path)
fid.write('\tsigma\t\t= %s/%%s.sig,\n' % path)
fid.write('\tfinal\t\t= %s/%%s.fin,\n' % path)
fid.write('\tparameters\t= %s/%%s.par,\n' % path)
fid.write('\tmagnets\t\t= %s/%%s.mag,\n' % path)
fid.write('\tcombine_bunch_statistics = 0,\n')
fid.write('\tdefault_order\t= 2,\n')
fid.write('\tconcat_order\t= 0,\n')
fid.write('\tprint_statistics\t= 0,\n')
fid.write('\trandom_number_seed\t= 9876543210,\n')
fid.write('\tp_central\t= %f,\n' % (twiss0['energy']/0.511e-3))
fid.write('\ttracking_updates\t= 1\n')
fid.write('\talways_change_p0\t= 1\n')
fid.write('&end\n\n')
fid.write('&run_control\n')
fid.write('\tn_steps\t= 1,\n')
fid.write('\treset_rf_for_each_step = 1\n')
fid.write('&end\n\n')
fid.write('&twiss_output\n')
fid.write('\tfilename\t= %s/%%s.twi,\n' % path)
fid.write('\tmatched\t\t= 0,\n')
fid.write('\tbeta_x\t\t= %f,\n' % twiss0['betx'])
fid.write('\tbeta_y\t\t= %f,\n' % twiss0['bety'])
fid.write('\talpha_x\t\t= %f,\n' % twiss0['alfx'])
fid.write('\talpha_y\t\t= %f,\n' % twiss0['alfy'])
fid.write('&end\n\n')
#fid.write('&sdds_beam\n')
#fid.write('\tinput_type= "elegant",\n')
#fid.write('\tsample_interval\t= %d,\n' % ds)
#fid.write('\tinput = %s,\n' % distfile)
#fid.write('\treuse_bunch\t= 0 \n')
#fid.write('&end\n\n')
fid.write('&track\n')
fid.write('&end\n\n')
fid.close()
return filename
def openLatticeStream(self, path, name):
+37
View File
@@ -596,6 +596,37 @@ class Ui_OpticsGUI(object):
self.verticalLayout_17.addWidget(self.SBLongTrack)
self.horizontalLayout_5.addWidget(self.groupBox_9)
self.TabMaster.addTab(self.tab_8, "")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.tab)
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
self.verticalLayout_4 = QtWidgets.QVBoxLayout()
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
self.label_18 = QtWidgets.QLabel(self.tab)
self.label_18.setObjectName("label_18")
self.horizontalLayout_6.addWidget(self.label_18)
self.UIElegantCharge = QtWidgets.QLineEdit(self.tab)
self.UIElegantCharge.setObjectName("UIElegantCharge")
self.horizontalLayout_6.addWidget(self.UIElegantCharge)
self.verticalLayout_4.addLayout(self.horizontalLayout_6)
self.UIElegantLSC = QtWidgets.QCheckBox(self.tab)
self.UIElegantLSC.setObjectName("UIElegantLSC")
self.verticalLayout_4.addWidget(self.UIElegantLSC)
self.UIElegantCSR = QtWidgets.QCheckBox(self.tab)
self.UIElegantCSR.setObjectName("UIElegantCSR")
self.verticalLayout_4.addWidget(self.UIElegantCSR)
self.UIElegantMainInput = QtWidgets.QCheckBox(self.tab)
self.UIElegantMainInput.setChecked(True)
self.UIElegantMainInput.setObjectName("UIElegantMainInput")
self.verticalLayout_4.addWidget(self.UIElegantMainInput)
spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_4.addItem(spacerItem3)
self.horizontalLayout_7.addLayout(self.verticalLayout_4)
spacerItem4 = QtWidgets.QSpacerItem(443, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_7.addItem(spacerItem4)
self.TabMaster.addTab(self.tab, "")
self.horizontalLayout_2.addWidget(self.TabMaster)
OpticsGUI.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(OpticsGUI)
@@ -821,6 +852,12 @@ class Ui_OpticsGUI(object):
self.SB2ModUnd.setText(_translate("OpticsGUI", "Model <- Sandbox"))
self.SBLongTrack.setText(_translate("OpticsGUI", "Import LongTracker Settings"))
self.TabMaster.setTabText(self.TabMaster.indexOf(self.tab_8), _translate("OpticsGUI", "Sandbox"))
self.label_18.setText(_translate("OpticsGUI", "Charge (pC)"))
self.UIElegantCharge.setText(_translate("OpticsGUI", "200"))
self.UIElegantLSC.setText(_translate("OpticsGUI", "Calculate LSC Effects"))
self.UIElegantCSR.setText(_translate("OpticsGUI", "Calculate CSR Effcts"))
self.UIElegantMainInput.setText(_translate("OpticsGUI", "Write Input Deck"))
self.TabMaster.setTabText(self.TabMaster.indexOf(self.tab), _translate("OpticsGUI", "Elegant"))
self.menuFile.setTitle(_translate("OpticsGUI", "File"))
self.menuHelp.setTitle(_translate("OpticsGUI", "Help"))
self.actionOpen_2.setText(_translate("OpticsGUI", "Open Settings..."))
+79
View File
@@ -1004,6 +1004,85 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Elegant</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QLabel" name="label_18">
<property name="text">
<string>Charge (pC)</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="UIElegantCharge">
<property name="text">
<string>200</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="UIElegantLSC">
<property name="text">
<string>Calculate LSC Effects</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="UIElegantCSR">
<property name="text">
<string>Calculate CSR Effcts</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="UIElegantMainInput">
<property name="text">
<string>Write Input Deck</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>443</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
</layout>