63 lines
2.4 KiB
Python
63 lines
2.4 KiB
Python
import re
|
|
from onlinemodel.madx import CMadX
|
|
|
|
|
|
class MatchMaker:
|
|
def __init__(self, scriptlocation = None):
|
|
self.scriptdir = scriptlocation
|
|
self.scriptInjector = 'matchInjector.madx'
|
|
self.scriptAramis = 'matchAramis.madx'
|
|
self.scriptAthos = 'matchAthos.madx'
|
|
|
|
|
|
|
|
def match(self, om, Injector=True, Athos = True, Aramis = False):
|
|
|
|
if Athos:
|
|
target = 'SATBD01'
|
|
else:
|
|
target = 'SARUN20'
|
|
madx = CMadX()
|
|
madx.E0 = 2000
|
|
om.setBranch(target, 'SINLH01')
|
|
madx.updateLattice(om, target) # write lattice
|
|
madx.commonHeader('SwissFEL', '#s/#e', None) # sets header
|
|
madx.madx.call(self.scriptdir + '/initTwiss.madx')
|
|
if Injector:
|
|
madx.madx.call(self.scriptdir+'/matchInjector.madx', chdir=True)
|
|
self.updateOnlineModel(om,madx.madx, 's[i1].*k1|s20sy01.*k1')
|
|
if Athos:
|
|
madx.madx.call(self.scriptdir+'/matchAthos.madx', chdir=True)
|
|
self.updateOnlineModel(om, madx.madx, 'sat.*k1|s20sy02.*m[kq]')
|
|
if Aramis:
|
|
if target=='SATBD01':
|
|
target = 'SARUN20'
|
|
om.setBranch(target, 'SINLH01')
|
|
madx.updateLattice(om, target) # write lattice
|
|
madx.commonHeader('SwissFEL', '#s/#e', None) # sets header
|
|
madx.madx.call(self.scriptdir + '/initTwiss.madx')
|
|
madx.madx.call(self.scriptdir + '/matchAramis.madx', chdir=True)
|
|
|
|
def updateOnlineModel(self,om,madx,filter):
|
|
reg = re.compile(filter)
|
|
for var in list(madx.globals):
|
|
if reg.match(var):
|
|
if '.k1' in var:
|
|
element = var.split('.k1')[0]
|
|
ele = om.getElement(element)
|
|
if not ele is None:
|
|
ele.k1 = madx.globals.get(var,0)
|
|
print('... Updating', ele.Name, 'to k1=',ele.k1)
|
|
else:
|
|
print('### Unidentified element', element)
|
|
elif '.cory' in var:
|
|
element = var.split('.cory')[0]
|
|
ele = om.getElement(element)
|
|
if not ele is None:
|
|
ele.design_kick = madx.globals.get(var, 0)
|
|
print('... Updating', ele.Name, 'to design_kick=', ele.design_kick)
|
|
else:
|
|
print('### Unidentified element', element)
|
|
|
|
|