diff --git a/Python_Code/onlinemodel/layout/layout.py b/Python_Code/onlinemodel/layout/layout.py index 7781ba1..23d020f 100644 --- a/Python_Code/onlinemodel/layout/layout.py +++ b/Python_Code/onlinemodel/layout/layout.py @@ -305,8 +305,12 @@ import math # Layout 11.0.2 # Refinement on SF+ Lattice -# Marking new elements with the type SFPlus- in the description - +# 1) Marking new elements with the type SFPlus- in the description +# 2) add an additional AC resonant kick for Switchyard +# 3) Extended Athos Linac to 3 station - though it might be operated by 2 station with 6 cavities each +# 4) Moved dechirpers after beam stopper. +# 5) Extended after burner in Aramis to 3 elements +# 6) Added collimator spoilers in Athos class SwissFEL: def __init__(self,alt=0): @@ -734,6 +738,8 @@ class SwissFEL: 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) + seq = [a0, a1cor, a1, a2ab, a3cor, a3, a5alt, a6] + TM.define('U12-Cell-AB-Last', seq) a2after={'Element':'UAfterburner','sRef':0.0575,'Ref':'relative','index':30} seq=[a0,a1cor,a1,a2after,a3cor,a3,a5alt,a6] TM.define('UAfter',seq) @@ -1294,13 +1300,14 @@ class SwissFEL: else: SY01 = LineContainer('SY01', -0.2) SY01.append(TM.generate('QFD', 5), 0.2, 'relative') - SY01.append(TM.generate('QFD', 20), 3, 'relative') - SY01.append(TM.generate('QFD', 30), 3, 'relative') - SY01.append(TM.generate('QFD', 50), 3, 'relative') - SY01.append(TM.generate('QFD', 80), 4, 'relative') + SY01.append(TM.generate('QFD', 20), 3-0.25, 'relative') + SY01.append(TM.generate('QFD', 30), 3-0.25, 'relative') + SY01.append(TM.generate('QFD', 50), 3-0.25, 'relative') + SY01.append(TM.generate('QFD', 80), 4-0.25, 'relative') SY02 = LineContainer('SY02', -0.7502) - SY02.append(TM.generate('RESKICKDC', 10, {'design_kick': 0}), 0.285, 'relative') + SY02.append(TM.generate('RESKICKAC', 5, {'design_kick': 0}), 0.285, 'relative') + SY02.append(TM.generate('RESKICKDC', 10, {'design_kick': 0}), 0.0, 'relative') SY02.append(TM.generate('RESKICKAC', 20, {'design_kick': 0}), 0.0, 'relative') SY02.append(TM.generate('RESKICKDC', 30, {'design_kick': 0}), 0.0, 'relative') SY02.append(TM.generate('RESKICKAC', 40, {'design_kick': 0}), 0.0, 'relative') @@ -1595,9 +1602,9 @@ class SwissFEL: UN14=TM.generate('U15-Cell',0,{'Name':'UN14'}) if self.alt==2: UN15 = TM.generate('U15-Cell', 0, {'Name': 'UN15'}) - UN16 = TM.generate('U15-Cell', 0, {'Name': 'UN16'}) + UN16 = TM.generate('U12-Cell-AB', 0, {'Name': 'UN16'}) UN17 = TM.generate('U12-Cell-AB', 0, {'Name': 'UN17'}) - UN18 = TM.generate('U12-Cell-AB', 0, {'Name': 'UN18'}) + UN18 = TM.generate('U12-Cell-AB-Last', 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') @@ -1806,9 +1813,10 @@ class SwissFEL: CL01.append(TM.generate('QFD',190),2.5-0.0263,'relative') CL01.append(TM.generate('AFBC3',300,{'angle':-2.5,'design_angle':-2.5,'e1':1,'e2':0.,'BC':'Switch Yard 2'}),0.85-0.137+0.0263+0.05+0.237,'relative') - - DI01=LineContainer('DI01', 18.52) - + if self.alt < 2: + DI01=LineContainer('DI01', 18.52) + else: + DI01 = LineContainer('DI01', -0.2) DI01.append(TM.generate('DBCM-IR',10),0.4,'relative') DI01.append(TM.generate('DICT-C16',20),0.46-0.1,'relative') DI01.append(TM.generate('QFD',25),0.15,'relative') @@ -1833,31 +1841,29 @@ class SwissFEL: DI01.append(TM.generate('DBPM-C16',90),0.063,'relative') DI01.append(TM.generate('COL-Dechirper-V',100,{'gap':2e-3}),0.5+0.087,'relative') DI01.append(TM.generate('COL-Dechirper-H',200,{'gap':2e-3}),0.5+0.35,'relative') - DI01.append(TM.generate('DBPM-C16',210),0.5+0.019+0.115+0.327-0.437,'relative') - DI01.append(TM.generate('QFD',220),0.081,'relative') -# DI01.append(TM.generate('DBPM-C16',222),0.5+0.019+2+3.58-0.23-0.255-4.975,'relative') -# DI01.append(TM.generate('QFD',225),0.1-0.019,'relative') - DI01.append(TM.generate('QFD',230),1.25+0.7+0.37,'relative') - DI01.append(TM.generate('DBPM-C16',240),1.05-0.001,'relative') - DI01.append(TM.generate('QFD',250),0.101,'relative') - DI01.append(TM.generate('QFD',260),1.25,'relative') - DI01.append(TM.generate('DBPM-C16',270),1.05-0.021,'relative') - DI01.append(TM.generate('QFD',280),0.121,'relative') - DI01.append(TM.generate('DWSC-C16',290),0.1+0.729,'relative') - DI01.append(TM.generate('QFD',300),0.163+0.137+0.85-0.237-0.729,'relative') - DI01.append(TM.generate('DBPM-C16',310),0.04,'relative') + if self.alt < 2: + DI01.append(TM.generate('DBPM-C16', 210), 0.5 + 0.019 + 0.115 + 0.327 - 0.437, 'relative') + DI01.append(TM.generate('QFD', 220), 0.081, 'relative') + DI01.append(TM.generate('QFD', 230), 1.25 + 0.7 + 0.37, 'relative') + DI01.append(TM.generate('DBPM-C16', 240), 1.05 - 0.001, 'relative') + DI01.append(TM.generate('QFD', 250), 0.101, 'relative') + DI01.append(TM.generate('QFD',260),1.25,'relative') + DI01.append(TM.generate('DBPM-C16',270),1.05-0.021,'relative') + DI01.append(TM.generate('QFD',280),0.121,'relative') + DI01.append(TM.generate('DWSC-C16',290),0.1+0.729,'relative') + DI01.append(TM.generate('QFD',300),0.163+0.137+0.85-0.237-0.729,'relative') + DI01.append(TM.generate('DBPM-C16',310),0.04,'relative') # needs a wire scanner here - CB01=LineContainer('CB01',9.8) - CB01.append(TM.generate('TW Cav C-Band', 100), 0.035, 'relative') - CB01.append(TM.generate('TW Cav C-Band', 200), 0.049387, 'relative') - CB01.append(TM.generate('DBPM-C16', 220), 0.080613, 'relative') - CB01.append(TM.generate('QFD', 230), 0.049, 'relative') - CB01.append(TM.generate('TW Cav C-Band', 300), 0.096075 + 0.137 + 0.019, 'relative') - CB01.append(TM.generate('TW Cav C-Band', 400), 0.049387, 'relative') - CB01.append(TM.generate('DBPM-C16', 420), 0.099538, 'relative') - CB01.append(TM.generate('QFD', 430), 0.049, 'relative') - if self.alt < 2: + CB01=LineContainer('CB01',9.8) + CB01.append(TM.generate('TW Cav C-Band', 100), 0.035, 'relative') + CB01.append(TM.generate('TW Cav C-Band', 200), 0.049387, 'relative') + CB01.append(TM.generate('DBPM-C16', 220), 0.080613, 'relative') + CB01.append(TM.generate('QFD', 230), 0.049, 'relative') + CB01.append(TM.generate('TW Cav C-Band', 300), 0.096075 + 0.137 + 0.019, 'relative') + CB01.append(TM.generate('TW Cav C-Band', 400), 0.049387, 'relative') + CB01.append(TM.generate('DBPM-C16', 420), 0.099538, 'relative') + CB01.append(TM.generate('QFD', 430), 0.049, 'relative') CB02=LineContainer('CL02',9.8) CB02.append(TM.generate('COL-Dechirper-V',100,{'gap':2e-3}),0.5+0.528-0.003,'relative') CB02.append(TM.generate('COL-Dechirper-H',200,{'gap':2e-3}),0.5-0.528+0.875+0.003,'relative') @@ -1868,15 +1874,45 @@ class SwissFEL: CB02.append(TM.generate('DBPM-C16',420),0.099538+1.40146-1.09208,'relative') CB02.append(TM.generate('QFD',430),0.049,'relative') else: + DI01.append(TM.generate('DBPM-C16', 210), 0.5 + 0.019 + 0.115 + 0.327 - 0.437, 'relative') + DI01.append(TM.generate('QFD', 220), 0.081, 'relative') + DI01.append(TM.generate('QFD', 230), 1.25 + 0.7 + 0.37-0.3611, 'relative') + DI01.append(TM.generate('DBPM-C16', 240), 1.05 - 0.001, 'relative') + DI01.append(TM.generate('QFD', 250), 0.101, 'relative') + # needs a wire scanner here + CB01 = LineContainer('CB01', 9.8) + CB01.append(TM.generate('TW Cav C-Band', 100), 0.035, 'relative') + CB01.append(TM.generate('TW Cav C-Band', 200), 0.049387, 'relative') + CB01.append(TM.generate('DBPM-C16', 220), 0.080613, 'relative') + CB01.append(TM.generate('QFD', 230), 0.049, 'relative') + CB01.append(TM.generate('COL-TR-16', 240), 0.019, 'relative') + CB01.append(TM.generate('TW Cav C-Band', 300), 0.096075, 'relative') + CB01.append(TM.generate('TW Cav C-Band', 400), 0.049387, 'relative') + CB01.append(TM.generate('DBPM-C16', 420), 0.099538, 'relative') + CB01.append(TM.generate('QFD', 430), 0.049, 'relative') + CB01.append(TM.generate('COL-TR-16', 440), 0.019, 'relative') CB02 = LineContainer('CB02', 9.8) CB02.append(TM.generate('TW Cav C-Band', 100), 0.035, 'relative') CB02.append(TM.generate('TW Cav C-Band', 200), 0.049387, 'relative') CB02.append(TM.generate('DBPM-C16', 220), 0.080613, 'relative') CB02.append(TM.generate('QFD', 230), 0.049, 'relative') - CB02.append(TM.generate('TW Cav C-Band', 300), 0.096075 + 0.137 + 0.019, 'relative') + CB02.append(TM.generate('COL-TR-16', 240), 0.019, 'relative') + CB02.append(TM.generate('TW Cav C-Band', 300), 0.096075, 'relative') CB02.append(TM.generate('TW Cav C-Band', 400), 0.049387, 'relative') CB02.append(TM.generate('DBPM-C16', 420), 0.099538, 'relative') CB02.append(TM.generate('QFD', 430), 0.049, 'relative') + CB02.append(TM.generate('COL-TR-16', 440), 0.019, 'relative') + CB03 = LineContainer('CB03', 9.8) + CB03.append(TM.generate('TW Cav C-Band', 100), 0.035, 'relative') + CB03.append(TM.generate('TW Cav C-Band', 200), 0.049387, 'relative') + CB03.append(TM.generate('DBPM-C16', 220), 0.080613, 'relative') + CB03.append(TM.generate('QFD', 230), 0.049, 'relative') + CB03.append(TM.generate('COL-TR-16', 240), 0.019, 'relative') + CB03.append(TM.generate('TW Cav C-Band', 300), 0.096075, 'relative') + CB03.append(TM.generate('TW Cav C-Band', 400), 0.049387, 'relative') + CB03.append(TM.generate('DBPM-C16', 420), 0.099538, 'relative') + CB03.append(TM.generate('QFD', 430), 0.049, 'relative') + CB03.append(TM.generate('COL-TR-16', 440), 0.019, 'relative') # here the missing part of the Athos comes only in the later phase (planned and final) @@ -1884,31 +1920,43 @@ class SwissFEL: LMA01 = 0 MA01=LineContainer('MA01',LMA01) angle=0 - MA01.append(TM.generate('DBPM-C8',10),0.293+0.102-0.257,'relative') - MA01.append(TM.generate('COL-Dechirper-V',15,{'gap':2e-3}),0.5+0.257-0.202,'relative') - MA01.append(TM.generate('DBPM-C8',20),0.5-0.051-0.1285+0.202,'relative') if self.alt > 1: - MA01.append(TM.generate('COL-Dechirper-H',25,{'gap':2e-3}),0.5+0.1285-0.2155,'relative') - MA01.append(TM.generate('DSCR-HR8',30),0.28-0.037-0.051+0.2155,'relative') - else: - MA01.append(TM.generate('DSCR-HR8',30),0.28-0.037-0.051+0.2155+0.5+0.1285-0.2155+1,'relative') + MA01.append(TM.generate('DSCR-HR8', 30), 0,'relative') + MA01.append(TM.generate('AFP1', 100, {'angle': 0, 'e1': 0, 'e2': 1}), 0.1-0.0709, 'relative') + MA01.append(TM.generate('Beam-Stopper-Sat', 105), 0.881, 'relative') + MA01.append(TM.generate('DBPM-C8', 110), 1.477, 'relative') + MA01.append(TM.generate('QFF', 120), 0.06, 'relative') + MA01.append(TM.generate('COL-Dechirper-V', 122, {'gap': 2e-3}), 0.5, 'relative') + MA01.append(TM.generate('COL-Dechirper-H', 125, {'gap': 2e-3}), 0.5, 'relative') + MA01.append(TM.generate('DBPM-C8', 130), 1, 'relative') + MA01.append(TM.generate('QFF', 140), 0.06, 'relative') + MA01.append(TM.generate('COL-Dechirper-V', 142, {'gap': 2e-3}), 0.5, 'relative') + MA01.append(TM.generate('COL-Dechirper-H', 145, {'gap': 2e-3}), 0.5, 'relative') + MA01.append(TM.generate('DBPM-C8', 150), 1., 'relative') + MA01.append(TM.generate('QFF', 160), 0.06, 'relative') + MA01.append(TM.generate('DBPM-C8', 170), 4., 'relative') + MA01.append(TM.generate('QFF', 180), 0.06, 'relative') + + else: + MA01.append(TM.generate('DBPM-C8', 10), 0.293 + 0.102 - 0.257, 'relative') + MA01.append(TM.generate('COL-Dechirper-V', 15, {'gap': 2e-3}), 0.5 + 0.257 - 0.202, 'relative') + MA01.append(TM.generate('DBPM-C8', 20), 0.5 - 0.051 - 0.1285 + 0.202, 'relative') + MA01.append(TM.generate('DSCR-HR8',30),0.28-0.037-0.051+0.2155+0.5+0.1285-0.2155+1,'relative') + MA01.append(TM.generate('DBPM-C8', 40), 0.12, 'relative') + MA01.append(TM.generate('QFF', 50), 0.06, 'relative') + MA01.append(TM.generate('AFP1', 100, {'angle': 0, 'e1': 0, 'e2': 1}), 0.175 + 0.177, 'relative') + MA01.append(TM.generate('Beam-Stopper-Sat', 105), 0.881, 'relative') + MA01.append(TM.generate('DBPM-C8', 110), 1.477, 'relative') + MA01.append(TM.generate('QFF', 120), 0.06, 'relative') + MA01.append(TM.generate('DBPM-C8', 130), 4, 'relative') + MA01.append(TM.generate('QFF', 140), 0.06, 'relative') + MA01.append(TM.generate('DBPM-C8', 150), 4., 'relative') + MA01.append(TM.generate('QFF', 160), 0.06, 'relative') + MA01.append(TM.generate('DBPM-C8', 170), 4., 'relative') + MA01.append(TM.generate('QFF', 180), 0.06, 'relative') - MA01.append(TM.generate('DBPM-C8',40),0.12,'relative') - MA01.append(TM.generate('QFF',50),0.06,'relative') - MA01.append(TM.generate('AFP1',100,{'angle':0,'e1':0,'e2':1}),0.175+0.177,'relative') - MA01.append(TM.generate('Beam-Stopper-Sat',105),0.881,'relative') angcal=0.1 - - MA01.append(TM.generate('DBPM-C8',110),1.477,'relative') - MA01.append(TM.generate('QFF',120),0.06,'relative') - MA01.append(TM.generate('DBPM-C8',130),4,'relative') - MA01.append(TM.generate('QFF',140),0.06,'relative') - MA01.append(TM.generate('DBPM-C8',150),4.,'relative') - MA01.append(TM.generate('QFF',160),0.06,'relative') - MA01.append(TM.generate('DBPM-C8',170),4.,'relative') - MA01.append(TM.generate('QFF',180),0.06,'relative') - MA01.append(TM.generate('QFF',230),1-0.18+0.4043,'relative') MA01.append(TM.generate('DBPM-C8',240),0.06+0.6,'relative') MA01.append(TM.generate('QFF',250),1-0.18-0.16-0.6,'relative') @@ -1918,10 +1966,8 @@ class SwissFEL: MA01.append(TM.generate('AFBC3',600,{'angle':2.3,'design_angle':2.3,'e1':1,'e2':0,'BC':'Athos EEHG first BC'}),3.47,'relative') MA01.append(TM.generate('QFD',610),0.06+0.22,'relative') # reserve space for 9.5 m chicane (4x 0.5m Dipole, 2x3m long drift, 3x 0.5m short drift) MA01.append(TM.generate('DBPM-C16',620),0.2+0.0438,'relative') - MA01.append(TM.generate('QFDM',630),1-0.18-0.17-0.3-0.25-0.0438,'relative') - MA01.append(TM.generate('QFD-short',640),1-0.18-0.17-0.25-0.07+0.05,'relative') - - + MA01.append(TM.generate('QFDM',630),1-0.18-0.17-0.3-0.25-0.0438,'relative') + MA01.append(TM.generate('QFD-short',640),1-0.18-0.17-0.25-0.07+0.05,'relative') UN04=LineContainer('UN04',3.0247+0.0027+0.0925+0.07+0.0852+0.0196+0.0968+0.0032) # modulator UN04.append(TM.generate('DBPM-C16',10),0.008+0.0968-0.05,'relative') UN04.append(TM.generate('DSCR-HR16',20),0.05+0.0293+0.1925-0.2218+0.07,'relative') @@ -2031,7 +2077,7 @@ class SwissFEL: 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, + AtLine = [SY01, SY02, SY03, BC01, CL01, DI01, CB01, CB02, CB03, MA01, UN04, UN05, UN06, UN07, UN08, UN09, UN10, UN11, UN12, UN13, UN14, UN15, SS, UN16, UN17, UN18, UN19, UN20, UN21, UN22, UN23, UN24, UN25, MA02, BD01] Athos=LineContainer('AT') Athos.append(AtLine)