diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 0015300..3f5919a 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,7 +4,16 @@
-
+
+
+
+
+
+
+
+
+
+
@@ -18,6 +27,11 @@
+
@@ -32,31 +46,31 @@
- {
+ "keyToString": {
+ "ModuleVcsDetector.initialDetectionPerformed": "true",
+ "Python.ElegantTools.executor": "Run",
+ "RunOnceActivity.MCP Project settings loaded": "true",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
+ "RunOnceActivity.git.unshallow": "true",
+ "RunOnceActivity.typescript.service.memoryLimit.init": "true",
+ "SHELLCHECK.PATH": "I do mind",
+ "ai.playground.ignore.import.keys.banner.in.settings": "true",
+ "com.intellij.ml.llm.matterhorn.ej.ui.settings.DefaultModelSelectionForGA.v1": "true",
+ "git-widget-placeholder": "main",
+ "junie.onboarding.icon.badge.shown": "true",
+ "last_opened_file_path": "/home/reiche/Codes/Python/Modelling/ElegantTools",
+ "node.js.detected.package.eslint": "true",
+ "node.js.detected.package.tslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "node.js.selected.package.tslint": "(autodetect)",
+ "nodejs_package_manager_path": "npm",
+ "settings.editor.selected.configurable": "com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable",
+ "to.speed.mode.migration.done": "true",
+ "vue.rearranger.settings.migration": "true"
}
-}]]>
+}
@@ -101,8 +115,8 @@
-
-
+
+
@@ -117,7 +131,10 @@
-
+
+
+
+
@@ -191,7 +208,15 @@
1769421900912
-
+
+
+ 1769423688133
+
+
+
+ 1769423688133
+
+
@@ -213,9 +238,10 @@
-
+
+
-
+
\ No newline at end of file
diff --git a/ElegantTools.py b/ElegantTools.py
index c058f9d..ad0a6eb 100644
--- a/ElegantTools.py
+++ b/ElegantTools.py
@@ -1,5 +1,5 @@
import sys
-#import json
+import json
#import webbrowser
#import subprocess
from argparse import ArgumentParser
@@ -38,6 +38,7 @@ class ElegantTools(QtWidgets.QMainWindow, Ui_ElegantGUI):
self.UIDistCenter.clicked.connect(self.centerDist)
self.UIDistCut.clicked.connect(self.cutDist)
self.UIDistInput.clicked.connect(self.setPreferredDist)
+ self.UILoadOpticsSettings.clicked.connect(self.loadOpticsSettings)
self.UILoadReference.clicked.connect(self.loadLattice)
self.UISaveReference.clicked.connect(self.saveLattice)
@@ -103,6 +104,19 @@ class ElegantTools(QtWidgets.QMainWindow, Ui_ElegantGUI):
return
self.model.loadLatticeSettings(fileName)
+ def loadOpticsSettings(self):
+ options = QtWidgets.QFileDialog.Options()
+ options |= QtWidgets.QFileDialog.DontUseNativeDialog
+ fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Open Lattice Settings",
+ "LatticeSettings/default.json",
+ "Json Files(*.json)", options=options)
+ if not fileName:
+ return
+ with open(fileName, 'r', encoding='utf-8') as f:
+ settings = json.load(f)
+ self.model.loadSettings(settings)
+
+
def saveLattice(self):
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.DontUseNativeDialog
diff --git a/distribution.py b/distribution.py
index 8110bb9..2d273e9 100644
--- a/distribution.py
+++ b/distribution.py
@@ -1,7 +1,8 @@
-import sdds
+import pysdds
import copy
import subprocess
import numpy as np
+import pandas as pd
class Distribution:
def __init__(self,parent=None,filename=None):
@@ -14,41 +15,56 @@ class Distribution:
self.loadDist()
def getQ(self):
- return self.dist.parameterData[self.parameters.index('Charge')][0]
+ return self.Q
def plotLPS(self):
- x = self.dist.columnData[self.columns.index('t')][0]
- y = self.dist.columnData[self.columns.index('p')][0]
- Q = self.dist.parameterData[self.parameters.index('Charge')][0]
- self.parent.plot.LPS(x,y,Q)
+ self.parent.plot.LPS(self.t,self.p,self.Q)
def loadDist(self):
if self.filename is None:
return
- self.dist = sdds.load(self.filename)
- self.distcopy = copy.deepcopy(self.dist)
- self.columns = self.dist.columnName
- self.parameters =self.dist.parameterName
- Q = self.dist.parameterData[self.parameters.index('Charge')][0]
- if Q < 1e-15:
- Q = float(str(self.parent.UIDistCharge.text()))*1e-12
- self.dist.setParameterValue('Charge',Q)
- self.analyseBeam(self.filename,Q)
+ self.dist = pysdds.read(self.filename)
+ self.distCopy = copy.deepcopy(self.dist)
+ self.Q = self.dist.par('Charge').data[0]
+ self.x = self.dist.col('x').data[0]
+ self.xp = self.dist.col('xp').data[0]
+ self.y = self.dist.col('y').data[0]
+ self.yp = self.dist.col('yp').data[0]
+ self.t = self.dist.col('t').data[0]
+ self.p = self.dist.col('p').data[0]
+ if self.Q < 1e-15:
+ self.Q = float(str(self.parent.UIDistCharge.text()))*1e-12
self.plotLPS()
+ def getTwiss(self,x,xp,p):
+ x1 = np.mean(x)
+ x2= np.mean(x*x)
+ xp1 = np.mean(xp)
+ xp2 = np.mean(xp*xp)
+ xxp1 = np.mean(x*xp)
+ g1=np.mean(p)
+ ex = np.sqrt((x2-x1*x1)*(xp2-xp1*xp1)-(xxp1-x1*xp1)**2)*g1
+ bx = (x2-x1*x1)*g1/ex
+ ax = - (xxp1-x1*xp1)*g1/ex
+
+ return bx,ax,ex
def analyseBeamShort(self,filename):
- output = 'Runs/analysebeam.sdds'
- subprocess.run(['sddsanalyzebeam', filename, output])
- fields = ['betax', 'betay', 'alphax', 'alphay', 'pAverage']
- out = sdds.load(output)
+ dist = pysdds.read(filename)
+ p = dist.col('p').data[0]
+ x = dist.col('x').data[0]
+ xp = dist.col('xp').data[0]
+ y = dist.col('y').data[0]
+ yp = dist.col('yp').data[0]
+ bx, ax, ex = self.getTwiss(x,xp,p)
+ by, ay, ey = self.getTwiss(y,yp,p)
res={}
- for i ,field in enumerate(fields):
- idx = out.columnName.index(field)
- res[field]=out.columnData[idx][0][0]
- res['Q']=self.dist.parameterData[self.parameters.index('Charge')][0]
- del out
+ res['betax']=bx
+ res['alphax']=ax
+ res['betay'] = by
+ res['alphay'] = ay
+ res['pAverage'] = np.mean(p)
return res
def analyseBeam(self,filename,Q):
@@ -89,53 +105,56 @@ class Distribution:
def addBlurr(self):
- p=self.dist.columnData[self.columns.index('p')][0]
- ns=len(p)
+ ns=len(self.p)
blurr = float(str(self.parent.UIDistSpread.text())) / 511.
dg = np.random.normal(0, blurr, size=ns)
- self.dist.setColumnValueList('p', [p[i]+dg[i] for i in range(ns)])
+ self.p += dg
self.plotLPS()
def centerDist(self):
- Q = float(str(self.parent.UIDistCharge.text()))*1e-12
- self.dist.setParameterValue('Charge', Q)
+ self.Q = float(str(self.parent.UIDistCharge.text()))*1e-12
pCenter = float(str(self.parent.UIDistEnergy.text()))/0.511
- p = self.dist.columnData[self.columns.index('p')][0]
- p = p - np.mean(p)+pCenter
- self.dist.columnData[self.columns.index('p')][0] = [p0 for p0 in p]
- #self.dist.setColumnValueList('p', p)
+ self.p = self.p - np.mean(self.p)+pCenter
self.plotLPS()
+
def cutDist(self):
- cut = float(str(self.parent.UIDistLength.text()))
- t = self.dist.columnData[self.columns.index('t')][0]
- nti=len(t)
- t0 = np.mean(t)
- trms = np.std(t)
- tmin = t0-cut*trms
- tmax = t0+cut*trms
- idx = np.argwhere(np.logical_and(t > tmin,t < tmax))
- ntf = len(idx)
- for i, fld in enumerate(self.columns):
- dat = np.array(self.dist.columnData[i][0])
- self.dist.setColumnValueList(fld, [d for d in dat[idx].ravel()])
- Q = self.dist.parameterData[self.parameters.index('Charge')][0]*float(ntf)/float(nti)
- self.dist.setParameterValue('Charge', Q)
+ sigma = float(str(self.parent.UIDistLength.text()))
+ if sigma <=0:
+ return
+ rmsT=np.std(self.t)
+ idx=np.argwhere(np.abs(self.t)< rmsT*sigma)
+ N0 = float(len(self.t))
+ self.x=self.x[idx]
+ self.y=self.y[idx]
+ self.xp=self.xp[idx]
+ self.yp=self.yp[idx]
+ self.p=self.p[idx]
+ self.t=self.t[idx]
+ N1 = float(len(self.t))
+ self.Q = self.Q*N1/N0
self.plotLPS()
def revertDist(self):
self.dist=copy.deepcopy(self.dist)
def saveDist(self,filename):
- x=sdds.SDDS()
- x.mode = sdds.SDDS_BINARY
- x.description[0]="test"
- x.description[1]="test"
- x.parameterName=self.dist.parameterName
- x.parameterData=self.dist.parameterData
- x.parameterDefinition = self.dist.parameterDefinition
- x.columnName=self.dist.columnName
- x.columnData=[self.dist.columnData[i] for i in range(len(self.dist.columnName))]
- x.columnDefinition=self.dist.columnDefinition
- x.save(filename)
- del x
+ if len(self.t.shape) > 1:
+ meas_df = {'t': self.t[:, 0], 'p': self.p[:, 0], 'x': self.x[:, 0], 'xp': self.xp[:, 0],
+ 'y': self.y[:, 0], 'yp': self.yp[:, 0], }
+ else:
+ meas_df = {'t': self.t[:], 'p': self.p[:], 'x': self.x[:], 'xp': self.xp[:],
+ 'y': self.y[:], 'yp': self.yp[:], }
+ df_meas = pd.DataFrame.from_dict(meas_df)
+ parameters = {'Charge': [float(self.Q)]}
+ subprocess.run(['rm', filename])
+ sdds = pysdds.SDDSFile.from_df([df_meas], parameter_dict=parameters, mode='binary')
+ sdds.col('x').nm['units']= 'm'
+ sdds.col('y').nm['units'] = 'm'
+ sdds.col('t').nm['units'] = 's'
+ sdds.col('p').nm['units'] = 'm$be$nc'
+ sdds.par('Charge').nm['units']='C'
+ sdds.validate_data()
+
+ pysdds.write(sdds, filename)
+
diff --git a/model.py b/model.py
index bea84ee..c861c49 100644
--- a/model.py
+++ b/model.py
@@ -77,27 +77,33 @@ class Model:
ele.__dict__[field]/=ele.Length
def loadSettings(self,settings):
- self.loadSettingsGroup(settings['Quadrupole'],['k1'])
+
+ if not 'Phase' in settings.keys():
+ return False
+ if not settings['Phase'] == self.phase:
+ return False
+ self.loadSettingsGroup(settings['Quadrupole'], ['k1'])
self.loadSettingsGroup(settings['Sextupole'], ['k2'])
self.loadSettingsGroup(settings['Dipole'], ['angle'])
- self.loadSettingsGroup(settings['RF'], ['Gradient'],normalized=True)
+ self.loadSettingsGroup(settings['RF'], ['Gradient'], normalized=True)
self.loadSettingsGroup(settings['RF'], ['Phase'])
- self.loadSettingsGroup(settings['Undulator'], ['K','kx','ky'])
- self.loadSettingsGroup(settings['Kicker'], ['cory','design_kick'])
+ self.loadSettingsGroup(settings['Undulator'], ['K', 'kx', 'ky'])
+ self.loadSettingsGroup(settings['Kicker'], ['cory', 'design_kick'])
E0 = settings['Energy']['energy']
- if isinstance(E0,list):
- E0=E0[0]
+ if isinstance(E0, list):
+ E0 = E0[0]
E0Ref = settings['Energy']['location']
- if isinstance(E0,list):
- E0=E0[0]
- self.initEnergy=E0
- self.initEnergyRef=E0Ref
- self.om.forceEnergyAt(E0Ref, E0*1e6)
+ if isinstance(E0, list):
+ E0 = E0[0]
+ self.initEnergy = E0
+ self.initEnergyRef = E0Ref
+ self.om.forceEnergyAt(E0Ref, E0 * 1e6)
self.startTwiss = settings['InitialCondition']
- self.parent.UIDistBetax.setText('%7.3f' % self.startTwiss['betax0'])
- self.parent.UIDistBetay.setText('%7.3f' % self.startTwiss['betay0'])
- self.parent.UIDistAlphax.setText('%7.3f' % self.startTwiss['alphax0'])
- self.parent.UIDistAlphay.setText('%7.3f' % self.startTwiss['alphay0'])
+ print('Initial Condition:',self.startTwiss)
+ self.parent.UIDistBetax.setText('%7.3f' % self.startTwiss['betx'])
+ self.parent.UIDistBetay.setText('%7.3f' % self.startTwiss['bety'])
+ self.parent.UIDistAlphax.setText('%7.3f' % self.startTwiss['alfx'])
+ self.parent.UIDistAlphay.setText('%7.3f' % self.startTwiss['alfy'])
self.parent.UIDistEnergy.setText('%7.3f' % E0)
self.updateRFTable(settings['RF'])
diff --git a/plot.py b/plot.py
index b1b448f..21db889 100644
--- a/plot.py
+++ b/plot.py
@@ -1,5 +1,5 @@
import sys
-import sdds
+import pysdds
from PyQt5 import QtWidgets,QtGui
@@ -118,12 +118,12 @@ class ElegantPlot(QtWidgets.QMainWindow, Ui_ElegantPlotGUI):
self.UITwissValues.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
def loadDist(self,filename):
- dist = sdds.load(filename)
+ dist = pysdds.read(filename)
cols=['t','p','x','xp','y','yp']
self.dist.clear()
for col in cols:
- self.dist[col] = dist.columnData[dist.columnName.index(col)][0]
- self.Q = dist.parameterData[dist.parameterName.index('Charge')][0]
+ self.dist[col] = dist.col(col)[0]
+ self.Q = dist.par('Charge').data[0]
return filename
diff --git a/track.py b/track.py
index cbd0b7f..966255b 100644
--- a/track.py
+++ b/track.py
@@ -2,7 +2,7 @@ from threading import Thread
import subprocess
import re
import os
-import sdds
+import pysdds
from PyQt5 import QtCore
@@ -62,7 +62,11 @@ class Track(QtCore.QObject):
self.parent.preferredDist.saveDist(distfile)
print('Input distribution copied to',distfile)
res=self.parent.preferredDist.analyseBeamShort(distfile)
- inputfile=self.writeInputFile('Runs',project,latfile,distfile,res)
+ print(res)
+ downsample=int(str(self.parent.UISkipParticles.text()))
+ if downsample<1:
+ downsample = 1
+ inputfile=self.writeInputFile('Runs',project,latfile,distfile,res,downsample)
print('Input file written to',inputfile)
# self.cmd=['mpirun','-np','10','Pelegant',inputfile]
self.cmd=['elegant',inputfile]
@@ -74,6 +78,7 @@ class Track(QtCore.QObject):
def Telegant(self):
self.parent.UITrackOutput.appendPlainText('Starting thread to run elegant')
# p = subprocess.run(self.cmd)
+ print('Elegant launch:',self.cmd)
p = subprocess.Popen(self.cmd,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(p.stdout.readline, b''):
self.message.emit(line.decode('utf-8').strip())
@@ -94,18 +99,15 @@ class Track(QtCore.QObject):
self.loadTracking()
def loadTracking(self):
- data = sdds.load(self.root+'.cen')
- columns = data.columnName
+ data = pysdds.read(self.root+'.cen')
res = {}
fields = ['s','ElementName','Cx','Cxp','Cy','Cyp','Cdelta','pCentral']
for field in fields:
- res[field] = data.columnData[columns.index(field)][0]
- del data
- data = sdds.load(self.root + '.sig')
- columns = data.columnName
+ res[field] = data.col(field)[0]
+ data = pysdds.read(self.root + '.sig')
fields = ['Sx', 'Sxp', 'Sy', 'Syp', 'Sdelta', 'St','enx','eny','ecnx','ecny','betaxBeam','betayBeam','alphaxBeam','alphayBeam']
for field in fields:
- res[field] = data.columnData[columns.index(field)][0]
+ res[field] = data.col(field)[0]
del data
dist = [self.root+'Inputdist.sdds']+self.getDumps()
self.parent.plot.newData(res,dist)
@@ -126,7 +128,7 @@ class Track(QtCore.QObject):
# print(msg)
self.parent.UITrackOutput.appendPlainText(msg)
- def writeInputFile(self,path,name,latfile,distfile,distinfo):
+ def writeInputFile(self,path,name,latfile,distfile,distinfo,ds):
filename = '%s/%s.ele' % (path, name)
with open(filename, 'w') as fid:
fid.write('&run_setup\n')
@@ -152,7 +154,6 @@ class Track(QtCore.QObject):
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')
@@ -164,7 +165,7 @@ class Track(QtCore.QObject):
fid.write('&sdds_beam\n')
fid.write('\tinput_type= "elegant",\n')
- fid.write('\tsample_interval\t= 1,\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')
diff --git a/ui/ElegantToolsGui.py b/ui/ElegantToolsGui.py
index 042cb4b..48ba016 100644
--- a/ui/ElegantToolsGui.py
+++ b/ui/ElegantToolsGui.py
@@ -28,8 +28,8 @@ class Ui_ElegantGUI(object):
self.TabMaster.setObjectName("TabMaster")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setObjectName("tab_3")
- self.horizontalLayout = QtWidgets.QHBoxLayout(self.tab_3)
- self.horizontalLayout.setObjectName("horizontalLayout")
+ self.verticalLayout_7 = QtWidgets.QVBoxLayout(self.tab_3)
+ self.verticalLayout_7.setObjectName("verticalLayout_7")
self.widget_2 = QtWidgets.QWidget(self.tab_3)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
@@ -100,10 +100,26 @@ class Ui_ElegantGUI(object):
self.label_7 = QtWidgets.QLabel(self.widget_2)
self.label_7.setObjectName("label_7")
self.verticalLayout.addWidget(self.label_7)
+ self.horizontalLayout = QtWidgets.QHBoxLayout()
+ self.horizontalLayout.setObjectName("horizontalLayout")
self.UITrackInput = QtWidgets.QLineEdit(self.widget_2)
self.UITrackInput.setReadOnly(True)
self.UITrackInput.setObjectName("UITrackInput")
- self.verticalLayout.addWidget(self.UITrackInput)
+ self.horizontalLayout.addWidget(self.UITrackInput)
+ spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
+ self.horizontalLayout.addItem(spacerItem)
+ self.label_9 = QtWidgets.QLabel(self.widget_2)
+ self.label_9.setObjectName("label_9")
+ self.horizontalLayout.addWidget(self.label_9)
+ self.UISkipParticles = QtWidgets.QLineEdit(self.widget_2)
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.UISkipParticles.sizePolicy().hasHeightForWidth())
+ self.UISkipParticles.setSizePolicy(sizePolicy)
+ self.UISkipParticles.setObjectName("UISkipParticles")
+ self.horizontalLayout.addWidget(self.UISkipParticles)
+ self.verticalLayout.addLayout(self.horizontalLayout)
self.UITrackDoLSC = QtWidgets.QCheckBox(self.widget_2)
self.UITrackDoLSC.setChecked(True)
self.UITrackDoLSC.setObjectName("UITrackDoLSC")
@@ -123,7 +139,7 @@ class Ui_ElegantGUI(object):
self.UITrackOutput = QtWidgets.QPlainTextEdit(self.widget_2)
self.UITrackOutput.setObjectName("UITrackOutput")
self.verticalLayout.addWidget(self.UITrackOutput)
- self.horizontalLayout.addWidget(self.widget_2)
+ self.verticalLayout_7.addWidget(self.widget_2)
self.TabMaster.addTab(self.tab_3, "")
self.tab_8 = QtWidgets.QWidget()
self.tab_8.setObjectName("tab_8")
@@ -147,8 +163,8 @@ class Ui_ElegantGUI(object):
self.UIDistAnalysis.setReadOnly(True)
self.UIDistAnalysis.setObjectName("UIDistAnalysis")
self.verticalLayout_4.addWidget(self.UIDistAnalysis)
- spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
- self.verticalLayout_4.addItem(spacerItem)
+ spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+ self.verticalLayout_4.addItem(spacerItem1)
self.UIDistInput = QtWidgets.QPushButton(self.tab_8)
self.UIDistInput.setObjectName("UIDistInput")
self.verticalLayout_4.addWidget(self.UIDistInput)
@@ -227,8 +243,8 @@ class Ui_ElegantGUI(object):
self.UIDistCut = QtWidgets.QPushButton(self.tab_8)
self.UIDistCut.setObjectName("UIDistCut")
self.verticalLayout_3.addWidget(self.UIDistCut)
- spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
- self.verticalLayout_3.addItem(spacerItem1)
+ spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+ self.verticalLayout_3.addItem(spacerItem2)
self.UIDistSave = QtWidgets.QPushButton(self.tab_8)
self.UIDistSave.setObjectName("UIDistSave")
self.verticalLayout_3.addWidget(self.UIDistSave)
@@ -246,6 +262,10 @@ class Ui_ElegantGUI(object):
self.UISaveReference = QtWidgets.QPushButton(self.tab_2)
self.UISaveReference.setObjectName("UISaveReference")
self.verticalLayout_2.addWidget(self.UISaveReference)
+ self.UILoadOpticsSettings = QtWidgets.QPushButton(self.tab_2)
+ self.UILoadOpticsSettings.setStyleSheet("background-color: rgb(255, 255, 127);")
+ self.UILoadOpticsSettings.setObjectName("UILoadOpticsSettings")
+ self.verticalLayout_2.addWidget(self.UILoadOpticsSettings)
self.label_3 = QtWidgets.QLabel(self.tab_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
@@ -332,8 +352,8 @@ class Ui_ElegantGUI(object):
self.UIDeleteDump = QtWidgets.QPushButton(self.tab_2)
self.UIDeleteDump.setObjectName("UIDeleteDump")
self.verticalLayout_2.addWidget(self.UIDeleteDump)
- spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
- self.verticalLayout_2.addItem(spacerItem2)
+ spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+ self.verticalLayout_2.addItem(spacerItem3)
self.horizontalLayout_2.addLayout(self.verticalLayout_2)
self.verticalLayout_6 = QtWidgets.QVBoxLayout()
self.verticalLayout_6.setObjectName("verticalLayout_6")
@@ -377,8 +397,8 @@ class Ui_ElegantGUI(object):
self.UIAddSectionDump = QtWidgets.QPushButton(self.tab_2)
self.UIAddSectionDump.setObjectName("UIAddSectionDump")
self.verticalLayout_6.addWidget(self.UIAddSectionDump)
- spacerItem3 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
- self.verticalLayout_6.addItem(spacerItem3)
+ spacerItem4 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
+ self.verticalLayout_6.addItem(spacerItem4)
self.horizontalLayout_2.addLayout(self.verticalLayout_6)
self.TabMaster.addTab(self.tab_2, "")
self.verticalLayout_5.addWidget(self.TabMaster)
@@ -521,7 +541,7 @@ class Ui_ElegantGUI(object):
self.menubar.addAction(self.menuHelp.menuAction())
self.retranslateUi(ElegantGUI)
- self.TabMaster.setCurrentIndex(0)
+ self.TabMaster.setCurrentIndex(2)
self.actionQuit.triggered.connect(ElegantGUI.close) # type: ignore
QtCore.QMetaObject.connectSlotsByName(ElegantGUI)
@@ -535,9 +555,11 @@ class Ui_ElegantGUI(object):
self.UITrackStart.setText(_translate("ElegantGUI", "SINLH01"))
self.label_2.setText(_translate("ElegantGUI", "End-Section"))
self.label.setText(_translate("ElegantGUI", "Start-Section"))
- self.UITrackEnd.setText(_translate("ElegantGUI", "SATBD02"))
+ self.UITrackEnd.setText(_translate("ElegantGUI", "SINDI02"))
self.label_7.setText(_translate("ElegantGUI", "Input Distribution"))
self.UITrackInput.setText(_translate("ElegantGUI", "not yet defined"))
+ self.label_9.setText(_translate("ElegantGUI", "Skip"))
+ self.UISkipParticles.setText(_translate("ElegantGUI", "10"))
self.UITrackDoLSC.setText(_translate("ElegantGUI", "Include Longitudinal Space Charge"))
self.UITrackDoCSR.setText(_translate("ElegantGUI", "Include Coherent Synchrotron Radiation"))
self.UITrackAutoAlign.setText(_translate("ElegantGUI", "Align Beam After Each Chicane"))
@@ -571,6 +593,7 @@ class Ui_ElegantGUI(object):
self.TabMaster.setTabText(self.TabMaster.indexOf(self.tab_8), _translate("ElegantGUI", "Distribution"))
self.UILoadReference.setText(_translate("ElegantGUI", "Load Settings"))
self.UISaveReference.setText(_translate("ElegantGUI", "Save Settings"))
+ self.UILoadOpticsSettings.setText(_translate("ElegantGUI", "Import OpticsTool Settings"))
self.label_3.setText(_translate("ElegantGUI", "RF Settings"))
item = self.UIRFSettings.verticalHeaderItem(0)
item.setText(_translate("ElegantGUI", "New Row"))
diff --git a/ui/ElegantToolsGui.ui b/ui/ElegantToolsGui.ui
index c4f0fdb..87f0f75 100644
--- a/ui/ElegantToolsGui.ui
+++ b/ui/ElegantToolsGui.ui
@@ -24,13 +24,13 @@
- 0
+ 2
Track
-
+
-
@@ -135,7 +135,7 @@
- SATBD02
+ SINDI02
@@ -149,14 +149,51 @@
-
-
-
- not yet defined
-
-
- true
-
-
+
+
-
+
+
+ not yet defined
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Skip
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ 10
+
+
+
+
-
@@ -469,6 +506,16 @@
+ -
+
+
+ background-color: rgb(255, 255, 127);
+
+
+ Import OpticsTool Settings
+
+
+
-