Layout 11.0.6 - Added diagnostics into phase final for switchyard and optimized quadrupole types according to required field strength
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 7s

This commit is contained in:
2026-01-15 11:23:06 +01:00
parent d6cc18e289
commit c362776d3f

View File

@@ -325,10 +325,16 @@ import math
# Layout 11.0.5
# 1) Implement moved skew quad in phase current to match installation in winter shutdown 2025/2026
# Layout 11.0.6
# 1) Optimize quadrupole type in switchyard for strength
# 2) Instrument SATSY01-SATBC01 with diagnostics
# 3) Instrument Switchyard with addition quadrupoles (sextupole, skew quadrupoles, QFM correctors)
# 4) Instument S20BC01 with diagnostics.
class SwissFEL:
def __init__(self,alt=0):
self.alt=alt
self.Version='11.0.5'
self.Version='11.0.6'
def Types(self,TM):
# type definitions for the SwissFEL lattice
@@ -1320,9 +1326,11 @@ class SwissFEL:
else:
SY01 = LineContainer('SY01', -0.2)
SY01.append(TM.generate('QFD', 10), 0.2, 'relative')
SY01.append(TM.generate('QFD', 20), 2, 'relative')
SY01.append(TM.generate('QFD', 30), 2, 'relative')
SY01.append(TM.generate('DBPM-C16', 20), 1.8, 'relative')
SY01.append(TM.generate('QFD', 30), 0.1, 'relative')
SY01.append(TM.generate('QFD', 40), 2, 'relative')
SY01.append(TM.generate('DBPM-C16', 50), 1.8, 'relative')
SY01.append(TM.generate('QFD', 60), 0.1, 'relative')
SY02 = LineContainer('SY02', -0.7502)
SY02.append(TM.generate('RESKICKAC', 5, {'design_kick': 0}), 0.285, 'relative')
@@ -1368,8 +1376,9 @@ class SwissFEL:
BC01.append(TM.generate('QFD', 10), 3.5+2.25, 'relative')
BC01.append(TM.generate('DBPM-C16', 20), 0.2+2, 'relative')
BC01.append(TM.generate('QFD', 30), 1.2, 'relative')
BC01.append(TM.generate('DBPM-C16', 40), 2.5-0.985-0.3+2, 'relative')
BC01.append(TM.generate('QFD', 50), 0.2, 'relative')
BC01.append(TM.generate('DCDR-BC1', 40), 2.5 - 0.985 - 0.3 + 2-0.237, 'relative')
BC01.append(TM.generate('DBPM-C16', 50), 0.1, 'relative')
BC01.append(TM.generate('QFD', 60), 0.2, 'relative')
BC02 = LineContainer('BC02', -0.521)
varC = VariableContainer(7, 3.15)
@@ -1457,14 +1466,16 @@ class SwissFEL:
CB14 = TM.generate('CB-Lin3-Cell-incomplete', 0, {'Name': 'CB14'})
CB15 = LineContainer('CB15', 9.1)
CB15.append(TM.generate('QFM',10),0.6-0.45,'relative')
CB15.append(TM.generate('QFM',20),0.75-0.45,'relative')
CB15.append(TM.generate('DBPM-C16', 15), 0.75-0.45-0.2, 'relative')
CB15.append(TM.generate('QFM',20),0.1,'relative')
CB15.append(TM.generate('RESKICKDC',30,{'design_kick':0}),0.1,'relative')
CB15.append(TM.generate('RESKICKAC',40,{'design_kick':0}),0.0,'relative')
CB15.append(TM.generate('RESKICKDC',50,{'design_kick':0}),0.0,'relative')
CB15.append(TM.generate('RESKICKAC',60,{'design_kick':0}),0.0,'relative')
CB15.append(TM.generate('RESKICKDC',70,{'design_kick':0}),0.0,'relative')
CB15.append(TM.generate('QFA',100),1,'relative')
CB15.append(TM.generate('QFA',200),3.,'relative')
CB15.append(TM.generate('DBPM-C16', 110), 3-0.355, 'relative')
CB15.append(TM.generate('QFA',200),0.1,'relative')
CB16=LineContainer('SY01', 9.1-0.665)
if self.alt > 0: # porthos extraction
@@ -1631,7 +1642,7 @@ class SwissFEL:
UN20.append(TM.generate('DBAM-FS8', 210), 0., 'relative')
UN20.append(TM.generate('QFM', 220), 3-0.107-2.7-0.15, 'relative')
angle = 0
BD01 = LineContainer('BD02', 0)
BD01 = LineContainer('BD01', 0)
BD01.append(TM.generate('DBPM-C16', 5),0.1,'relative')
BD01.append(TM.generate('QFF', 10), 0.1+0.043, 'relative')
BD01.append(TM.generate('QFF', 20), 1.5-0.1125, 'relative')
@@ -1710,50 +1721,69 @@ class SwissFEL:
SY01.append(Alignment({'dy': 0.01, 'Tag': 'ALIG', 'index': 1}))
dx=0.5
dy=-0.5
SY01.append(TM.generate('QFM-veryshort', 10), 4+dx, 'relative') # before BPM, after, Sex, Qsk, cor
SY01.append(TM.generate('QFM-veryshort', 20), 4-dx, 'relative') # before BPM, after cor
SY01.append(TM.generate('QFM-veryshort', 30), 2.5+dy, 'relative') # before BPM, after Sex,Qsk,cor
SY01.append(TM.generate('QFM-veryshort', 40), 2.5-dy, 'relative') # before BPM, magnet is QFD.
# saftety copy
# SY01.append(TM.generate('QFM-veryshort', 10), 4, 'relative') # before BPM, after, Sex, Qsk, cor
# SY01.append(TM.generate('QFM-veryshort', 20), 4, 'relative') # before BPM, after cor
# SY01.append(TM.generate('QFM-veryshort', 30), 2.5, 'relative') # before BPM, after Sex,Qsk,cor
# SY01.append(TM.generate('QFM-veryshort', 40), 2.5, 'relative') # before BPM, magnet is QFD.
SY01.append(TM.generate('AFBC3-noCor', 100, {'angle': -2, 'design_angle': -2, 'e1': 1, 'e2': 0., 'BC': 'Switch Yard 1'}), 0.3,'relative')
SY01.append(TM.generate('DBPM-C16',10),4+dx-0.1-0.1,'relative')
SY01.append(TM.generate('QFM-veryshort', 20), 0.1, 'relative')
SY01.append(TM.generate('HFB', 30), 0.1, 'relative')
SY01.append(TM.generate('QFBS', 40), 0.1, 'relative')
SY01.append(TM.generate('QFM-veryshort', 50), 4-dx-0.4, 'relative')
SY01.append(TM.generate('SFQFM', 60), 0.1, 'relative')# before BPM, after cor
SY01.append(TM.generate('DBPM-C16', 70), 2.5+dy - 0.1 - 0.1-0.4, 'relative')
SY01.append(TM.generate('QFM-veryshort', 80), 0.1, 'relative') # before BPM, after Sex,Qsk,cor
SY01.append(TM.generate('HFB', 90), 0.1, 'relative')
SY01.append(TM.generate('QFBS', 100), 0.1, 'relative')
SY01.append(TM.generate('QFD', 110), 2.5-dy+0.05-0.4, 'relative') # before BPM, magnet is QFD.
SY01.append(TM.generate('AFBC3-noCor', 200, {'angle': -2, 'design_angle': -2, 'e1': 1, 'e2': 0., 'BC': 'Switch Yard 1'}), 0.3,'relative')
SY02 = LineContainer('SY02', 66-1.7555-6.3852-9.8+6.25)
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), 1.5, 'relative')
SY02.append(TM.generate('QFM-veryshort', 220), 4.5, 'relative')
SY02.append(TM.generate('QFM-veryshort', 230), 1.5, 'relative')
SY02.append(TM.generate('QFM-veryshort', 300), 38-9.8+6.25, 'relative')
SY02.append(TM.generate('QFM-veryshort', 310), 1.5, 'relative')
SY02.append(TM.generate('QFM-veryshort', 320), 4.5-1, 'relative')
SY02.append(TM.generate('QFM-veryshort', 330), 1.5+1., 'relative')
SY02.append(TM.generate('QFD', 210), 0.35, 'relative')
SY02.append(TM.generate('DBPM-C16', 220), 1.55-.2, 'relative')
SY02.append(TM.generate('QFD', 230), 0.1, 'relative')
SY02.append(TM.generate('QFD', 240), 4.55, 'relative')
SY02.append(TM.generate('DBPM-C16', 250), 1.55 - .2, 'relative')
SY02.append(TM.generate('QFD', 260), 0.1, 'relative')
SY02.append(TM.generate('DBPM-C16', 270), 17, 'relative')
SY02.append(TM.generate('DBPM-C16', 280), 17, 'relative')
SY02.append(TM.generate('DSCR-HR16', 290), 0.1, 'relative')
SY02.append(TM.generate('QFD', 300), 0.063, 'relative')
SY02.append(TM.generate('QFD', 310), 1.55, 'relative')
SY02.append(TM.generate('DBPM-C16', 320), 4.55-1.2, 'relative')
SY02.append(TM.generate('QFD', 330), 0.1, 'relative')
SY02.append(TM.generate('QFD', 340), 1.55+1., 'relative')
SY03 = LineContainer('SY03', 0)
SY03 = LineContainer('SY03', -0.1)
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('DBPM-C16', 110), 3.5-0.2, 'relative')
SY03.append(TM.generate('QFM-veryshort', 120), 0.1, 'relative')
SY03.append(TM.generate('HFB', 130), 0.1, '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-0.2,'relative')
SY03.append(TM.generate('DBPM-C16', 210), 0.55-0.2, 'relative')
SY03.append(TM.generate('QFD', 220), 0.1, 'relative')
SY03.append(TM.generate('TW Cav C-Band',300),0.1,'relative')
SY03.append(TM.generate('QFM-veryshort', 310), 3.-0.4-0.965-0.785, 'relative')
SY03.append(TM.generate('QFD', 310), 0.9, 'relative')
SY03.append(TM.generate('TW Cav C-Band', 400), 0.1, 'relative')
SY03.append(TM.generate('QFM-veryshort', 410), 3.-0.4-0.965-0.785, 'relative')
BC01 = LineContainer('BC01',-0.2)
angAT=0.5
SY03.append(TM.generate('DCDR-BC1', 410), 0.9 - 0.2-0.237, 'relative')
SY03.append(TM.generate('DBPM-C16', 420), 0.1, 'relative')
SY03.append(TM.generate('QFD', 430), 0.1, 'relative')
varSYBC = VariableContainer(5, 0)
BC01 = LineContainer('BC01',-0.3)
angAT=0.5
varSYBC1 = VariableContainer(5, 2.1)
varSYBC2 = VariableContainer(5, 0)
BC01.append(TM.generate('AFBC3-noCor', 100,{'angle': -angAT, 'design_angle': -angAT, 'e1': 1, 'e2': 0., 'BC': 'Switch Yard 3'}), 0.5,'relative')
BC01.append(TM.generate('AFBC3-noCor', 200,{'angle': angAT, 'design_angle': angAT, 'e1': 0, 'e2': 1., 'BC': 'Switch Yard 3'}), 0,varSYBC)
BC01.append(TM.generate('DBPM-C16', 110), 2, 'relative')
BC01.append(TM.generate('AFBC3-noCor', 200,{'angle': angAT, 'design_angle': angAT, 'e1': 0, 'e2': 1., 'BC': 'Switch Yard 3'}), 0,varSYBC1)
BC01.append(TM.generate('AFBC3-noCor', 300,{'angle': angAT, 'design_angle': angAT, 'e1': 1, 'e2': 0., 'BC': 'Switch Yard 3'}), 0.5-0.2,'relative')
BC01.append(TM.generate('AFBC3-noCor', 400,{'angle': -angAT, 'design_angle': -angAT, 'e1': 0, 'e2': 1., 'BC': 'Switch Yard 3'}), 0,varSYBC)
BC01.append(TM.generate('QFM-veryshort', 410), 0.1, 'relative')
BC01.append(TM.generate('QFM-veryshort', 420), 1.8+0.5-0.6, 'relative')
BC01.append(TM.generate('QFM-veryshort', 430), 1.8 + 0.5-0.6, 'relative')
BC01.append(TM.generate('QFM-veryshort', 440), 1.8+0.58699+4.5895e-3-0.6, 'relative')
BC01.append(TM.generate('AFBC3-noCor', 400,{'angle': -angAT, 'design_angle': -angAT, 'e1': 0, 'e2': 1., 'BC': 'Switch Yard 3'}), 0,varSYBC2)
BC01.append(TM.generate('QFD', 410), 0.15, 'relative')
BC01.append(TM.generate('DBPM-C16', 420), 1.85+0.5-0.6 - 0.2, 'relative')
BC01.append(TM.generate('QFD', 430), 0.1, 'relative')
BC01.append(TM.generate('DCDR-BC2', 440), 1.85 + 0.5-0.6-0.237, 'relative')
BC01.append(TM.generate('QFD', 450), 0.1, 'relative')
BC01.append(TM.generate('DBPM-C16', 460), 1.85+0.58699+4.5895e-3-0.6 - 0.2, 'relative')
BC01.append(TM.generate('QFD', 470), 0.1, 'relative')
else:
ddx=0.7502
SY01=LineContainer('SY01', 29.100107+ddx+0.12+0.000049)
@@ -2601,8 +2631,12 @@ class SwissFEL:
Parameters['SINXB01.RACC100']={'Gradient':18.96e6,'Phase':265.93}
Parameters['SINXB01.RACC200']={'Gradient':18.96e6,'Phase':265.93}
for cell in (100,200,300,400):
ele='SINCB%2.2d.RACC%3.3d' % (1,cell)
Parameters[ele]={'Gradient':28.14e6,'Phase':68.55}
for idx in (1,2,3,4,5,6,7,8,9):
for idx in (1,2,3,4,5,6,7,8,9,10,11):
for cell in (100,200,300,400):
ele='S10CB%2.2d.RACC%3.3d' % (idx,cell)
Parameters[ele]={'Gradient':28.14e6,'Phase':68.55}
@@ -2612,7 +2646,7 @@ class SwissFEL:
ele='S20CB%2.2d.RACC%3.3d' % (idx,cell*100)
Parameters[ele]={'Gradient':27e6,'Phase':90}
for idx in (1,2,3,4,5,6,7,8,9,10,11,12,13):
for idx in (1,2,3,4,5,6,7,8,9,10,11,12,13,14):
for cell in range (1,5):
ele='S30CB%2.2d.RACC%3.3d' % (idx,cell*100)
Parameters[ele]={'Gradient':28e6,'Phase':90}