From d2588ccdd78ff9e6122567b7baf9e5651b5f7d6d Mon Sep 17 00:00:00 2001 From: Sven Date: Thu, 29 Jan 2026 15:10:23 +0100 Subject: [PATCH] Lattice 11.1.0 - Move P3 line to phase current --- Python_Code/onlinemodel/layout/layout.py | 171 +++++++++++------------ 1 file changed, 82 insertions(+), 89 deletions(-) diff --git a/Python_Code/onlinemodel/layout/layout.py b/Python_Code/onlinemodel/layout/layout.py index 8588390..c9bdfe9 100644 --- a/Python_Code/onlinemodel/layout/layout.py +++ b/Python_Code/onlinemodel/layout/layout.py @@ -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