Preparing a full release with new lattice 11.0.2

This commit is contained in:
2025-10-08 09:29:04 +02:00
parent 6aefaa7096
commit a5286c4ded
2 changed files with 196 additions and 133 deletions

View File

@@ -44,11 +44,15 @@ class AssemblyList:
soff = tab['S Offset'][i]
part3d = tab['3D-Part'][i]
type = tab['Type'][i]
if 'Lateral Offset x,y' in tab.keys():
offset = tab['Lateral Offset x,y'][i]
else:
offset=''
if name in self.assemblylist.keys():
print('*** Error: Duplicated generation of assembly element:',name,'for parent',parent)
else:
self.assemblylist[name] = 1
self.assembly[parent].append({'Name':name,'soff':soff,'3DPart':part3d,'Type':type})
self.assembly[parent].append({'Name':name,'soff':soff,'3DPart':part3d,'Type':type,'toff':offset})
def generateLayout(self,proto):

View File

@@ -303,11 +303,15 @@ import math
# 13) add skew quad in SATCL01 already for phase planned.
# 14) Add permanent quad in dump for phase planned
# Layout 11.0.2
# Refinement on SF+ Lattice
# Marking new elements with the type SFPlus- in the description
class SwissFEL:
def __init__(self,alt=0):
self.alt=alt
self.Version='11.0.1'
self.Version='11.0.2'
def Types(self,TM):
# type definitions for the SwissFEL lattice
@@ -315,10 +319,12 @@ class SwissFEL:
#define common Undulator
indict={'Type':'Undulator','Length':4,'K':1.2,'ku':4*math.asin(1)/0.015,'cor':0,'Baugruppe':'U15'}
TM.define('U15',indict)
indict={'Type':'Undulator','Length':4,'K':1.2,'ku':4*math.asin(1)/0.015,'cor':0,'Baugruppe':'U-Afterburner'}
TM.define('UAfterburner',indict)
indict={'Type':'Undulator','Length':4,'K':1.2,'ku':4*math.asin(1)/0.012,'cor':0,'Baugruppe':'SFPlus-U12-AB'}
TM.define('U12-AB',indict)
indict={'Type':'Undulator','Length':2,'K':1.5,'ku':4*math.asin(1)/0.04,'corx':0,'cory':0,'Baugruppe':'UE38'}
TM.define('UE38',indict)
TM.define('UE38',indict)
indict={'Type':'Undulator','Length':2,'K':1.5,'ku':4*math.asin(1)/0.04,'corx':0,'cory':0,'Baugruppe':'SFPlus-SUE38'}
TM.define('SUE38',indict)
indict={'Type':'Undulator','Length':0.06,'Tag':'UPHS','Baugruppe':'U15-PS'}
TM.define('PSU15',indict)
indict={'Type':'Undulator','Length':0.20,'Tag':'UDLY','Baugruppe':'UE38-DELAY'}
@@ -329,6 +335,8 @@ class SwissFEL:
TM.define('U50',indict)
indict={'Type':'Undulator','Length':1,'K':2*0,'ku':4*math.asin(1)/0.025,'cor':0,'Baugruppe':'U25'}
TM.define('U25',indict)
indict={'Type':'Undulator','Length':1,'K':2*0,'ku':4*math.asin(1)/1,'cor':0,'Tag':'UMBC','Baugruppe':'SFPlus-UBunchChicnae'}
TM.define('UMBC',indict)
# QFD Quadrupole and variants
indict={'Type':'Quadrupole','Length':0.15,'LengthRes':0.25,'corx':0,'cory':0,'Baugruppe':'QFD'}
@@ -390,9 +398,9 @@ class SwissFEL:
TM.define('QPM2',indict)
# permanent quadrupoles for the dump
indict={'Type':'Quadrupole','Length':0.25,'LengthRes':0.35,'Tag':'MQUP','Baugruppe':'QFDump'}
indict={'Type':'Quadrupole','Length':0.25,'LengthRes':0.35,'Tag':'MQUP','Baugruppe':'SFPlus-QFDump'}
TM.define('QFDUMP-1',indict)
indict={'Type':'Quadrupole','Length':0.25,'LengthRes':0.35,'Tilt':math.asin(1),'Tag':'MQUP','Baugruppe':'QFDump'}
indict={'Type':'Quadrupole','Length':0.25,'LengthRes':0.35,'Tilt':math.asin(1),'Tag':'MQUP','Baugruppe':'SFPlus-QFDump'}
TM.define('QFDUMP-2',indict)
# sextupoles
@@ -500,7 +508,7 @@ class SwissFEL:
TM.define('TW Cav C-Band',indict)
indict={'Type':'RF','Length': 4.0830,'LengthRes':4.15,'Band':'S','Baugruppe':'S-BAND-ACC'}
TM.define('TW Cav S-Band',indict)
indict={'Type':'RF','Length': 0.3,'LengthRes':0.35,'Band':'S','Baugruppe':'S-BAND-BUNCHER'}
indict={'Type':'RF','Length': 0.3,'LengthRes':0.35,'Band':'S','Baugruppe':'SFPlus-S-BAND-BUNCHER'}
TM.define('TW Cav S-Band Buncher',indict)
indict={'Type':'RF','Length': 0.75,'LengthRes':0.965,'Band':'X','Baugruppe':'X-BAND-ACC'}
TM.define('TW Cav X-Band',indict)
@@ -611,10 +619,12 @@ class SwissFEL:
TM.define('DFCP',indict)
# define x-ray diagnostic
indict={'Type':'Photonics','Length':0.15,'Sx':1,'Sy':1,'Tag':'PPRM','Baugruppe':'PPRM'}
indict={'Type':'Photonics','Length':0.15,'Sx':1,'Sy':1,'Tag':'PPRM','Baugruppe':'SFPlus-PPRM'}
TM.define('PPRM-C38',indict)
indict={'Type':'Photonics','Length':0.15,'Tag':'PCRY','Baugruppe':'BRAGG-CRYSTAL'}
indict={'Type':'Photonics','Length':0.15,'Tag':'PCRY','Baugruppe':'SFPlus-BRAGG-CRYSTAL'}
TM.define('PCRY-C38',indict)
indict = {'Type': 'Diagnostic', 'Length': 0.1, 'Tag': 'DUVS', 'Baugruppe': 'SFPlus-UV-Diagnostics'}
TM.define('UVDiag', indict)
@@ -698,7 +708,8 @@ class SwissFEL:
TM.define('SHA-P3',indict)
indict={'Type':'Vacuum','Length':1.25,'Tag':'SDMP','Baugruppe':'BEAM-DUMP-P3'}
TM.define('Beam-Dump-P3',indict)
indict = {'Type': 'Diagnostic', 'Length': 0.0, 'Tag': 'DSCR', 'Baugruppe': 'DSCR-P3-FC'}
TM.define('DSCR-P3FC', indict)
def Lines(self,TM):
# defines common lines in the lattice
@@ -710,13 +721,16 @@ class SwissFEL:
a1cor={'Element':'SFU-US','sRef':0.105+0.026,'Ref':'absolute','index':10,'Option':{'MADthin':1,'MADshift':-0.02}}
a1={'Element':'QFU','sRef':0.115,'Ref':'absolute','index':20}
a2={'Element':'U15','sRef':0.0575,'Ref':'relative','index':30}
a2ab = {'Element': 'U12-AB', 'sRef': 0.0575, 'Ref': 'relative', 'index': 30}
a3cor={'Element':'SFU-DS','sRef':0.0475-0.026,'Ref':'relative','index':40,'Option':{'MADthin':1,'MADshift':-0.02}}
a3={'Element':'QFU','sRef':4.27,'Ref':'absolute','index':50}
a4={'Element':'PSU15','sRef':0.035,'Ref':'relative','index':60}
a5={'Element':'DBPM-C8','sRef':0.078,'Ref':'relative','index':70}
a6={'Element':'QFF-UN','sRef':0.06,'Ref':'relative','index':80}
seq=[a0,a1cor,a1,a2,a3cor,a3,a4,a5,a6]
TM.define('U15-Cell',seq)
TM.define('U15-Cell',seq)
seq = [a0, a1cor, a1, a2ab, a3cor, a3, a4, a5, a6]
TM.define('U12-Cell-AB', seq)
a5alt={'Element':'DBPM-C8','sRef':0.173,'Ref':'relative','index':70}
seq=[a0,a1cor,a1,a2,a3cor,a3,a5alt,a6]
TM.define('U15-Cell-Last',seq)
@@ -734,6 +748,7 @@ class SwissFEL:
a1={'Element':'QFUE','sRef':0.035,'Ref':'relative','index':10}
a2={'Element':'SFUE-US','sRef':0.0095,'Ref':'relative','index':20}
a3={'Element':'UE38','sRef':0.038,'Ref':'relative','index':30}
a3sc = {'Element': 'SUE38', 'sRef': 0.038, 'Ref': 'relative', 'index': 30}
a4={'Element':'SFUE-DS','sRef':0.038,'Ref':'relative','index':40}
a5={'Element':'QFUE','sRef':0.0095,'Ref':'relative','index':50}
a6={'Element':'PSUE38','sRef':0.035+0.01,'Ref':'relative','index':60}
@@ -741,7 +756,10 @@ class SwissFEL:
a8={'Element':'QFF-UN','sRef':0.06025-0.00775+0.005,'Ref':'relative','index':80}
seq=[a0,a1,a2,a3,a4,a5,a6,a7,a8]
TM.define('UE38-Cell',seq) # normal line
TM.define('UE38-Cell',seq)
seq = [a0, a1, a2, a3sc, a4, a5, a6, a7, a8]
TM.define('SUE38-Cell', seq)
# normal line
a7alt={'Element':'DBPM-C5','sRef':0.27+0.00775,'Ref':'relative','index':70}
seq=[a0,a1,a2,a3,a4,a5,a7alt,a8]
TM.define('UE38-Cell-Last',seq) # line without phase shifter
@@ -879,31 +897,60 @@ class SwissFEL:
Lsec=3.6039
angle=0 # default angle
EG01=LineContainer('EG01',Lsec)
EG01.append(TM.generate('WFB',10),0,'absolute')
EG01.append(TM.generate('GUN',100),0.1,'absolute')
EG01.append(TM.generate('SFB',120,{'Overlap':1}),0.265,'absolute')
EG01.append(TM.generate('WFG',130,{'Overlap':1}),0.27,'absolute')
EG01.append(TM.generate('QFCOR',140,{'Overlap':1}),0.32,'absolute')
EG01.append(TM.generate('QFCORS',150,{'Overlap':1}),0.32,'absolute')
EG01.append(TM.generate('SFB',160,{'Overlap':1}),0.054,'relative')
EG01.append(TM.generate('TW Cav S-Band Buncher',170),0.05,'relative')
EG01.append(TM.generate('SFDD',180),0.07,'relative')
EG01.append(TM.generate('GUN-Laserport',185),0.2397-0.0722-0.085,'relative')
EG01.append(TM.generate('DFCP',185),0.0,'relative')
EG01.append(TM.generate('DSCR-LE38',190),0.1445-0.126,'relative')
EG01.append(TM.generate('SFDD',200),1.3725+0.0615-0.06+0.1445,'absolute')
EG01.append(TM.generate('DICT-C38-GUN',210),0.07+0.0375-0.064,'relative')
EG01.append(TM.generate('DWCM-C38', 195), 0.01, 'relative')
EG01.append(TM.generate('QFC',212),0.013-0.0547,'relative')
EG01.append(TM.generate('DICT-C38',215),0.4-0.055+0.062-0.0845-0.223+0.0547,'relative')
EG01.append(TM.generate('SFD1',220),0.6894-0.45-0.0425-0.0795,'relative')
EG01.append(TM.generate('SHA',300, {'angle':angle,'design_angle':30,'e1':0.5,'e2':0.5,'branch':True}),0.035,'relative')
EG01.append(TM.generate('MKBR',301),0.0,'relative') # Marker to indicate a branching to Injector beam dump
# EG01.append(TM.generate('QFC',310),0.123,'relative')
EG01.append(TM.generate('QFCS',320),0.05+0.223,'relative')
EG01.append(TM.generate('DHVS',330),0.06,'relative')
EG01.append(TM.generate('DBPM-C16',340),0.2275-0.0885+0.041,'relative')
EG01.append(TM.generate('DSCR-LE16',350),0.0455+0.013+0.0885-0.067,'relative')
if self.alt == 2:
EG01.append(TM.generate('WFB',10),0,'absolute')
EG01.append(TM.generate('GUN',100),0.1,'absolute')
EG01.append(TM.generate('SFB',120,{'Overlap':1}),0.265,'absolute')
EG01.append(TM.generate('WFG',130,{'Overlap':1}),0.27,'absolute')
EG01.append(TM.generate('QFCOR',140,{'Overlap':1}),0.32,'absolute')
EG01.append(TM.generate('QFCORS',150,{'Overlap':1}),0.32,'absolute')
EG01.append(TM.generate('SFB',160,{'Overlap':1}),0.054,'relative')
EG01.append(TM.generate('TW Cav S-Band Buncher',170),0.05,'relative')
EG01.append(TM.generate('SFDD',180),0.07,'relative')
EG01.append(TM.generate('GUN-Laserport',185),0.2397-0.0722-0.085,'relative')
EG01.append(TM.generate('DFCP',185),0.0,'relative')
EG01.append(TM.generate('DSCR-LE38',190),0.1445-0.126,'relative')
EG01.append(TM.generate('SFDD',200),1.3725+0.0615-0.06+0.1445,'absolute')
EG01.append(TM.generate('DICT-C38-GUN',210),0.07+0.0375-0.064,'relative')
EG01.append(TM.generate('DWCM-C38', 195), 0.01, 'relative')
EG01.append(TM.generate('QFC',212),0.013-0.0547,'relative')
EG01.append(TM.generate('DICT-C38',215),0.4-0.055+0.062-0.0845-0.223+0.0547,'relative')
EG01.append(TM.generate('SFD1',220),0.6894-0.45-0.0425-0.0795,'relative')
EG01.append(TM.generate('SHA',300, {'angle':angle,'design_angle':30,'e1':0.5,'e2':0.5,'branch':True}),0.035,'relative')
EG01.append(TM.generate('MKBR',301),0.0,'relative') # Marker to indicate a branching to Injector beam dump
# EG01.append(TM.generate('QFC',310),0.123,'relative')
EG01.append(TM.generate('QFCS',320),0.05+0.223,'relative')
EG01.append(TM.generate('DHVS',330),0.06,'relative')
EG01.append(TM.generate('DBPM-C16',340),0.2275-0.0885+0.041,'relative')
EG01.append(TM.generate('DSCR-LE16',350),0.0455+0.013+0.0885-0.067,'relative')
else:
EG01.append(TM.generate('WFB', 10), 0, 'absolute')
EG01.append(TM.generate('GUN', 100), 0.1, 'absolute')
EG01.append(TM.generate('SFB', 120, {'Overlap': 1}), 0.265, 'absolute')
EG01.append(TM.generate('WFG', 130, {'Overlap': 1}), 0.27, 'absolute')
EG01.append(TM.generate('QFCOR', 140, {'Overlap': 1}), 0.32, 'absolute')
EG01.append(TM.generate('QFCORS', 150, {'Overlap': 1}), 0.32, 'absolute')
EG01.append(TM.generate('SFB', 160, {'Overlap': 1}), 0.054, 'relative')
EG01.append(TM.generate('DWCM-C38', 170), 0.143, 'relative')
EG01.append(TM.generate('SFDD', 180), 0.07 - 0.0002, 'relative')
EG01.append(TM.generate('GUN-Laserport', 185), 0.2397, 'relative')
EG01.append(TM.generate('DFCP', 185), 0.0, 'relative')
EG01.append(TM.generate('DSCR-LE38', 190), 0.1445 - 0.126, 'relative')
EG01.append(TM.generate('SFDD', 200), 1.3725 + 0.0615 - 0.06 + 0.1445, 'absolute')
EG01.append(TM.generate('DICT-C38-GUN', 210), 0.07 + 0.0375 - 0.064, 'relative')
EG01.append(TM.generate('QFC', 212), 0.123 - 0.0547, 'relative')
EG01.append(TM.generate('DICT-C38', 215), 0.4 - 0.055 + 0.062 - 0.0845 - 0.223 + 0.0547, 'relative')
EG01.append(TM.generate('SFD1', 220), 0.6894 - 0.45 - 0.0425 - 0.0795, 'relative')
EG01.append(
TM.generate('SHA', 300, {'angle': angle, 'design_angle': 30, 'e1': 0.5, 'e2': 0.5, 'branch': True}),
0.035, 'relative')
EG01.append(TM.generate('MKBR', 301), 0.0,
'relative') # Marker to indicate a branching to Injector beam dump
# EG01.append(TM.generate('QFC',310),0.123,'relative')
EG01.append(TM.generate('QFCS', 320), 0.05 + 0.223, 'relative')
EG01.append(TM.generate('DHVS', 330), 0.06, 'relative')
EG01.append(TM.generate('DBPM-C16', 340), 0.2275 - 0.0885 + 0.041, 'relative')
EG01.append(TM.generate('DSCR-LE16', 350), 0.0455 + 0.013 + 0.0885 - 0.067, 'relative')
SB01=LineContainer('SB01',5-0.022)
SB01.append(TM.generate('SFDD',10),0.02,'relative')
@@ -981,19 +1028,22 @@ class SwissFEL:
BC01.append(TM.generate('DBPM-C16',100),0.987,'relative')
BC01.append(TM.generate('QFDM',110),0.098,'relative')
else:
LH01 = LineContainer('LH01',2.0)
LH01 = LineContainer('LH01',2.0-0.371)
LH01.append(TM.generate('DBAM-PS16', 10), 0.099, 'relative')
LH01.append(TM.generate('QFDM-short', 20), 0.04 + 0.026, 'relative')
LH01.append(TM.generate('DSCR-OV16', 30), 0.263, 'relative')
LH01.append(TM.generate('DSCR-OV16', 30), 0.263-0.12-0.07, 'relative')
LH01.append(TM.generate('QFDM-noCor', 40), 0.1, 'relative')
LH01.append(TM.generate('DBPM-C16', 60), 0.15, 'relative')
LH01.append(TM.generate('QFDM', 70), 0.2, 'relative')
LH01.append(TM.generate('DBPM-C16', 60), 0.15-0.061, 'relative')
LH01.append(TM.generate('QFDM', 70), 0.2-0.12, 'relative')
LH02=LineContainer('LH02',-0.1)
varC=VariableContainer(0.16,0)
LH02.append(TM.generate('LH-Laserport', 15), 0.0, 'relative')
LH02.append(TM.generate('AFL',100,{'angle':-3.0,'design_angle':-3.0,'e1':0,'e2':1,'BC':'Laser Heater'}),0.142,'relative')
LH02.append(TM.generate('AFL',200,{'angle':3.0,'design_angle':3.0,'e1':1,'e2':0,'BC':'Laser Heater'}),2,varC)
LH02.append(TM.generate('AFL',300,{'angle':3.0,'design_angle':3.0,'e1':0,'e2':1,'BC':'Laser Heater'}),0.191,'relative')
LH02.append(TM.generate('DSCR-LH16', 210), 0.08, 'relative')
LH02.append(TM.generate('DBPM-C16', 220), 0.08, 'relative')
LH02.append(TM.generate('AFL',300,{'angle':3.0,'design_angle':3.0,'e1':0,'e2':1,'BC':'Laser Heater'}),0.08,'relative')
LH02.append(TM.generate('AFL',400,{'angle':-3.0,'design_angle':-3.0,'e1':1,'e2':0,'BC':'Laser Heater'}),2,varC)
LH02.append(TM.generate('DBPM-C16', 410), 0.15, 'relative')
LH02.append(TM.generate('SFC', 420), 0, 'relative')
@@ -1019,52 +1069,28 @@ class SwissFEL:
BC01.append(TM.generate('DSCR-HR16', 105), 0.15, 'relative')
BC01.append(TM.generate('QFDM', 110), 0.098, 'relative')
if self.alt < 2:
BC02=LineContainer('BC02',-0.8226)
varC=VariableContainer(6,2.655+0.0175)
varD=VariableContainer(6,3.601+0.0175+0.306)
BC02.append(TM.generate('AFBC1',100,{'angle':-3.82,'design_angle':-3.82,'e1':0,'e2':1,'BC':'Bunch Compressor 1'}),0.,'relative')
BC02.append(TM.generate('QFBS',110),1.8,'relative')
BC02.append(TM.generate('QFB',120),0.1,'relative')
BC02.append(TM.generate('HFA',130),0.1,'relative')
BC02.append(TM.generate('DBPM-C38',140),0.1+0.0175,'relative')
BC02.append(TM.generate('AFBC1',200,{'angle':3.82,'design_angle':3.82,'e1':1,'e2':0,'BC':'Bunch Compressor 1'}),0,varC)
BC02.append(TM.generate('COL-BC-Scraper',210),0.29,'relative')
BC02.append(TM.generate('DSCR-BC120',220),0.025,'relative')
BC02.append(TM.generate('AFBC1',300,{'angle':3.82,'design_angle':3.82,'e1':0,'e2':1,'BC':'Bunch Compressor 1'}),0.325,'relative')
BC02.append(TM.generate('DSRM-VIS',310),0.846+0.306,'relative')
BC02.append(TM.generate('DBPM-C38',320),0,varD)
BC02.append(TM.generate('HFA',330),0.1+0.0175,'relative')
BC02.append(TM.generate('QFB',340),0.1,'relative')
BC02.append(TM.generate('QFAS',350),0.09,'relative')
BC02.append(TM.generate('DALA',360),1.214-0.0385,'relative')
BC02.append(TM.generate('AFBC1',400,{'angle':-3.82,'design_angle':-3.82,'e1':1,'e2':0,'BC':'Bunch Compressor 1'}),1.56-1.214+0.0385-0.037,'relative')
BC02.append(TM.generate('DBCM-THZ',410),0.4274,'relative')
else:
# adding laser incoupling port and two screens.
BC02=LineContainer('BC02',-0.8226)
BC02.append(TM.generate('BC-Laserport',10),0.0,'relative')
varC=VariableContainer(6,2.655+0.0175)
varD=VariableContainer(6,3.601+0.0175+0.306)
BC02.append(TM.generate('AFBC1',100,{'angle':-3.82,'design_angle':-3.82,'e1':0,'e2':1,'BC':'Bunch Compressor 1'}),0.1,'relative')
BC02.append(TM.generate('DSCR-OV16', 105), 0.2, 'relative')
BC02.append(TM.generate('DSCR-OV16', 108), 1.2, 'relative')
BC02.append(TM.generate('QFBS',110),0.4-0.137-0.137,'relative')
BC02.append(TM.generate('QFB',120),0.1,'relative')
BC02.append(TM.generate('HFA',130),0.1,'relative')
BC02.append(TM.generate('DBPM-C38',140),0.1+0.0175,'relative')
BC02.append(TM.generate('AFBC1',200,{'angle':3.82,'design_angle':3.82,'e1':1,'e2':0,'BC':'Bunch Compressor 1'}),0,varC)
BC02.append(TM.generate('COL-BC-Scraper',210),0.29,'relative')
BC02.append(TM.generate('DSCR-BC120',220),0.025,'relative')
BC02.append(TM.generate('AFBC1',300,{'angle':3.82,'design_angle':3.82,'e1':0,'e2':1,'BC':'Bunch Compressor 1'}),0.325,'relative')
BC02.append(TM.generate('DSRM-VIS',310),0.846+0.306,'relative')
BC02.append(TM.generate('DBPM-C38',320),0,varD)
BC02.append(TM.generate('HFA',330),0.1+0.0175,'relative')
BC02.append(TM.generate('QFB',340),0.1,'relative')
BC02.append(TM.generate('QFAS',350),0.09,'relative')
BC02.append(TM.generate('DALA',360),1.214-0.0385,'relative')
BC02.append(TM.generate('AFBC1',400,{'angle':-3.82,'design_angle':-3.82,'e1':1,'e2':0,'BC':'Bunch Compressor 1'}),1.56-1.214+0.0385-0.037,'relative')
BC02.append(TM.generate('DBCM-THZ',410),0.4274,'relative')
BC02=LineContainer('BC02',-0.8226)
varC=VariableContainer(6,2.655+0.0175)
varD=VariableContainer(6,3.601+0.0175+0.306)
BC02.append(TM.generate('AFBC1',100,{'angle':-3.82,'design_angle':-3.82,'e1':0,'e2':1,'BC':'Bunch Compressor 1'}),0.1733,'relative')
BC02.append(TM.generate('QFBS',110),1.8,'relative')
BC02.append(TM.generate('QFB',120),0.1,'relative')
BC02.append(TM.generate('HFA',130),0.1,'relative')
BC02.append(TM.generate('DBPM-C38',140),0.1+0.0175,'relative')
BC02.append(TM.generate('AFBC1',200,{'angle':3.82,'design_angle':3.82,'e1':1,'e2':0,'BC':'Bunch Compressor 1'}),0,varC)
BC02.append(TM.generate('COL-BC-Scraper',210),0.29,'relative')
BC02.append(TM.generate('DSCR-BC120',220),0.025,'relative')
BC02.append(TM.generate('AFBC1',300,{'angle':3.82,'design_angle':3.82,'e1':0,'e2':1,'BC':'Bunch Compressor 1'}),0.325,'relative')
BC02.append(TM.generate('DSRM-VIS',310),0.846+0.306,'relative')
BC02.append(TM.generate('DBPM-C38',320),0,varD)
BC02.append(TM.generate('HFA',330),0.1+0.0175,'relative')
BC02.append(TM.generate('QFB',340),0.1,'relative')
BC02.append(TM.generate('QFAS',350),0.09,'relative')
BC02.append(TM.generate('DALA',360),1.214-0.0385,'relative')
BC02.append(TM.generate('AFBC1',400,{'angle':-3.82,'design_angle':-3.82,'e1':1,'e2':0,'BC':'Bunch Compressor 1'}),1.56-1.214+0.0385-0.037,'relative')
BC02.append(TM.generate('DBCM-THZ',410),0.4274,'relative')
# padding for moving the
if self.alt >1:
@@ -1129,14 +1155,25 @@ class SwissFEL:
angle=0
Lcell=4.9
DI01=LineContainer('DI01',Lcell)
DI01.append(TM.generate('DWSC-C16',10),0.094,'relative')
DI01.append(TM.generate('DSCR-HR16',20),0.12,'relative')
DI01.append(TM.generate('DICT-C16',25),0.0675,'relative')
DI01.append(TM.generate('QFDM-noCor',30),0.03-0.0005,'relative')
DI01.append(TM.generate('AFDL',100,{'angle':angle,'design_angle':-20,'e1':0.5,'e2':0.5,'branch':True}),0.303,'relative')
DI01.append(TM.generate('MKBR',101),0.0,'relative')
DI01.append(TM.generate('DBPM-C16',110),2.09-0.003,'relative')
DI01.append(TM.generate('QFDM',120),0.049,'relative')
if self.alt < 2:
DI01.append(TM.generate('DWSC-C16',10),0.094,'relative')
DI01.append(TM.generate('DSCR-HR16',20),0.12,'relative')
DI01.append(TM.generate('DICT-C16',25),0.0675,'relative')
DI01.append(TM.generate('QFDM-noCor',30),0.03-0.0005,'relative')
DI01.append(TM.generate('AFDL',100,{'angle':angle,'design_angle':-20,'e1':0.5,'e2':0.5,'branch':True}),0.303,'relative')
DI01.append(TM.generate('MKBR',101),0.0,'relative')
DI01.append(TM.generate('DBPM-C16',110),2.09-0.003,'relative')
DI01.append(TM.generate('QFDM',120),0.049,'relative')
else:
DI01.append(TM.generate('DWSC-C16', 10), 0.094, 'relative')
DI01.append(TM.generate('DSCR-HR16', 20), 0.12, 'relative')
DI01.append(TM.generate('DICT-C16', 25), 0.0675, 'relative')
DI01.append(TM.generate('QFDM-noCor', 30), 0.03 - 0.0005, 'relative')
DI01.append(TM.generate('AFDL', 100, {'angle': angle, 'design_angle': -20, 'e1': 0.5, 'e2': 0.5, 'branch': True}),0.303, 'relative')
DI01.append(TM.generate('MKBR', 101), 0.0, 'relative')
DI01.append(TM.generate('UMBC',105),0.5,'relative')
DI01.append(TM.generate('DBPM-C16', 110), 0.59 - 0.003, 'relative')
DI01.append(TM.generate('QFDM', 120), 0.049, 'relative')
CB03=TM.generate('CB-Lin1-Cell-WSC',0,{'Name':'CB03'})
CB04=TM.generate('CB-Lin1-Cell',0,{'Name':'CB04'})
@@ -1539,10 +1576,13 @@ class SwissFEL:
UN09 = TM.generate('U15-Cell', 0, {'Name': 'UN09'})
if (self.alt==2):
UN10=LineContainer('UN10',-0.027)
varC=VariableContainer(1.200,0)
varC=VariableContainer(0.45+0.175,0)
UN10.append(TM.generate('AFSS-OUTER',100,{'angle':-0,'design_angle':-0.22,'e1':0,'e2':1,'BC':'Aramis Self-Seeding'}),0.199+0.325,'relative')
UN10.append(TM.generate('AFSS-INNER',200,{'angle':0,'design_angle':0.22,'e1':1,'e2':0,'BC':'Aramis Self-Seeding'}),1,varC)
UN10.append(TM.generate('AFSS-INNER',300,{'angle':0,'design_angle':0.22,'e1':0,'e2':1,'BC':'Aramis Self-Seeding'}),0.16,'relative')
UN10.append(TM.generate('DBPM-C38', 210), 0.1975 + 0.16, 'relative')
UN10.append(TM.generate('PCRY-C38', 220), 0.1, 'relative')
UN10.append(TM.generate('PPRM-C38', 230), 0.1, 'relative')
UN10.append(TM.generate('AFSS-INNER',300,{'angle':0,'design_angle':0.22,'e1':0,'e2':1,'BC':'Aramis Self-Seeding'}),0.1975,'relative')
UN10.append(TM.generate('AFSS-OUTER',400,{'angle':-0,'design_angle':-0.22,'e1':1,'e2':0,'BC':'Aramis Self-Seeding'}),1,varC)
UN10.append(TM.generate('DBPM-C8',410),0.374-0.175,'relative')
UN10.append(TM.generate('QFF',420),0.06,'relative')
@@ -1556,8 +1596,8 @@ class SwissFEL:
if self.alt==2:
UN15 = TM.generate('U15-Cell', 0, {'Name': 'UN15'})
UN16 = TM.generate('U15-Cell', 0, {'Name': 'UN16'})
UN17 = TM.generate('U15-Cell', 0, {'Name': 'UN17'})
UN18 = TM.generate('U15-Cell', 0, {'Name': 'UN18'})
UN17 = TM.generate('U12-Cell-AB', 0, {'Name': 'UN17'})
UN18 = TM.generate('U12-Cell-AB', 0, {'Name': 'UN18'})
UN19 = TM.generate('U15-Cell-Empty', 0, {'Name': 'UN19'})
UN20 = LineContainer('UN20',4.3)
UN20.append(TM.generate('TDS X-Band', 100), 0.1, 'relative')
@@ -1906,8 +1946,8 @@ class SwissFEL:
UN05.append(TM.generate('DBPM-C5',410),0.18+0.00775,'relative')
UN05.append(TM.generate('QFF',420),0.06025-0.00775+0.005,'relative')
UN06=TM.generate('UE38-Cell',0,{'Name':'UN06'})
UN07=TM.generate('UE38-Cell',0,{'Name':'UN07'})
UN06=TM.generate('SUE38-Cell',0,{'Name':'UN06'})
UN07=TM.generate('SUE38-Cell',0,{'Name':'UN07'})
UN08=TM.generate('UE38-Cell',0,{'Name':'UN08'})
UN09=TM.generate('UE38-Cell',0,{'Name':'UN09'})
UN10=TM.generate('UE38-Cell',0,{'Name':'UN10'})
@@ -1915,42 +1955,58 @@ class SwissFEL:
UN12=TM.generate('UE38-Cell',0,{'Name':'UN12'})
UN13=TM.generate('UE38-Cell',0,{'Name':'UN13'})
SS=LineContainer('UN14',-0.027-0.07275+0.005)
varC=VariableContainer(0.38,0)
SS.append(TM.generate('AFSS-OUTER',100,{'angle':angcal,'design_angle':angcal,'e1':0,'e2':1,'BC':'Athos Self-Seeding'}),0.18,'relative')
SS.append(TM.generate('AFSS-INNER',200,{'angle':-angcal,'design_angle':-angcal,'e1':1,'e2':0,'BC':'Athos Self-Seeding'}),1,varC)
SS.append(TM.generate('AFSS-INNER',300,{'angle':-angcal,'design_angle':-angcal,'e1':0,'e2':1,'BC':'Athos Self-Seeding'}),0.16,'relative')
SS.append(TM.generate('AFSS-OUTER',400,{'angle':angcal,'design_angle':angcal,'e1':1,'e2':0,'BC':'Athos Self-Seeding'}),1,varC)
SS.append(TM.generate('DBPM-C5',410),0.18+0.00775,'relative')
SS.append(TM.generate('QFF',420),0.06025-0.00775+0.005,'relative')
UN14=TM.generate('UE38-Cell',0,{'Name':'UN15'})
UN15=TM.generate('UE38-Cell',0,{'Name':'UN16'})
if self.alt < 2:
SS=LineContainer('UN14',-0.027-0.07275+0.005)
varC=VariableContainer(0.38,0)
SS.append(TM.generate('AFSS-OUTER',100,{'angle':angcal,'design_angle':angcal,'e1':0,'e2':1,'BC':'Athos Self-Seeding'}),0.18,'relative')
SS.append(TM.generate('AFSS-INNER',200,{'angle':-angcal,'design_angle':-angcal,'e1':1,'e2':0,'BC':'Athos Self-Seeding'}),1,varC)
SS.append(TM.generate('AFSS-INNER',300,{'angle':-angcal,'design_angle':-angcal,'e1':0,'e2':1,'BC':'Athos Self-Seeding'}),0.16,'relative')
SS.append(TM.generate('AFSS-OUTER',400,{'angle':angcal,'design_angle':angcal,'e1':1,'e2':0,'BC':'Athos Self-Seeding'}),1,varC)
SS.append(TM.generate('DBPM-C5',410),0.18+0.00775,'relative')
SS.append(TM.generate('QFF',420),0.06025-0.00775+0.005,'relative')
UN14=TM.generate('UE38-Cell',0,{'Name':'UN15'})
UN15=TM.generate('UE38-Cell',0,{'Name':'UN16'})
else:
SS = LineContainer('UN16', -0.027 - 0.07275 + 0.005)
varC = VariableContainer(0.38, 0)
SS.append(TM.generate('AFSS-OUTER', 100, {'angle': angcal, 'design_angle': angcal, 'e1': 0, 'e2': 1,'BC': 'Athos Self-Seeding'}), 0.18, 'relative')
SS.append(TM.generate('AFSS-INNER', 200, {'angle': -angcal, 'design_angle': -angcal, 'e1': 1, 'e2': 0,'BC': 'Athos Self-Seeding'}), 1, varC)
SS.append(TM.generate('UVDiag', 210), 0.03, 'relative')
SS.append(TM.generate('AFSS-INNER', 300, {'angle': -angcal, 'design_angle': -angcal, 'e1': 0, 'e2': 1,'BC': 'Athos Self-Seeding'}), 0.03, 'relative')
SS.append(TM.generate('AFSS-OUTER', 400, {'angle': angcal, 'design_angle': angcal, 'e1': 1, 'e2': 0,'BC': 'Athos Self-Seeding'}), 1, varC)
SS.append(TM.generate('DBPM-C5', 410), 0.18 + 0.00775, 'relative')
SS.append(TM.generate('QFF', 420), 0.06025 - 0.00775 + 0.005, 'relative')
UN14 = TM.generate('UE38-Cell', 0, {'Name': 'UN14'})
UN15 = TM.generate('UE38-Cell', 0, {'Name': 'UN15'})
UN16=TM.generate('UE38-Cell',0,{'Name':'UN17'})
UN17=TM.generate('UE38-Cell',0,{'Name':'UN18'})
UN18=TM.generate('UE38-Cell',0,{'Name':'UN19'})
UN19=TM.generate('UE38-Cell',0,{'Name':'UN20'})
UN20=TM.generate('UE38-Cell',0,{'Name':'UN21'})
UN21=TM.generate('UE38-Cell-Last',0,{'Name':'UN22'})
MA02=LineContainer('MA02',15-1.2591+1.3)
MA02.append(TM.generate('QFF',10),1.51534,'relative')
MA02.append(TM.generate('QFF',20),2.183,'relative')
MA02.append(TM.generate('DBPM-C8',30),2.183-0.2,'relative')
MA02.append(TM.generate('QFF',40),0.1,'relative')
MA02.append(TM.generate('COL-Dechirper-H',45),0.1+0.6015-0.03,'relative')
MA02.append(TM.generate('QFF',50),2.183-1.1-0.6015+0.03,'relative')
MA02.append(TM.generate('DBPM-C8',60),2.183-0.2,'relative')
MA02.append(TM.generate('QFF',70),0.1,'relative')
MA02.append(TM.generate('TDS X-Band',100),2.0535-0.22+0.06,'relative')
MA02.append(TM.generate('TDS X-Band',200),0.1,'relative') # currently disable the second cavity
if self.alt < 2:
UN21=TM.generate('UE38-Cell-Last',0,{'Name':'UN22'})
MA02=LineContainer('MA02',15-1.2591+1.3)
MA02.append(TM.generate('QFF',10),1.51534,'relative')
MA02.append(TM.generate('QFF',20),2.183,'relative')
MA02.append(TM.generate('DBPM-C8',30),2.183-0.2,'relative')
MA02.append(TM.generate('QFF',40),0.1,'relative')
MA02.append(TM.generate('COL-Dechirper-H',45),0.1+0.6015-0.03,'relative')
MA02.append(TM.generate('QFF',50),2.183-1.1-0.6015+0.03,'relative')
MA02.append(TM.generate('DBPM-C8',60),2.183-0.2,'relative')
MA02.append(TM.generate('QFF',70),0.1,'relative')
MA02.append(TM.generate('TDS X-Band',100),2.0535-0.22+0.06,'relative')
MA02.append(TM.generate('TDS X-Band',200),0.1,'relative') # currently disable the second cavity
else:
UN21 = TM.generate('UE38-Cell', 0, {'Name': 'UN22'})
UN22 = TM.generate('UE38-Cell', 0, {'Name': 'UN23'})
UN23 = TM.generate('UE38-Cell', 0, {'Name': 'UN24'})
UN24 = TM.generate('UE38-Cell', 0, {'Name': 'UN25'})
UN25 = TM.generate('UE38-Cell-Last', 0, {'Name': 'UN26'})
MA02 = LineContainer('MA02', 4)
MA02.append(TM.generate('TDS X-Band', 100), 0.06+1.2809, 'relative')
MA02.append(TM.generate('TDS X-Band', 200), 0.1, 'relative')
BD01=LineContainer('BD01',0)
BD01.append(TM.generate('QFM',10),0.15+0.12-0.06,'relative')
BD01.append(TM.generate('DBPM-C16',20),1.1-0.3,'relative')
BD01.append(TM.generate('QFM',30),0.2,'relative')
@@ -1976,7 +2032,7 @@ class SwissFEL:
AtLine=[SY01,SY02,SY03,CL01,DI01,CB01,CB02,MA01,UN04,UN05,UN06,UN07,UN08,UN09,UN10,UN11,UN12,UN13,SS,UN14,UN15,UN16,UN17,UN18,UN19,UN20,UN21,MA02,BD01]
else:
AtLine = [SY01, SY02, SY03, BC01, CL01, DI01, CB01, CB02, MA01, UN04, UN05, UN06, UN07, UN08, UN09, UN10, UN11,
UN12, UN13, SS, UN14, UN15, UN16, UN17, UN18, UN19, UN20, UN21, MA02, BD01]
UN12, UN13, UN14, UN15, SS, UN16, UN17, UN18, UN19, UN20, UN21, UN22, UN23, UN24, UN25, MA02, BD01]
Athos=LineContainer('AT')
Athos.append(AtLine)
@@ -2115,6 +2171,9 @@ class SwissFEL:
P302.append(TM.generate('WFP3',370),5.55-0.1+0.2197,'absolute')
P302.append(TM.generate('WFP3',380),5.7-0.1+0.2327,'absolute')
P302.append(TM.generate('DBPM-P3',390),6.1-0.1-0.15+0.0633,'absolute')
P302.append(TM.generate('DSCR-P3FC', 392), 7.5 - 0.1 - 1.3214, 'absolute')
P302.append(TM.generate('DSCR-P3FC', 393), 7.5 - 0.1 - 1.3214, 'absolute')
P302.append(TM.generate('FC-P3', 395), 7.5 - 0.1 - 1.3214, 'absolute')
P302.append(TM.generate('FC-P3', 395), 7.5 - 0.1-1.3214, 'absolute')
P302.append(TM.generate('SHA-P3',400,{'angle':0,'design_angle':0,'e1':0.5,'e2':0.5}),6.5-0.2-0.25,'absolute')
P302.append(TM.generate('DBPM-C16-P3', 410), 0.5354, 'relative')