1 Commits

8 changed files with 283 additions and 147 deletions
+57 -31
View File
@@ -4,7 +4,16 @@
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="0efcf7ff-c00b-4b53-9800-80ad65aeaff9" name="Changes" comment="Fixed to filter for non-existing elements when initializing from a setting file" />
<list default="true" id="0efcf7ff-c00b-4b53-9800-80ad65aeaff9" name="Changes" comment="Migrating repo">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ElegantTools.py" beforeDir="false" afterPath="$PROJECT_DIR$/ElegantTools.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/distribution.py" beforeDir="false" afterPath="$PROJECT_DIR$/distribution.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/model.py" beforeDir="false" afterPath="$PROJECT_DIR$/model.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/plot.py" beforeDir="false" afterPath="$PROJECT_DIR$/plot.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/track.py" beforeDir="false" afterPath="$PROJECT_DIR$/track.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ui/ElegantToolsGui.py" beforeDir="false" afterPath="$PROJECT_DIR$/ui/ElegantToolsGui.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ui/ElegantToolsGui.ui" beforeDir="false" afterPath="$PROJECT_DIR$/ui/ElegantToolsGui.ui" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
@@ -18,6 +27,11 @@
</option>
</component>
<component name="Git.Settings">
<option name="RECENT_BRANCH_BY_REPOSITORY">
<map>
<entry key="$PROJECT_DIR$" value="dev" />
</map>
</option>
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="McpProjectServerCommands">
@@ -32,31 +46,31 @@
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"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"
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;ModuleVcsDetector.initialDetectionPerformed&quot;: &quot;true&quot;,
&quot;Python.ElegantTools.executor&quot;: &quot;Run&quot;,
&quot;RunOnceActivity.MCP Project settings loaded&quot;: &quot;true&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252&quot;: &quot;true&quot;,
&quot;RunOnceActivity.git.unshallow&quot;: &quot;true&quot;,
&quot;RunOnceActivity.typescript.service.memoryLimit.init&quot;: &quot;true&quot;,
&quot;SHELLCHECK.PATH&quot;: &quot;I do mind&quot;,
&quot;ai.playground.ignore.import.keys.banner.in.settings&quot;: &quot;true&quot;,
&quot;com.intellij.ml.llm.matterhorn.ej.ui.settings.DefaultModelSelectionForGA.v1&quot;: &quot;true&quot;,
&quot;git-widget-placeholder&quot;: &quot;main&quot;,
&quot;junie.onboarding.icon.badge.shown&quot;: &quot;true&quot;,
&quot;last_opened_file_path&quot;: &quot;/home/reiche/Codes/Python/Modelling/ElegantTools&quot;,
&quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
&quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
&quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
&quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable&quot;,
&quot;to.speed.mode.migration.done&quot;: &quot;true&quot;,
&quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
}
}]]></component>
}</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/Runs" />
@@ -101,8 +115,8 @@
<component name="SharedIndexes">
<attachedChunks>
<set>
<option value="bundled-js-predefined-d6986cc7102b-9b0f141eb926-JavaScript-PY-253.29346.308" />
<option value="bundled-python-sdk-ca5e2b39c7df-6e1f45a539f7-com.jetbrains.pycharm.pro.sharedIndexes.bundled-PY-253.29346.308" />
<option value="bundled-js-predefined-d6986cc7102b-9b0f141eb926-JavaScript-PY-253.31033.139" />
<option value="bundled-python-sdk-2653e85de345-6d6dccd035ac-com.jetbrains.pycharm.pro.sharedIndexes.bundled-PY-253.31033.139" />
</set>
</attachedChunks>
</component>
@@ -117,7 +131,10 @@
<workItem from="1753184384816" duration="49046000" />
<workItem from="1753433608932" duration="2368000" />
<workItem from="1753700276583" duration="1239000" />
<workItem from="1769421276584" duration="2171000" />
<workItem from="1769421276584" duration="3404000" />
<workItem from="1772625641497" duration="2357000" />
<workItem from="1772704898677" duration="3651000" />
<workItem from="1772711572989" duration="8172000" />
</task>
<task id="LOCAL-00001" summary="Initial Commit">
<option name="closed" value="true" />
@@ -191,7 +208,15 @@
<option name="project" value="LOCAL" />
<updated>1769421900912</updated>
</task>
<option name="localTasksCounter" value="10" />
<task id="LOCAL-00010" summary="Migrating repo">
<option name="closed" value="true" />
<created>1769423688133</created>
<option name="number" value="00010" />
<option name="presentableId" value="LOCAL-00010" />
<option name="project" value="LOCAL" />
<updated>1769423688133</updated>
</task>
<option name="localTasksCounter" value="11" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
@@ -213,9 +238,10 @@
<MESSAGE value="Plotting of elegant results implemented" />
<MESSAGE value="First release of ElegantTools" />
<MESSAGE value="Fixed to filter for non-existing elements when initializing from a setting file" />
<option name="LAST_COMMIT_MESSAGE" value="Fixed to filter for non-existing elements when initializing from a setting file" />
<MESSAGE value="Migrating repo" />
<option name="LAST_COMMIT_MESSAGE" value="Migrating repo" />
</component>
<component name="com.intellij.coverage.CoverageDataManagerImpl">
<SUITE FILE_PATH="coverage/ElegantTools$ElegantTools.coverage" NAME="ElegantTools Coverage Results" MODIFIED="1769421815378" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/ElegantTools$ElegantTools.coverage" NAME="ElegantTools Coverage Results" MODIFIED="1772718092788" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
</component>
</project>
+15 -1
View File
@@ -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
+78 -59
View File
@@ -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)
+21 -15
View File
@@ -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'])
+4 -4
View File
@@ -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
+13 -12
View File
@@ -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')
+37 -14
View File
@@ -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"))
+58 -11
View File
@@ -24,13 +24,13 @@
</sizepolicy>
</property>
<property name="currentIndex">
<number>0</number>
<number>2</number>
</property>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>Track</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout">
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<widget class="QWidget" name="widget_2" native="true">
<property name="sizePolicy">
@@ -135,7 +135,7 @@
</sizepolicy>
</property>
<property name="text">
<string>SATBD02</string>
<string>SINDI02</string>
</property>
</widget>
</item>
@@ -149,14 +149,51 @@
</widget>
</item>
<item>
<widget class="QLineEdit" name="UITrackInput">
<property name="text">
<string>not yet defined</string>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="UITrackInput">
<property name="text">
<string>not yet defined</string>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_9">
<property name="text">
<string>Skip</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="UISkipParticles">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>10</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="UITrackDoLSC">
@@ -469,6 +506,16 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="UILoadOpticsSettings">
<property name="styleSheet">
<string notr="true">background-color: rgb(255, 255, 127);</string>
</property>
<property name="text">
<string>Import OpticsTool Settings</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="sizePolicy">