SF+ matching and support for ELegant lattice export
This commit is contained in:
1 parent
4e9a35b0e7
commit
37b74ee81c
3 files changed
+177
-18
No files matched your search
+61
-18
@@ -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):
|
||||
|
||||
@@ -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..."))
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in new issue
Block a user