Lattice 11.1.0 - Move P3 line to phase current
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 6s

This commit is contained in:
2026-01-29 15:10:23 +01:00
parent 3b588bb6d5
commit d2588ccdd7

View File

@@ -337,10 +337,13 @@ import math
# 3) Add an additional QFM corrector
# 4) Add the Diagnostic test chambers in SARMA01 in phase planned.
# Layout 11.1.1
# Move P3 arm to phase current
class SwissFEL:
def __init__(self,alt=0):
self.alt=alt
self.Version='11.0.7'
self.Version='11.1.0'
def Types(self,TM):
# type definitions for the SwissFEL lattice
@@ -1493,12 +1496,12 @@ class SwissFEL:
CB15.append(TM.generate('QFA',200),0.1,'relative')
CB16=LineContainer('SY01', 9.1-0.665)
if self.alt > 0: # porthos extraction
if self.alt > 1:
CB16.append(TM.generate('AFSPO',100,{'angle':0,'design_angle':-2.55,'e1':0,'e2':0,'branch':True,'BC':'Switch Yard 2'}),0.35,'relative')
else:
CB16.append(TM.generate('B190',100,{'angle':0,'design_angle':-2.55,'e1':0,'e2':0,'branch':True}),0.1-0.00022,'relative')
CB16.append(TM.generate('MKBR',101),0.,'relative')
if self.alt > 1:
CB16.append(TM.generate('AFSPO',100,{'angle':0,'design_angle':-2.55,'e1':0,'e2':0,'branch':True,'BC':'Switch Yard 2'}),0.35,'relative')
else:
CB16.append(TM.generate('B190',100,{'angle':0,'design_angle':-2.55,'e1':0,'e2':0,'branch':True}),0.1-0.00022,'relative')
CB16.append(TM.generate('MKBR',101),0.,'relative')
L3Line =[CB01,CB02,CB03,CB04,CB05,CB06,CB07,CB08,CB09,CB10,CB11,CB12,CB13,CB14,CB15,CB16]
Linac30=LineContainer('30')
@@ -2173,7 +2176,7 @@ class SwissFEL:
AthosDump=LineContainer('AT')
AthosDump.append(BD02,0,'relative')
###############################################################################3
#
# Porthos Branch for FCC experiment
#
@@ -2181,74 +2184,74 @@ class SwissFEL:
d1 = 6-0.3
d2 = 1.4+0.5-0.3-0.1
doff=0
if self.alt == 1:
if self.alt < 2:
doff = 0.25024755-0.00021974
if self.alt >0:
SY01=LineContainer('SY01', 0)
# first group
if self.alt >1:
SY01=LineContainer('SY01', 0)
# first group
if self.alt >1:
SY01.append(Alignment({'dy':0.01,'Tag':'ALIG','index':1}))
SY01.append(TM.generate('DBPM-C16',10),d1+0.2-0.2-doff-0.7+0.06-0.0002,'relative')
if self.alt >1:
SY01.append(TM.generate('HFB',20),0.1-0.06,'relative')
else:
SY01.append(TM.generate('PHLD',20),0.2-0.06,'relative')
SY01.append(TM.generate('QFM-short',30),0.2,'relative')
SY01.append(TM.generate('SFQFM',40),0.,'relative')
if self.alt > 1:
SY01.append(TM.generate('QFBS',50),0.2002,'relative')
else:
SY01.append(TM.generate('PHLD',50),0.3002,'relative')
SY01.append(TM.generate('DBPM-C16',10),d1+0.2-0.2-doff-0.7+0.06-0.0002,'relative')
if self.alt >1:
SY01.append(TM.generate('HFB',20),0.1-0.06,'relative')
else:
SY01.append(TM.generate('PHLD',20),0.2-0.06,'relative')
SY01.append(TM.generate('QFM-short',30),0.2,'relative')
SY01.append(TM.generate('SFQFM',40),0.,'relative')
if self.alt > 1:
SY01.append(TM.generate('QFBS',50),0.2002,'relative')
else:
SY01.append(TM.generate('PHLD',50),0.3002,'relative')
# center group
SY01.append(TM.generate('QFM-short',60),d2+0.2+0.7-0.0002,'relative')
SY01.append(TM.generate('SFQFM',70),0.,'relative')
SY01.append(TM.generate('DBPM-C16',80),0.4+0.0002,'relative')
if self.alt > 1:
SY01.append(TM.generate('HFB',90),0.3,'relative')
else:
SY01.append(TM.generate('PHLD',90),0.4,'relative')
SY01.append(TM.generate('QFM-short',100),0.2-0.0001,'relative')
SY01.append(TM.generate('SFQFM',110),0.,'relative')
SY01.append(TM.generate('QFM-short',60),d2+0.2+0.7-0.0002,'relative')
SY01.append(TM.generate('SFQFM',70),0.,'relative')
SY01.append(TM.generate('DBPM-C16',80),0.4+0.0002,'relative')
if self.alt > 1:
SY01.append(TM.generate('HFB',90),0.3,'relative')
else:
SY01.append(TM.generate('PHLD',90),0.4,'relative')
SY01.append(TM.generate('QFM-short',100),0.2-0.0001,'relative')
SY01.append(TM.generate('SFQFM',110),0.,'relative')
# last group
if self.alt >1:
SY01.append(TM.generate('HFB',120),d2-0.2+1.-0.1,'relative')
else:
SY01.append(TM.generate('PHLD',120),d2-0.2+1.,'relative')
SY01.append(TM.generate('QFM-short',130),0.4,'relative')
SY01.append(TM.generate('SFQFM',140),0.,'relative')
if self.alt >1:
SY01.append(TM.generate('QFBS',150),0.2,'relative')
else:
SY01.append(TM.generate('PHLD',150),0.3,'relative')
SY01.append(TM.generate('DBPM-C16',160),0.0,'relative')
# before last dipole
if self.alt >1:
SY01.append(TM.generate('HFB',170),d1+0.2-0.2-0.2-0.7+0.1,'relative')
else:
SY01.append(TM.generate('PHLD',170),d1+0.2-0.2-0.2+0.1-0.7+0.1,'relative')
SY01.append(TM.generate('AFSLS1',200,{'angle':-2.55,'design_angle':-2.55,'e1':-3.4,'e2':-3.4}),0.113,'relative')
if self.alt >1:
SY01.append(TM.generate('HFB',120),d2-0.2+1.-0.1,'relative')
else:
SY01.append(TM.generate('PHLD',120),d2-0.2+1.,'relative')
SY01.append(TM.generate('QFM-short',130),0.4,'relative')
SY01.append(TM.generate('SFQFM',140),0.,'relative')
if self.alt >1:
SY01.append(TM.generate('QFBS',150),0.2,'relative')
else:
SY01.append(TM.generate('PHLD',150),0.3,'relative')
SY01.append(TM.generate('DBPM-C16',160),0.0,'relative')
# before last dipole
if self.alt >1:
SY01.append(TM.generate('HFB',170),d1+0.2-0.2-0.2-0.7+0.1,'relative')
else:
SY01.append(TM.generate('PHLD',170),d1+0.2-0.2-0.2+0.1-0.7+0.1,'relative')
SY01.append(TM.generate('AFSLS1',200,{'angle':-2.55,'design_angle':-2.55,'e1':-3.4,'e2':-3.4}),0.113,'relative')
SY02=LineContainer('SY02',0)
SY02.append(TM.generate('QFM',10),0.2-0.0132+0.00012,'relative')
angPO=0.1*1.7885*1.085
if self.alt > 1:
SY02.append(TM.generate('SFQFM',20),0.,'relative')
SY02.append(TM.generate('AFSLS1-Vert',100,{'angle':angPO,'design_angle':angPO,'e1':3.4,'e2':3.4}),0.2,'relative')
else:
SY02.append(TM.generate('PHLD',20),1.1+0.1992048+0.0007886-2.51e-6,'relative')
SY02.append(TM.generate('QFM-short',110),0.3,'relative')
SY02.append(TM.generate('SFQFM',120),0.,'relative')
SY02.append(TM.generate('DBPM-C16',130),0.1-0.02,'relative')
if self.alt >1:
SY02.append(TM.generate('QFD',140),0.3,'relative')
SY02.append(TM.generate('AFSLS1-Vert',200,{'angle':-angPO,'design_angle':-angPO,'e1':-3.4,'e2':-3.4}),0.2,'relative')
SY02.append(TM.generate('DBPM-C16',210),0.2,'relative')
else:
SY02.append(TM.generate('PHLD',140),0.12+0.3+0.3+0.2+0.8+0.3-0.05-1.1e-5+5.38e-6,'relative')
if self.alt == 1: # P3 line
SY02=LineContainer('SY02',0)
SY02.append(TM.generate('QFM',10),0.2-0.0132+0.00012,'relative')
angPO=0.1*1.7885*1.085
if self.alt > 1:
SY02.append(TM.generate('SFQFM',20),0.,'relative')
SY02.append(TM.generate('AFSLS1-Vert',100,{'angle':angPO,'design_angle':angPO,'e1':3.4,'e2':3.4}),0.2,'relative')
else:
SY02.append(TM.generate('PHLD',20),1.1+0.1992048+0.0007886-2.51e-6,'relative')
SY02.append(TM.generate('QFM-short',110),0.3,'relative')
SY02.append(TM.generate('SFQFM',120),0.,'relative')
SY02.append(TM.generate('DBPM-C16',130),0.1-0.02,'relative')
if self.alt >1:
SY02.append(TM.generate('QFD',140),0.3,'relative')
SY02.append(TM.generate('AFSLS1-Vert',200,{'angle':-angPO,'design_angle':-angPO,'e1':-3.4,'e2':-3.4}),0.2,'relative')
SY02.append(TM.generate('DBPM-C16',210),0.2,'relative')
else:
SY02.append(TM.generate('PHLD',140),0.12+0.3+0.3+0.2+0.8+0.3-0.05-1.1e-5+5.38e-6,'relative')
if self.alt < 2: # P3 line
SY03=LineContainer('SY03',11.3-0.15)
SY03.append(TM.generate('QFM',20),0.1+0.0001,'relative')
SY03.append(TM.generate('PHLD',30),0.3,'relative')
@@ -2372,7 +2375,7 @@ class SwissFEL:
PoLine=[]
if self.alt > 1:
PoLine=[SY01,SY02,SY03,SY04,SY05,CL01]
elif self.alt == 1:
else:
PoLine=[SY01,SY02,SY03,P301,P302]
Porthos=LineContainer('PO')
@@ -2397,26 +2400,16 @@ class SwissFEL:
# BranchIndex=-1 -> added to the end of the parent line
# BranchIndex=0 -> Beamline is the root element
if self.alt < 10:
PartsList=[[Injector, -1, 0,'SwissFEL Injector'], #0
[Linac, 0,-1,'SwissFEL Linac'], #1
[Aramis, 1,-1,'Aramis beamline'], #2
[Athos, 1, 2,'Athos beamline'], #3
[InjectorDump,0, 1,'SwissFEL Injector beam dump'], #4
[Linac1Dump, 1, 1,'Linac1 beam dump'], #5
[AramisDump, 2, 1,'Aramis beam dump'], #6
[AthosDump, 3, 1,'Athos beam dump'], #7
[Porthos, 1, 3,'Porthos beamline']] #8
else:
PartsList=[[Injector, -1, 0,'SwissFEL Injector'], #0
[Linac, 0,-1,'SwissFEL Linac'], #1
[Aramis, 1,-1,'Aramis beamline'], #2
[Athos, 1, 2,'Athos beamline'], #3
[InjectorDump,0, 1,'SwissFEL Injector beam dump'], #4
[Linac1Dump, 1, 1,'Linac1 beam dump'], #5
[AramisDump, 2, 1,'Aramis beam dump'], #6
[AthosDump, 3, 1,'Athos beam dump'], #7
[Porthos, 1, 3,'Porthos beamline']] #8
PartsList=[[Injector, -1, 0,'SwissFEL Injector'], #0
[Linac, 0,-1,'SwissFEL Linac'], #1
[Aramis, 1,-1,'Aramis beamline'], #2
[Athos, 1, 2,'Athos beamline'], #3
[InjectorDump,0, 1,'SwissFEL Injector beam dump'], #4
[Linac1Dump, 1, 1,'Linac1 beam dump'], #5
[AramisDump, 2, 1,'Aramis beam dump'], #6
[AthosDump, 3, 1,'Athos beam dump'], #7
[Porthos, 1, 3,'Porthos beamline']] #8
return PartsList