Initial test of matching
This commit is contained in:
70
model.py
70
model.py
@@ -172,8 +172,12 @@ class Model:
|
||||
config,ID, status = self.parent.reference.getMatchingPoint()
|
||||
if status is False:
|
||||
return
|
||||
|
||||
self.setBranch(config['Destination'])
|
||||
sequence = config['Sequence']
|
||||
if isinstance(sequence,list):
|
||||
length = [self.om.getSection(ele).LengthRes for ele in sequence]
|
||||
sequence =self.madx.buildSequence(sequence,length,'seqcompund')
|
||||
|
||||
if config['Reference'] is None:
|
||||
start='#s'
|
||||
end='#e'
|
||||
@@ -185,26 +189,31 @@ class Model:
|
||||
end = config['End']+'$end'
|
||||
itwiss = {converttwiss[key.lower()]:config['Reference']['Twiss'][key] for key in config['Reference']['Twiss'].keys()}
|
||||
var={}
|
||||
random = self.parent.UIMatchRandom.isChecked()
|
||||
for key in config['Variable'].keys():
|
||||
key0=key.replace('-','.').lower()
|
||||
if 'mqua' or 'mqsk' in key0:
|
||||
if 'mqua' in key0 or 'mqsk' in key0:
|
||||
key0+='.k1'
|
||||
elif 'msex' in key0:
|
||||
key0+='.k2'
|
||||
elif 'mkac' in key0 or 'mkdc' in key0:
|
||||
key0+='.cory'
|
||||
|
||||
var[key0]=config['Variable'][key]
|
||||
conf0={}
|
||||
for key in config['Target'].keys():
|
||||
sconf = config['Target'][key]
|
||||
conf0[key] = {converttwiss[key0.lower()]:sconf[key0] for key0 in sconf.keys()}
|
||||
|
||||
|
||||
res,twiss,err=self.madx.match(sequence=config['Sequence'], start=start, end=end,
|
||||
init=itwiss, var=var, const=conf0,
|
||||
preset=False,random=False)
|
||||
if 'File' in config['Target'].keys():
|
||||
twiss,err=self.madx.callScript(config['Target']['File']['File'],sequence,start,end)
|
||||
else:
|
||||
for key in config['Target'].keys():
|
||||
sconf = config['Target'][key]
|
||||
conf0[key] = {converttwiss[key0.lower()]:sconf[key0] for key0 in sconf.keys()}
|
||||
res,twiss,err=self.madx.match(sequence=sequence, start=start, end=end,
|
||||
init=itwiss, var=var, const=conf0,
|
||||
preset=False,random=random)
|
||||
if not config['Save'] == False:
|
||||
self.parent.reference.saveTwiss(ID,twiss)
|
||||
self.parent.reference.updateMatchPoint(ID,err)
|
||||
self.updateModelFromMatching(res)
|
||||
#self.updateModelFromMatching(res)
|
||||
|
||||
energy = self.calcEnergyProfile(twiss)
|
||||
self.parent.plot.newData(twiss,energy)
|
||||
@@ -258,27 +267,13 @@ class Model:
|
||||
for key in twiss_in.keys():
|
||||
if converttwiss[key] in twiss0.keys():
|
||||
self.startTwiss[key+'0'] = twiss0[converttwiss[key]]
|
||||
self.madx.updateVariables(twiss0)
|
||||
twiss = self.madx.track('swissfel',start+'$START',end+'$END')
|
||||
# self.madx.updateVariables(twiss0)
|
||||
twiss = self.madx.track('swissfel',start+'$START',end+'$END',twiss0)
|
||||
energy = self.calcEnergyProfile(twiss)
|
||||
if plot:
|
||||
self.parent.plot.newData(twiss,energy)
|
||||
|
||||
def calcEnergyProfile(self,twiss):
|
||||
|
||||
energy = np.array([0. for i in range(len(twiss.betx))])
|
||||
e0 = 0.
|
||||
for i, name in enumerate(twiss.name):
|
||||
if len(name) > 15:
|
||||
elename = name[0:15]
|
||||
ele = self.om.getElement(elename)
|
||||
if not ele is None:
|
||||
erg= self.om.EnergyAt(ele)
|
||||
if e0 == 0.:
|
||||
energy[:i]+=erg[0]*1e-6
|
||||
e0 = (erg[0]+erg[1])*1e-6
|
||||
energy[i]=e0
|
||||
return energy
|
||||
|
||||
|
||||
def doBackTrack(self,start=None,end=None,twiss0=None):
|
||||
@@ -289,9 +284,9 @@ class Model:
|
||||
twiss0['dpy'] = -twiss0['dpy']
|
||||
twiss0['px'] = -twiss0['px']
|
||||
twiss0['py'] = -twiss0['py']
|
||||
self.madx.updateVariables(twiss0)
|
||||
print(start,end)
|
||||
twiss = self.madx.track('invswissfel', start, end+'$START')
|
||||
# self.madx.updateVariables(twiss0)
|
||||
# print(start,end)
|
||||
twiss = self.madx.track('invswissfel', start, end+'$START',twiss0)
|
||||
twiss1 = {}
|
||||
twiss1['betx'] = twiss.betx[-1] # revert trajectory back
|
||||
twiss1['bety'] = twiss.bety[-1]
|
||||
@@ -307,6 +302,21 @@ class Model:
|
||||
twiss1['py'] = -twiss.py[-1]
|
||||
return twiss1
|
||||
|
||||
def calcEnergyProfile(self,twiss):
|
||||
energy = np.array([0. for i in range(len(twiss.betx))])
|
||||
e0 = 0.
|
||||
for i, name in enumerate(twiss.name):
|
||||
if len(name) > 15:
|
||||
elename = name[0:15]
|
||||
ele = self.om.getElement(elename)
|
||||
if not ele is None:
|
||||
erg= self.om.EnergyAt(ele)
|
||||
if e0 == 0.:
|
||||
energy[:i]+=erg[0]*1e-6
|
||||
e0 = (erg[0]+erg[1])*1e-6
|
||||
energy[i]=e0
|
||||
return energy
|
||||
|
||||
def setBranch(self,end):
|
||||
destination = 'ARAMIS'
|
||||
if 'SPO' in end:
|
||||
|
||||
Reference in New Issue
Block a user