diff --git a/elegant.py b/elegant.py index a1f7163..50db76e 100644 --- a/elegant.py +++ b/elegant.py @@ -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): diff --git a/ui/OpticsToolsGui.py b/ui/OpticsToolsGui.py index c1027dd..2326867 100644 --- a/ui/OpticsToolsGui.py +++ b/ui/OpticsToolsGui.py @@ -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...")) diff --git a/ui/OpticsToolsGui.ui b/ui/OpticsToolsGui.ui index bef8e61..f2950e2 100644 --- a/ui/OpticsToolsGui.ui +++ b/ui/OpticsToolsGui.ui @@ -1004,6 +1004,85 @@ + + + Elegant + + + + + + + + + + Charge (pC) + + + + + + + 200 + + + + + + + + + Calculate LSC Effects + + + + + + + Calculate CSR Effcts + + + + + + + Write Input Deck + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + Qt::Horizontal + + + + 443 + 20 + + + + + +