Implementing SwissFEL+ Lattice (Lattice 11.0.1)

This commit is contained in:
2025-08-12 15:08:50 +02:00
parent d57c5462ef
commit a4be0058e1

View File

@@ -293,16 +293,16 @@ import math
# 3) Have deflector after undulator
# 4) Extend Aramis for self-seeding
# 5) Append after burner.
# +6) Add RF chirper in SINEG section and rearrange other elements
# +7) Use current layout of SINSB03 and SINSB04
# +8) Add 2 C-band station after BC1 from Linac2
# +9) remove S20CB03 and S20CB04 and move resonant kick upstream.
# +10) move bunch compressor BC2 after extraction
# +11) Redo completely switchyard
# 6) Add RF chirper in SINEG section and rearrange other elements
# 7) Use current layout of SINSB03 and SINSB04
# 8) Add 2 C-band station after BC1 from Linac2
# 9) remove S20CB03 and S20CB04 and move resonant kick upstream.
# 10) move bunch compressor BC2 after extraction
# 11) Redo completely switchyard
# +12) Add 2 Athos modulator with longer period for EEHG setup
# +13) Add micro chicane in linac
# +14) remove Athos dechirper and add second C-band station
# +15) aff skew quad in SATCL01 already for phase planned.
# +15) add skew quad in SATCL01 already for phase planned.
class SwissFEL:
@@ -495,8 +495,8 @@ 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': 3.2,'LengthRes':3,'Band':'S','Baugruppe':'S-BAND-HG-ACC'}
TM.define('TW Cav HG S-Band',indict)
indict={'Type':'RF','Length': 0.3,'LengthRes':0.35,'Band':'S','Baugruppe':'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)
indict={'Type':'RF','Length': 0.240,'LengthRes':0.441,'Band':'S','Tag':'RTDS','Baugruppe':'S-BAND-TDS'}
@@ -696,7 +696,7 @@ class SwissFEL:
def Lines(self,TM):
# defines common lines in the lattice
# defines common lines in the lattice
# define sequence templates
@@ -881,14 +881,15 @@ class SwissFEL:
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('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('QFC',212),0.123-0.0547,'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')
@@ -975,34 +976,31 @@ 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.2)
LH01 = LineContainer('LH01',2.0)
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('QFDM-noCor', 40), 0.2, 'relative')
LH01.append(TM.generate('DBPM-C16', 60), 0.25, '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')
LH02=LineContainer('LH02',-0.2)
LH02=LineContainer('LH02',-0.1)
varC=VariableContainer(0.16,0)
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('AFL',400,{'angle':-3.0,'design_angle':-3.0,'e1':1,'e2':0,'BC':'Laser Heater'}),2,varC)
SB03 = LineContainer('SB03',10.2-1.1+0.164)
SB03.append(TM.generate('TW Cav HG S-Band', 100), 0.2, 'relative')
SB03.append(TM.generate('QFDM', 110), 0.1, 'relative')
SB03.append(TM.generate('DBPM-C16', 120), 0.20, 'relative')
SB03.append(TM.generate('QFDM', 130), 0.20, 'relative')
SB03.append(TM.generate('TW Cav HG S-Band', 200), 0.2, 'relative')
SB03.append(TM.generate('QFDM', 210), 0.1, 'relative')
SB03.append(TM.generate('DBPM-C16', 220), 0.20, 'relative')
SB03.append(TM.generate('QFDM', 230), 0.20, 'relative')
LH02.append(TM.generate('DBPM-C16', 410), 0.15, 'relative')
LH02.append(TM.generate('SFC', 420), 0, 'relative')
SB03 = TM.generate('SB-Lin-Cell-First', 0, {'Name': 'SB03'})
SB04 = TM.generate('SB-Lin-Cell-Mid', 0, {'Name': 'SB04'})
XB01 = LineContainer('XB01', 2.8)
XB01.append(TM.generate('TW Cav X-Band', 100), 0.2, 'relative')
XB01.append(TM.generate('DBPM-C16', 120), 0.2048, 'relative')
XB01.append(TM.generate('TW Cav X-Band', 200), 0.2048, 'relative')
BC01 = LineContainer('BC01', 6.615)
BC01.append(TM.generate('DBPM-C16', 10), 0.12 + 0.08, 'relative')
BC01.append(TM.generate('QFDM', 20), 0.105 - 0.08, 'relative')
@@ -1065,18 +1063,18 @@ class SwissFEL:
# padding for moving the
if self.alt >1:
MA01=LineContainer('MA01',33.-0.674-1.1067)
MA01=LineContainer('MA01',4.8)
MA01.append(TM.generate('DBPM-C16', 10), 0.2, 'relative')
MA01.append(TM.generate('QFDM', 20), 0.2, 'relative')
MA01.append(TM.generate('QFDM', 30), 1., 'relative')
MA01.append(TM.generate('QFDM', 40), 1., 'relative')
MA01.append(TM.generate('DBPM-C16', 100), 12-0.3-1.1, 'relative')
MA01.append(TM.generate('QFDM', 110), 0.2, 'relative')
MA01.append(TM.generate('QFDM', 120), 1., 'relative')
MA01.append(TM.generate('QFDM', 130), 1., 'relative')
DI01=LineContainer('DI01',3.84)
DI01.append(TM.generate('DBPM-C16',10),0.263,'relative')
MA01.append(TM.generate('QFDM-noCor', 30), 1.5, 'relative')
MA01.append(TM.generate('DBPM-C16', 40), 1.2, 'relative')
MA01.append(TM.generate('QFDM', 50), 0.2, 'relative')
CB01 = TM.generate('CB-Lin1-Cell', 0, {'Name': 'CB01'})
dL = 0
if self.alt == 2:
dL = 3.6+0.2833
DI01 = LineContainer('DI01', 3.84+dL)
DI01.append(TM.generate('DBPM-C16', 10), 0.263+dL, 'relative')
DI01.append(TM.generate('QFDM',20),0.037,'relative')
DI01.append(TM.generate('QFBS',30),0.27,'relative')
DI01.append(TM.generate('DBPM-C16',60),0.109+0.012+0.4+0.137,'relative')
@@ -1100,7 +1098,7 @@ class SwissFEL:
if self.alt < 2:
InjLine=[EG01,SB01,SB02,LH01,LH02,LH03,SB03,SB04,SB05,XB01,BC01,BC02,DI01,DI02]
else:
InjLine = [EG01, SB01, SB02, LH01, LH02, SB03, XB01, BC01, BC02, MA01, DI01, DI02]
InjLine = [EG01, SB01, SB02, LH01, LH02, SB03, SB04, XB01, BC01, BC02, MA01, CB01, DI01, DI02]
Injector=LineContainer('IN')
Injector.append(InjLine)
@@ -1141,66 +1139,82 @@ class SwissFEL:
CB06=TM.generate('CB-Lin1-Cell',0,{'Name':'CB06'})
CB07=TM.generate('CB-Lin1-Cell-WSC',0,{'Name':'CB07'})
CB08=TM.generate('CB-Lin1-Cell',0,{'Name':'CB08'})
CB09=TM.generate('CB-Lin1-Cell-Last',0,{'Name':'CB09'})
BC01=LineContainer('BC01',9.665)
BC01.append(TM.generate('DBPM-C16',10),0.03,'relative')
BC01.append(TM.generate('QFDM',20),0.049,'relative')
BC01.append(TM.generate('DWSC-C16-AL',30),0.019,'relative')
BC01.append(TM.generate('QFDM',40),1.08,'relative')
BC01.append(TM.generate('DBPM-C16',50),2.351,'relative')
BC01.append(TM.generate('QFDM',60),0.049,'relative')
BC01.append(TM.generate('DBAM-FS16',70),0.839,'relative')
BC01.append(TM.generate('QFDM',80),1.586,'relative')
BC01.append(TM.generate('DBPM-C16',90),1.305,'relative')
BC01.append(TM.generate('QFDM',100),0.095,'relative')
BC02=LineContainer('BC02',-0.521)
# varC=VariableContainer(7,3.15+0.1+0.72+0.037)
varC=VariableContainer(7,3.15)
varD=VariableContainer(7,4.2761+0.357-0.661)
BC02.append(TM.generate('AFBC3',100,{'angle':-2.15,'design_angle':-2.15,'e1':0,'e2':1,'BC':'Bunch Compressor 2'}),0.,'relative')
BC02.append(TM.generate('QFBS',110),2.45,'relative')
BC02.append(TM.generate('QFB',120),0.1,'relative')
BC02.append(TM.generate('HFB',130),0.09,'relative')
BC02.append(TM.generate('DBPM-C16',140),0.11,'relative')
# BC02.append(TM.generate('DALA',150),0,varC)
# BC02.append(TM.generate('AFBC3',200,{'angle':2.15,'design_angle':2.15,'e1':1,'e2':0,'BC':'Bunch Compressor 2'}),0.720,'relative')
# BC02.append(TM.generate('DALA',150),0,varC)
BC02.append(TM.generate('AFBC3',200,{'angle':2.15,'design_angle':2.15,'e1':1,'e2':0,'BC':'Bunch Compressor 2'}),0,varC)
BC02.append(TM.generate('COL-BC-Scraper',210),0.3005,'relative')
BC02.append(TM.generate('DSCR-BC120',220),0.0395,'relative')
BC02.append(TM.generate('BC-SlotFoil-H',230),0.0395,'relative')
BC02.append(TM.generate('BC-SlotFoil-V',240),0.0405,'relative')
BC02.append(TM.generate('AFBC3',300,{'angle':2.15,'design_angle':2.15,'e1':0,'e2':1,'BC':'Bunch Compressor 2'}),0.26,'relative')
BC02.append(TM.generate('DSRM-VIS',310),1.0261+0.357-0.661,'relative')
BC02.append(TM.generate('DBPM-C16',320),0,varD)
BC02.append(TM.generate('HFB',330),0.11,'relative')
BC02.append(TM.generate('QFB',340),0.09,'relative')
BC02.append(TM.generate('QFS',350),0.05,'relative')
BC02.append(TM.generate('DALA-BC1',360),1.922-0.019,'relative')
BC02.append(TM.generate('AFBC3',400,{'angle':-2.15,'design_angle':-2.15,'e1':1,'e2':0,'BC':'Bunch Compressor 2'}),2.25-1.922+0.019-0.037,'relative')
BC02.append(TM.generate('DBCM-IR',410),0.4-0.021,'relative')
Lsec=9.43
angle=0
MA01=LineContainer('MA01',Lsec)
MA01.append(TM.generate('DBPM-C16',10),0.104,'relative')
MA01.append(TM.generate('QFDM',20),0.1-0.004,'relative')
# MA01.append(TM.generate('DCDR-VACONLY',25),1.38-0.137,'relative')
MA01.append(TM.generate('QFDM',50),0.05+0.15+0.12+1.480+0.05,'relative')
MA01.append(TM.generate('DBPM-C16',60),1.82,'relative')
MA01.append(TM.generate('QFDM',70),0.08,'relative')
MA01.append(TM.generate('DCDR-BC2',80),1.008-0.312-0.037,'relative')
MA01.append(TM.generate('DSCR-HR16',90),0.2,'relative')
MA01.append(TM.generate('AFBC1',100,{'angle':0,'design_angle':0,'e1':0,'e2':1}),0.16+0.025+0.05+0.3-0.043,'relative')
MA01.append(TM.generate('QFDM',110),0.10-0.025,'relative')
MA01.append(TM.generate('Beam-Stopper-S10',115),0.15,'relative')
MA01.append(TM.generate('DBPM-C16',120),0.13-0.05,'relative')
MA01.append(TM.generate('QFDM',130),0.07,'relative')
if self.alt <2:
CB09=TM.generate('CB-Lin1-Cell-Last',0,{'Name':'CB09'})
BC01=LineContainer('BC01',9.665)
BC01.append(TM.generate('DBPM-C16',10),0.03,'relative')
BC01.append(TM.generate('QFDM',20),0.049,'relative')
BC01.append(TM.generate('DWSC-C16-AL',30),0.019,'relative')
BC01.append(TM.generate('QFDM',40),1.08,'relative')
BC01.append(TM.generate('DBPM-C16',50),2.351,'relative')
BC01.append(TM.generate('QFDM',60),0.049,'relative')
BC01.append(TM.generate('DBAM-FS16',70),0.839,'relative')
BC01.append(TM.generate('QFDM',80),1.586,'relative')
BC01.append(TM.generate('DBPM-C16',90),1.305,'relative')
BC01.append(TM.generate('QFDM',100),0.095,'relative')
L1Line=[CB01,CB02,DI01,CB03,CB04,CB05,CB06,CB07,CB08,CB09,BC01,BC02,MA01]
BC02=LineContainer('BC02',-0.521)
varC=VariableContainer(7,3.15)
varD=VariableContainer(7,4.2761+0.357-0.661)
BC02.append(TM.generate('AFBC3',100,{'angle':-2.15,'design_angle':-2.15,'e1':0,'e2':1,'BC':'Bunch Compressor 2'}),0.,'relative')
BC02.append(TM.generate('QFBS',110),2.45,'relative')
BC02.append(TM.generate('QFB',120),0.1,'relative')
BC02.append(TM.generate('HFB',130),0.09,'relative')
BC02.append(TM.generate('DBPM-C16',140),0.11,'relative')
BC02.append(TM.generate('AFBC3',200,{'angle':2.15,'design_angle':2.15,'e1':1,'e2':0,'BC':'Bunch Compressor 2'}),0,varC)
BC02.append(TM.generate('COL-BC-Scraper',210),0.3005,'relative')
BC02.append(TM.generate('DSCR-BC120',220),0.0395,'relative')
BC02.append(TM.generate('BC-SlotFoil-H',230),0.0395,'relative')
BC02.append(TM.generate('BC-SlotFoil-V',240),0.0405,'relative')
BC02.append(TM.generate('AFBC3',300,{'angle':2.15,'design_angle':2.15,'e1':0,'e2':1,'BC':'Bunch Compressor 2'}),0.26,'relative')
BC02.append(TM.generate('DSRM-VIS',310),1.0261+0.357-0.661,'relative')
BC02.append(TM.generate('DBPM-C16',320),0,varD)
BC02.append(TM.generate('HFB',330),0.11,'relative')
BC02.append(TM.generate('QFB',340),0.09,'relative')
BC02.append(TM.generate('QFS',350),0.05,'relative')
BC02.append(TM.generate('DALA-BC1',360),1.922-0.019,'relative')
BC02.append(TM.generate('AFBC3',400,{'angle':-2.15,'design_angle':-2.15,'e1':1,'e2':0,'BC':'Bunch Compressor 2'}),2.25-1.922+0.019-0.037,'relative')
BC02.append(TM.generate('DBCM-IR',410),0.4-0.021,'relative')
Lsec=9.43
angle=0
MA01=LineContainer('MA01',Lsec)
MA01.append(TM.generate('DBPM-C16',10),0.104,'relative')
MA01.append(TM.generate('QFDM',20),0.1-0.004,'relative')
# MA01.append(TM.generate('DCDR-VACONLY',25),1.38-0.137,'relative')
MA01.append(TM.generate('QFDM',50),0.05+0.15+0.12+1.480+0.05,'relative')
MA01.append(TM.generate('DBPM-C16',60),1.82,'relative')
MA01.append(TM.generate('QFDM',70),0.08,'relative')
MA01.append(TM.generate('DCDR-BC2',80),1.008-0.312-0.037,'relative')
MA01.append(TM.generate('DSCR-HR16',90),0.2,'relative')
MA01.append(TM.generate('AFBC1',100,{'angle':0,'design_angle':0,'e1':0,'e2':1}),0.16+0.025+0.05+0.3-0.043,'relative')
MA01.append(TM.generate('QFDM',110),0.10-0.025,'relative')
MA01.append(TM.generate('Beam-Stopper-S10',115),0.15,'relative')
MA01.append(TM.generate('DBPM-C16',120),0.13-0.05,'relative')
MA01.append(TM.generate('QFDM',130),0.07,'relative')
else:
CB09 = TM.generate('CB-Lin1-Cell', 0, {'Name': 'CB09'})
CB10 = TM.generate('CB-Lin1-Cell', 0, {'Name': 'CB10'})
CB11 = TM.generate('CB-Lin1-Cell-Last', 0, {'Name': 'CB11'})
MA01 = LineContainer('MA01', 17.41+0.035)
MA01.append(TM.generate('QFD', 10), 0.2, 'relative')
MA01.append(TM.generate('DBPM-C16', 20), 1.4, 'relative')
MA01.append(TM.generate('QFD', 30), 0.2, 'relative')
MA01.append(TM.generate('DBAM-FS16', 40), 1.4, 'relative')
MA01.append(TM.generate('QFD', 50), 0.225, 'relative')
MA01.append(TM.generate('DBPM-C16', 60), 1.4, 'relative')
MA01.append(TM.generate('QFD', 70), 0.2, 'relative')
MA01.append(TM.generate('AFBC1', 100, {'angle': 0, 'design_angle': 0, 'e1': 0, 'e2': 1}),0.5+7.74, 'relative')
MA01.append(TM.generate('DBPM-C16', 110), 0.25, 'relative')
MA01.append(TM.generate('Beam-Stopper-S10', 115), 0.125, 'relative')
MA01.append(TM.generate('DSCR-HR16', 120), 0.044, 'relative')
MA01.append(TM.generate('QFD', 130), 0.069, 'relative')
if self.alt<2:
L1Line=[CB01,CB02,DI01,CB03,CB04,CB05,CB06,CB07,CB08,CB09,BC01,BC02,MA01]
else:
L1Line = [CB01, CB02, DI01, CB03, CB04, CB05, CB06, CB07, CB08, CB09, CB10, CB11, MA01]
Linac10=LineContainer('10')
Linac10.append(L1Line)
@@ -1208,12 +1222,16 @@ class SwissFEL:
#--------------------------------
# Linac 2
CB01=TM.generate('CB-Lin2-Cell-WSC',0,{'Name':'CB01'})
# CB01=TM.generate('CB-Lin2-Cell',0,{'Name':'CB01'})
CB02=TM.generate('CB-Lin2-Cell',0,{'Name':'CB02'})
CB03=TM.generate('CB-Lin2-Cell',0,{'Name':'CB03'})
CB04=TM.generate('CB-Lin2-Cell-Last',0,{'Name':'CB04'})
if self.alt < 2:
CB01 = TM.generate('CB-Lin2-Cell-WSC', 0, {'Name': 'CB01'})
CB02 = TM.generate('CB-Lin2-Cell', 0, {'Name': 'CB02'})
CB03=TM.generate('CB-Lin2-Cell',0,{'Name':'CB03'})
CB04=TM.generate('CB-Lin2-Cell-Last',0,{'Name':'CB04'})
else:
CB01 = TM.generate('CB-Lin2-Cell-WSC', 0, {'Name': 'CB01'})
CB02 = TM.generate('CB-Lin2-Cell-Last', 0, {'Name': 'CB02'})
SY01=LineContainer('SY01',8.165)
SY01.append(TM.generate('DBPM-C16',10),0.03,'relative')
SY01.append(TM.generate('QFD',20),0.049,'relative')
@@ -1245,20 +1263,64 @@ class SwissFEL:
angle=0
SY02.append(TM.generate('AFS',200,{'angle':angle,'design_angle':2,'e1':0,'e2':0,'branch':True,'BC':'Switch Yard 1'}),0.30-0.0002+0.12,'relative')
SY02.append(TM.generate('MKBR',201),0.,'relative')
SY03=LineContainer('SY03', 19.53+0.12)
SY03.append(TM.generate('DBPM-C16',10),4.8+0.12,'relative')
SY03.append(TM.generate('QFD',20),0.1,'relative')
SY03.append(TM.generate('QFD',30),3,'relative')
SY03.append(TM.generate('DBPM-C16',40),2.6,'relative')
SY03.append(TM.generate('QFD',50),0.1,'relative')
SY03.append(TM.generate('QFD',60),4.2,'relative')
SY03.append(TM.generate('DBPM-C16',80),0.2+2.31+0.05-0.257,'relative')
SY03.append(TM.generate('DSCR-HR16',85),0.12,'relative')
SY03.append(TM.generate('DWSC-C16-AL',90),0.1+0.257-0.12-0.137,'relative')
SY03.append(TM.generate('QFD',100),0.053,'relative')
if self.alt < 2:
SY03=LineContainer('SY03', 19.53+0.12)
SY03.append(TM.generate('DBPM-C16',10),4.8+0.12,'relative')
SY03.append(TM.generate('QFD',20),0.1,'relative')
SY03.append(TM.generate('QFD',30),3,'relative')
SY03.append(TM.generate('DBPM-C16',40),2.6,'relative')
SY03.append(TM.generate('QFD',50),0.1,'relative')
SY03.append(TM.generate('QFD',60),4.2,'relative')
SY03.append(TM.generate('DBPM-C16',80),0.2+2.31+0.05-0.257,'relative')
SY03.append(TM.generate('DSCR-HR16',85),0.12,'relative')
SY03.append(TM.generate('DWSC-C16-AL',90),0.1+0.257-0.12-0.137,'relative')
SY03.append(TM.generate('QFD',100),0.053,'relative')
else:
BC01 = LineContainer('BC01', -0.5)
BC01.append(TM.generate('QFD', 10), 3.5, 'relative')
BC01.append(TM.generate('DBPM-C16', 20), 0.2, 'relative')
BC01.append(TM.generate('QFD', 30), 1.2, 'relative')
BC01.append(TM.generate('DBPM-C16', 40), 2.5-0.985-0.3, 'relative')
BC01.append(TM.generate('QFD', 50), 0.2, 'relative')
L2Line=[CB01,CB02,CB03,CB04,SY01,SY02,SY03]
BC02 = LineContainer('BC02', -0.521)
varC = VariableContainer(7, 3.15)
varD = VariableContainer(7, 4.2761 + 0.357 - 0.661)
BC02.append(TM.generate('AFBC3', 100, {'angle': -2.15, 'design_angle': -2.15, 'e1': 0, 'e2': 1,
'BC': 'Bunch Compressor 2'}), 0., 'relative')
BC02.append(TM.generate('QFBS', 110), 2.45, 'relative')
BC02.append(TM.generate('QFB', 120), 0.1, 'relative')
BC02.append(TM.generate('HFB', 130), 0.09, 'relative')
BC02.append(TM.generate('DBPM-C16', 140), 0.11, 'relative')
BC02.append(TM.generate('AFBC3', 200, {'angle': 2.15, 'design_angle': 2.15, 'e1': 1, 'e2': 0,
'BC': 'Bunch Compressor 2'}), 0, varC)
BC02.append(TM.generate('COL-BC-Scraper', 210), 0.3005, 'relative')
BC02.append(TM.generate('DSCR-BC120', 220), 0.0395, 'relative')
BC02.append(TM.generate('BC-SlotFoil-H', 230), 0.0395, 'relative')
BC02.append(TM.generate('BC-SlotFoil-V', 240), 0.0405, 'relative')
BC02.append(TM.generate('AFBC3', 300, {'angle': 2.15, 'design_angle': 2.15, 'e1': 0, 'e2': 1,
'BC': 'Bunch Compressor 2'}), 0.26, 'relative')
BC02.append(TM.generate('DSRM-VIS', 310), 1.0261 + 0.357 - 0.661, 'relative')
BC02.append(TM.generate('DBPM-C16', 320), 0, varD)
BC02.append(TM.generate('HFB', 330), 0.11, 'relative')
BC02.append(TM.generate('QFB', 340), 0.09, 'relative')
BC02.append(TM.generate('QFS', 350), 0.05, 'relative')
BC02.append(TM.generate('DALA-BC1', 360), 1.922 - 0.019, 'relative')
BC02.append(TM.generate('AFBC3', 400, {'angle': -2.15, 'design_angle': -2.15, 'e1': 1, 'e2': 0,
'BC': 'Bunch Compressor 2'}), 2.25 - 1.922 + 0.019 - 0.037,'relative')
BC02.append(TM.generate('DBCM-IR', 410), 0.4 - 0.021, 'relative')
MA01 = LineContainer('MA01', 3.135-0.115+0.2-0.085)
MA01.append(TM.generate('QFD', 10), 0.05, 'relative')
MA01.append(TM.generate('QFD', 20), 1.2-0.05, 'relative')
MA01.append(TM.generate('DBPM-C16', 30), 1.2-0.065-0.3, 'relative')
MA01.append(TM.generate('QFD', 40), 0.2, 'relative')
CB03 = TM.generate('CB-Lin2-Cell', 0, {'Name': 'CB03'})
if self.alt < 2:
L2Line=[CB01,CB02,CB03,CB04,SY01,SY02,SY03]
else:
L2Line = [CB01, CB02, SY01, SY02, BC01, BC02, MA01, CB03]
Linac20=LineContainer('20')
Linac20.append(L2Line)
@@ -1531,67 +1593,102 @@ class SwissFEL:
#-----------------------------
# Athos Beamline
if self.alt == 2:
SY01 = LineContainer('SY01', 0)
SY01.append(Alignment({'dy': 0.01, 'Tag': 'ALIG', 'index': 1}))
SY01.append(TM.generate('QFM-veryshort', 10), 4, 'relative')
SY01.append(TM.generate('QFM-veryshort', 20), 4, 'relative')
SY01.append(TM.generate('QFM-veryshort', 30), 2.5, 'relative')
SY01.append(TM.generate('QFM-veryshort', 40), 2.5, 'relative')
SY01.append(TM.generate('AFBC3-noCor', 100, {'angle': -2, 'design_angle': -2, 'e1': 1, 'e2': 0., 'BC': 'Switch Yard 1'}), 0.3,'relative')
SY02 = LineContainer('SY02', 0)
SY02.append(TM.generate('QFM-veryshort', 10), 0.3, 'relative')
SY02.append(TM.generate('AFL', 100,{'angle': 0.57, 'design_angle': 0.57, 'e1': 0, 'e2': 1., 'Tilt': math.asin(1)}),0.3, 'relative')
SY02.append(TM.generate('AFL', 200,{'angle': -0.57, 'design_angle': -0.57, 'e1': 1, 'e2': 0., 'Tilt': math.asin(1)}),0.8, 'relative')
SY02.append(TM.generate('QFM-veryshort', 205), 0.3, 'relative')
SY02.append(TM.generate('QFM-veryshort', 210), 4.3+0.2244-0.9+0.85-0.6, 'relative')
SY02.append(TM.generate('QFM-veryshort', 220), 4.0-0.9+0.85, 'relative')
SY02.append(TM.generate('QFM-veryshort', 230), 4.0-0.9+0.85, 'relative')
SY02.append(TM.generate('QFM-veryshort', 240), 4.0-0.9+0.85, 'relative')
ddx=0.7502
SY01=LineContainer('SY01', 29.100107+ddx+0.12+0.000049)
SY01.append(Alignment({'dy':0.01,'Tag':'ALIG','index':1}))
SY01.append(TM.generate('DBPM-C16',10),3.3+ddx+0.12+0.000048,'relative')
SY01.append(TM.generate('QFM',20),0.35-0.183-0.035,'relative')
SY01.append(TM.generate('SFQFM',22),0.183+0.925+0.035,'relative')
SY01.append(TM.generate('BC-SlotFoil-V',25),1.65-0.626-0.925,'relative')
SY01.append(TM.generate('QFBS',30),0.15+0.026,'relative')
SY01.append(TM.generate('QFD',40),0.05,'relative')
SY01.append(TM.generate('HFB',50),0.1,'relative')
SY01.append(TM.generate('DBPM-C16',60),2.1,'relative')
SY01.append(TM.generate('QFD',70),0.1,'relative')
SY01.append(TM.generate('HFB',80),0.1,'relative')
SY01.append(TM.generate('QFD',90),2.3,'relative')
SY01.append(TM.generate('DBPM-C16',100),1.25-0.135,'relative')
SY01.append(TM.generate('AFBC3-noCor',200,{'angle':1,'design_angle':1,'e1':0.5,'e2':0.5,'BC':'Switch Yard 1'}),0.15+0.135,'relative')
#used for matching SY01.append(TM.generate('AFBC3',200,{'angle':1,'e1':0.5,'e2':0.5}),0.15,'relative')
SY01.append(TM.generate('QFD',210),1.5,'relative')
SY01.append(TM.generate('HFB',220),2.3,'relative')
SY01.append(TM.generate('QFD',230),0.1,'relative')
SY01.append(TM.generate('DBPM-C16',240),1.8,'relative')
SY01.append(TM.generate('HFB',250),0.4,'relative')
SY01.append(TM.generate('QFD',260),0.1,'relative')
SY01.append(TM.generate('QFS',270),0.05,'relative')
SY01.append(TM.generate('QFM',280),1.912,'relative')
SY01.append(TM.generate('SFQFM',282),0.,'relative')
SY01.append(TM.generate('DBPM-C16',290),3.0-0.45-0.012,'relative')
SY01.append(TM.generate('QFD',300),0.1,'relative')
SY01.append(TM.generate('AFBC3-noCor',400,{'angle':2,'design_angle':2,'e1':1,'e2':0.,'BC':'Switch Yard 1'}),1.15,'relative')
SY02=LineContainer('SY02', 9.13)
SY02.append(TM.generate('QFD',10),1.0,'relative')
SY02.append(TM.generate('DBPM-C16',20),0.7-0.004,'relative')
SY02.append(TM.generate('AFL',100,{'angle':0.108,'design_angle':0.108,'e1':0,'e2':1.,'Tilt':math.asin(1)}),0.194,'relative')
SY02.append(TM.generate('QFD',110),1.29,'relative')
SY02.append(TM.generate('QFD',120),2.1,'relative')
SY02.append(TM.generate('AFL',200,{'angle':-0.108,'design_angle':-0.108,'e1':1,'e2':0.,'Tilt':math.asin(1)}),1.29,'relative')
SY02.append(TM.generate('DBPM-C16',210),0.103,'relative')
SY02.append(TM.generate('QFD',230),0.03+0.137+0.12,'relative')
SY03 = LineContainer('SY03', 0)
SY03.append(TM.generate('AFBC3-noCor', 100,{'angle': 2.5, 'design_angle': 2.5, 'e1': 1, 'e2': 0., 'BC': 'Switch Yard 2'}), 0.3,'relative')
SY03.append(TM.generate('QFM-veryshort', 110), 3.5, 'relative')
SY03.append(TM.generate('AFBC3-noCor', 200,{'angle': 2.5, 'design_angle': 2.5, 'e1': 1, 'e2': 0., 'BC': 'Switch Yard 2'}), 3.5,'relative')
SY03.append(TM.generate('QFM-veryshort', 210), 0.5, 'relative')
SY03.append(TM.generate('QFM-veryshort', 220), 2, 'relative')
SY03.append(TM.generate('QFM-veryshort', 230), 2, 'relative')
BC01 = LineContainer('BC01',0)
angAT=0.0087
BC01.append(TM.generate('AFBC3-noCor', 100,{'angle': 0, 'design_angle': 0, 'e1': 1, 'e2': 0., 'BC': 'Switch Yard 3'}), 0.5,'relative')
BC01.append(TM.generate('AFBC3-noCor', 200,{'angle': 0, 'design_angle': 0, 'e1': 0, 'e2': 1., 'BC': 'Switch Yard 3'}), 6,'relative')
BC01.append(TM.generate('AFBC3-noCor', 300,{'angle': 0, 'design_angle': 0, 'e1': 1, 'e2': 0., 'BC': 'Switch Yard 3'}), 0.5,'relative')
BC01.append(TM.generate('AFBC3-noCor', 400,{'angle': 0, 'design_angle': 0, 'e1': 0, 'e2': 1., 'BC': 'Switch Yard 3'}), 6,'relative')
BC01.append(TM.generate('QFM-veryshort', 410), 0.5, 'relative')
BC01.append(TM.generate('QFM-veryshort', 420), 2+0.5, 'relative')
BC01.append(TM.generate('QFM-veryshort', 430), 2+0.58699+4.5895e-3, 'relative')
SY03=LineContainer('SY03', 12.65)
SY03.append(TM.generate('QFD',10),0.45,'relative')
SY03.append(TM.generate('DBPM-C16',30),0.1+2.35,'relative')
SY03.append(TM.generate('QFD',40),0.1,'relative')
if self.alt < 1:
SY03.append(TM.generate('DBPM-C16',60),0.1+2.25,'relative')
else:
SY03.append(TM.generate('DCDR',50),0.876,'relative')
SY03.append(TM.generate('DBPM-C16',60),0.1+2.25-0.876-0.137,'relative')
ddx=0.7502
SY01=LineContainer('SY01', 29.100107+ddx+0.12+0.000049)
SY01.append(Alignment({'dy':0.01,'Tag':'ALIG','index':1}))
SY01.append(TM.generate('DBPM-C16',10),3.3+ddx+0.12+0.000048,'relative')
SY01.append(TM.generate('QFM',20),0.35-0.183-0.035,'relative')
SY01.append(TM.generate('SFQFM',22),0.183+0.925+0.035,'relative')
SY01.append(TM.generate('BC-SlotFoil-V',25),1.65-0.626-0.925,'relative')
SY01.append(TM.generate('QFBS',30),0.15+0.026,'relative')
SY01.append(TM.generate('QFD',40),0.05,'relative')
SY01.append(TM.generate('HFB',50),0.1,'relative')
SY01.append(TM.generate('DBPM-C16',60),2.1,'relative')
SY01.append(TM.generate('QFD',70),0.1,'relative')
SY01.append(TM.generate('HFB',80),0.1,'relative')
SY01.append(TM.generate('QFD',90),2.3,'relative')
SY01.append(TM.generate('DBPM-C16',100),1.25-0.135,'relative')
SY01.append(TM.generate('AFBC3-noCor',200,{'angle':1,'design_angle':1,'e1':0.5,'e2':0.5,'BC':'Switch Yard 1'}),0.15+0.135,'relative')
#used for matching SY01.append(TM.generate('AFBC3',200,{'angle':1,'e1':0.5,'e2':0.5}),0.15,'relative')
SY01.append(TM.generate('QFD',210),1.5,'relative')
SY01.append(TM.generate('HFB',220),2.3,'relative')
SY01.append(TM.generate('QFD',230),0.1,'relative')
SY01.append(TM.generate('DBPM-C16',240),1.8,'relative')
SY01.append(TM.generate('HFB',250),0.4,'relative')
SY01.append(TM.generate('QFD',260),0.1,'relative')
SY01.append(TM.generate('QFS',270),0.05,'relative')
SY01.append(TM.generate('QFM',280),1.912,'relative')
SY01.append(TM.generate('SFQFM',282),0.,'relative')
SY01.append(TM.generate('DBPM-C16',290),3.0-0.45-0.012,'relative')
SY01.append(TM.generate('QFD',300),0.1,'relative')
SY01.append(TM.generate('AFBC3-noCor',400,{'angle':2,'design_angle':2,'e1':1,'e2':0.,'BC':'Switch Yard 1'}),1.15,'relative')
SY03.append(TM.generate('QFD',70),0.1,'relative')
SY03.append(TM.generate('Laser-Acceleration',80),0.13-0.106,'relative')
SY03.append(TM.generate('DBPM-C16',90),0.1-0.01+0.106,'relative')
SY03.append(TM.generate('QFD',100),0.1,'relative')
SY03.append(TM.generate('DWSC-C16',110),2.-0.02-0.064,'relative')
SY03.append(TM.generate('DALA',115),0.08,'relative')
SY03.append(TM.generate('DBPM-C16',120),0.08,'relative')
SY03.append(TM.generate('QFD',130),0.1,'relative')
SY03.append(TM.generate('DSCR-HR16',140),0.08+0.153,'relative')
SY02=LineContainer('SY02', 9.13)
SY02.append(TM.generate('QFD',10),1.0,'relative')
SY02.append(TM.generate('DBPM-C16',20),0.7-0.004,'relative')
SY02.append(TM.generate('AFL',100,{'angle':0.108,'design_angle':0.108,'e1':0,'e2':1.,'Tilt':math.asin(1)}),0.194,'relative')
SY02.append(TM.generate('QFD',110),1.29,'relative')
SY02.append(TM.generate('QFD',120),2.1,'relative')
SY02.append(TM.generate('AFL',200,{'angle':-0.108,'design_angle':-0.108,'e1':1,'e2':0.,'Tilt':math.asin(1)}),1.29,'relative')
SY02.append(TM.generate('DBPM-C16',210),0.103,'relative')
SY02.append(TM.generate('QFD',230),0.03+0.137+0.12,'relative')
SY03=LineContainer('SY03', 12.65)
SY03.append(TM.generate('QFD',10),0.45,'relative')
SY03.append(TM.generate('DBPM-C16',30),0.1+2.35,'relative')
SY03.append(TM.generate('QFD',40),0.1,'relative')
if self.alt < 1:
SY03.append(TM.generate('DBPM-C16',60),0.1+2.25,'relative')
else:
SY03.append(TM.generate('DCDR',50),0.876,'relative')
SY03.append(TM.generate('DBPM-C16',60),0.1+2.25-0.876-0.137,'relative')
SY03.append(TM.generate('QFD',70),0.1,'relative')
SY03.append(TM.generate('Laser-Acceleration',80),0.13-0.106,'relative')
SY03.append(TM.generate('DBPM-C16',90),0.1-0.01+0.106,'relative')
SY03.append(TM.generate('QFD',100),0.1,'relative')
SY03.append(TM.generate('DWSC-C16',110),2.-0.02-0.064,'relative')
SY03.append(TM.generate('DALA',115),0.08,'relative')
SY03.append(TM.generate('DBPM-C16',120),0.08,'relative')
SY03.append(TM.generate('QFD',130),0.1,'relative')
SY03.append(TM.generate('DSCR-HR16',140),0.08+0.153,'relative')
CL01=LineContainer('CL01', 12.050318)
@@ -1802,8 +1899,11 @@ class SwissFEL:
BD01.append(TM.generate('DSCR-OV38',210),5.5-1.2683-0.0044-0.94425,'relative')
BD01.append(TM.generate('AFP1',300,{'angle':0,'design_angle':0,'e1':0,'e2':1,'Tilt':math.asin(1)}),0.363+0.0064,'relative')
BD01.append(TM.generate('FE-Shielding',305),2.967+0.94425,'relative')
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]
if self.alt < 2:
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]
Athos=LineContainer('AT')
Athos.append(AtLine)
@@ -1940,15 +2040,16 @@ class SwissFEL:
P302.append(TM.generate('Beam-Dump-P3',420),8.25-0.0061)
elif self.alt >1: # rest of porthos extraction
SY03=LineContainer('SY03',11.4)
SY03=LineContainer('SY03',11.42)
#SY03=LineContainer('SY03',-0.2)
SY03.append(TM.generate('QFM',20),0.1+0.12,'relative')
SY03.append(TM.generate('SFQFM',30),0.,'relative')
SY03.append(TM.generate('QFM',120),2.4,'relative')
SY03.append(TM.generate('SFQFM',130),0.,'relative')
SY03.append(TM.generate('DBPM-C16',210),2.3,'relative')
SY03.append(TM.generate('DBPM-C16',210),2.2,'relative')
SY03.append(TM.generate('QFM',220),.0,'relative')
SY03.append(TM.generate('SFQFM',230),0.1,'relative')
SY03.append(TM.generate('QFM',320),2.4,'relative')
SY03.append(TM.generate('QFM',320),2.3,'relative')
SY03.append(TM.generate('SFQFM',330),0.,'relative')
SY04=LineContainer('SY04',0)