Initial test of matching

This commit is contained in:
2025-05-15 17:49:45 +02:00
parent f67d4ec349
commit c50448113a
8 changed files with 247 additions and 476 deletions

View File

@@ -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: