New lattice 11.0.3 to try to solve the conflict of the bunch compressor BC2 with the switchyard extraction.
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 5s

This commit is contained in:
2025-12-02 16:26:39 +01:00
parent c8d6ed3c5f
commit 685682794c
5 changed files with 65 additions and 42 deletions

View File

@@ -7,9 +7,9 @@ alphay0=0;
Twiss0: beta0,betx=betax0,alfy=alphay0,bety=betay0,alfy=alphay0;
Twisssep: beta0,betx=40,alfx=0,bety=60,alfy=5;
!Twisssep: beta0,betx=40,alfx=0,bety=60,alfy=5;
Twisssep: beta0,betx=10,alfx=-0.2,bety=15,alfy=1;
y_sep=0.01;
@@ -54,14 +54,16 @@ S20SY02.MKAC040.c1:= SYKICK*3;
S20SY02.MKDC050.c1:= SYKICK*2;
s20bc01.mqua010.k1:=1.;
MATCH,SEQUENCE=Swissfel,range=s20sy02$start/s20bc02$end,beta0=twisssep;
VARY,NAME=s20bc01.mqua010.k1,STEP=0.0001;
VARY,NAME=s20bc01.mqua030.k1,STEP=0.0001;
VARY,NAME=s20bc01.mqua050.k1,STEP=0.0001;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc02$end,betx<3;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc02$end,bety<100;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc01$end,betx<150;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc01$end,bety<50;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc02$end,betx<4;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc02$end,bety<90;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc01$end,betx<250;
CONSTRAINT,SEQUENCE=SwissFEL,range= s20bc01$end,bety<20;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
@@ -69,6 +71,7 @@ twiss,SEQUENCE=swissfel,range=s20sy02$start/S20BC02$END,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
muLin3=0.2;
pol = 1;
s20cb01.mqua430.k1=0.5*pol;

View File

@@ -5,12 +5,13 @@ betay0=10;
alphay0=0;
Twiss0: beta0,betx=betax0,alfy=alphay0,bety=betay0,alfy=alphay0;
Twisssep: beta0,betx=40,alfx=0,bety=60,alfy=5;
!Twisssep: beta0,betx=40,alfx=0,bety=60,alfy=5;
Twisssep: beta0,betx=10,alfx=-0.2,bety=15,alfy=1;
y_sep=0.01;
py_sep=0.0;
dy_sep=-y_sep;
dpy_sep=-py_sep;
!dy_sep=-y_sep;
!dpy_sep=-py_sep;
S20SY02.MKDC010.cory := SYKICK*2;
@@ -48,13 +49,14 @@ S20SY02.MKDC030.c1= SYKICK*2;
S20SY02.MKAC040.c1= SYKICK*3;
S20SY02.MKDC050.c1= SYKICK*2;
twiss,SEQUENCE=swissfel,range=s20sy02$start/S20SY02$END,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
plot,haxis=s,vaxis=y,dy,range=#s/#e,colour=100;
satsy01.mqua040.k1=0.8;
satsy01.mqua040.k1=0.7;
MATCH,SEQUENCE=Swissfel,range=s20sy02$start/satsy02$end,beta0=twisssep;
VARY,NAME=satsy01.mqua010.k1,STEP=0.0001;
@@ -71,6 +73,8 @@ LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
twiss,SEQUENCE=swissfel,range=s20sy02$start/Satsy02.mbnd200,beta0=twisssep;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100;
@@ -84,9 +88,9 @@ CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mbnd200,DX=0.0;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
L = 38-9.8;
L = 38-9.8+6.25;
alpha=1.05;
alpha=1.0;
beta = L*alpha;
MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satsy03$end,beta0=twisssep;
VARY,NAME=satsy02.mqua205.k1,STEP=0.0001;
@@ -122,7 +126,6 @@ plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100;
MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satbc01$end,beta0=twisssep;
VARY,NAME=satsy03.mqua210.k1,STEP=0.0001;
VARY,NAME=satsy03.mqua310.k1,STEP=0.0001;

View File

@@ -189,20 +189,28 @@ S10CB11.MQUA230.k1=S10CB02.MQUA430.k1;
twiss,SEQUENCE=swissfel,range=#s/s10cb10$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
s20sy01.mqua010.k1:=0;
s20sy01.mqua020.k1:=0;
s20sy01.mqua030.k1:=0;
s20sy01.mqua040.k1:=0;
MATCH,SEQUENCE=SwissFEL,range=#s/s20sy02$start,beta0 = Twiss0;
VARY,NAME=s20sy01.mqua005.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s20sy01.mqua010.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s20sy01.mqua020.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s20sy01.mqua030.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s20sy01.mqua050.k1,STEP=0.0001,lower=-5.5,upper=5.5;
VARY,NAME=s20sy01.mqua080.k1,STEP=0.0001,lower=-5.5,upper=5.5;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,betx=40;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,alfx=0;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,bety=60;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,alfy=5;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01.mqua020$end,bety<80;
VARY,NAME=s20sy01.mqua040.k1,STEP=0.0001,lower=-5.5,upper=5.5;
!VARY,NAME=s20sy01.mqua080.k1,STEP=0.0001,lower=-5.5,upper=5.5;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,betx=10;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,alfx=-0.2;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,bety=15;
CONSTRAINT,SEQUENCE=swissfel,range=s20sy01$end,alfy=1;
!CONSTRAINT,SEQUENCE=swissfel,range=s20sy01.mqua020$end,bety<80;
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
ENDMATCH;
!Twisssep: beta0,betx=20,alfx=-0.5,bety=15,alfy=1;
twiss,SEQUENCE=swissfel,range=#s/s20sy01$end,beta0 = Twiss0;
plot,haxis=s,vaxis=betx,bety,range=s10cb08$start/#e,colour=100;

View File

@@ -10,7 +10,8 @@ def match(athos=True):
if athos:
target='SATBD01'
else:
target='SARBD01'
target='SARUN20'
print(target)
om.setBranch(target, 'SINLH01')
madx = CMadX()
madx.E0 = 2000

View File

@@ -312,10 +312,17 @@ import math
# 5) Extended after burner in Aramis to 3 elements
# 6) Added collimator spoilers in Athos
# Layout 11.0.3
# Solving conflicts in SF+
# 1) Moved switchyard extraction 6.25 m upstream while keeping BC2 position the same
# 2) Extended drift in SATSY02 by 6.25 m
# 3) Add space between septum and the quadrupoles for matching into Linac 2
# 4) Replaced X-band cavities in SATSY with C-band cavities
class SwissFEL:
def __init__(self,alt=0):
self.alt=alt
self.Version='11.0.2'
self.Version='11.0.3'
def Types(self,TM):
# type definitions for the SwissFEL lattice
@@ -1299,11 +1306,10 @@ class SwissFEL:
SY02.append(TM.generate('MKBR', 201), 0., 'relative')
else:
SY01 = LineContainer('SY01', -0.2)
SY01.append(TM.generate('QFD', 5), 0.2, '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')
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('QFD', 40), 2, 'relative')
SY02 = LineContainer('SY02', -0.7502)
SY02.append(TM.generate('RESKICKAC', 5, {'design_kick': 0}), 0.285, 'relative')
@@ -1346,10 +1352,10 @@ class SwissFEL:
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', 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, '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')
BC02 = LineContainer('BC02', -0.521)
@@ -1689,17 +1695,19 @@ class SwissFEL:
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') # 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.
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')
SY02 = LineContainer('SY02', 66-1.7555-6.3852-9.8)
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')
@@ -1707,7 +1715,7 @@ class SwissFEL:
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, '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')
@@ -1717,15 +1725,15 @@ class SwissFEL:
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('TW Cav X-Band',300),0.4,'relative')
SY03.append(TM.generate('QFM-veryshort', 310), 2-0.4-0.965, 'relative')
SY03.append(TM.generate('TW Cav X-Band', 400), 0.4, 'relative')
SY03.append(TM.generate('QFM-veryshort', 410), 2-0.4-0.965, '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('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
varSYBC = VariableContainer(6, 0)
varSYBC = 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('AFBC3-noCor', 300,{'angle': angAT, 'design_angle': angAT, 'e1': 1, 'e2': 0., 'BC': 'Switch Yard 3'}), 0.5-0.2,'relative')