From a22a09d15a87152e11bbf8b7d8e87279157e8c11 Mon Sep 17 00:00:00 2001 From: Sven Date: Thu, 18 Dec 2025 14:42:40 +0100 Subject: [PATCH] Ready for release --- OpticsTools.py | 37 +-- Scripts/SFPlus/initTwiss.madx | 4 + Scripts/SFPlus/matchAramis.madx | 363 ++++++++++++++++++++++++++++++ Scripts/SFPlus/matchAthos.madx | 362 +++++++++++++++++++++++++++++ Scripts/SFPlus/matchInjector.madx | 213 ++++++++++++++++++ matchmaker.py | 62 +++++ runOpticsTools.sh | 17 +- 7 files changed, 1039 insertions(+), 19 deletions(-) create mode 100644 Scripts/SFPlus/initTwiss.madx create mode 100644 Scripts/SFPlus/matchAramis.madx create mode 100644 Scripts/SFPlus/matchAthos.madx create mode 100644 Scripts/SFPlus/matchInjector.madx create mode 100644 matchmaker.py diff --git a/OpticsTools.py b/OpticsTools.py index 966a656..1a38776 100644 --- a/OpticsTools.py +++ b/OpticsTools.py @@ -15,13 +15,17 @@ from sandbox import Sandbox from matching import Matching from elegant import Elegant + class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI): def __init__(self,phase=0, office= 1): super(OpticsTools, self).__init__() self.setupUi(self) - office = office== 1 - self.version = '1.0.1' + office = office == 1 + if phase > 0: + office = True + + self.version = '1.1.1' self.setWindowIcon(QtGui.QIcon("rsc/iconoptics.png")) self.plot = OpticsPlot(parent=self) @@ -30,12 +34,9 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI): # initialize online model self.model = Model(phase=phase,parent=self) - if phase > 0: - office = True self.machine = Machine(parent = True, office = office) self.machine.initPVs(self.model.getElements()) self.sandbox = Sandbox(parent = self, machine = self.machine) - self.elegant=Elegant(parent=self,model=self.model) title = "SwissFEL Optics Tools - Lattice %s (Phase %d)" % (self.model.getLatticeVersion(),phase) if office: @@ -43,21 +44,21 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI): self.setWindowTitle(title) # initialization - self.loadSettingsdirect("Settings/ReferenceSetting.json") +# self.loadSettingsdirect("Settings/ReferenceSetting.json") self.sandbox.updateSandbox() - self.reference = ReferenceManager(parent=self) - self.matching = Matching(parent=self, model=self.model, reference = self.reference) +# self.reference = ReferenceManager(parent=self) +# self.matching = Matching(parent=self, model=self.model, reference = self.reference) # events handling - self.actionOpen_2.triggered.connect(self.loadSettings) - self.actionSave.triggered.connect(self.saveSettings) - self.UIUpdateFromMachine.clicked.connect(self.fullUpdate) - self.actionHelp.triggered.connect(self.openGit) - self.actionAbout.triggered.connect(self.about) - self.actionOpenMatch.triggered.connect(self.loadMatchingConfig) - self.actionOpenMatchEditor.triggered.connect(self.editMatchingConfig) - self.actionOpenScriptEditor.triggered.connect(self.editMatchingScript) - self.actionExportElegant.triggered.connect(self.exportElegant) +# self.actionOpen_2.triggered.connect(self.loadSettings) +# self.actionSave.triggered.connect(self.saveSettings) +# self.UIUpdateFromMachine.clicked.connect(self.fullUpdate) +# self.actionHelp.triggered.connect(self.openGit) +# self.actionAbout.triggered.connect(self.about) +# self.actionOpenMatch.triggered.connect(self.loadMatchingConfig) +# self.actionOpenMatchEditor.triggered.connect(self.editMatchingConfig) +# self.actionOpenScriptEditor.triggered.connect(self.editMatchingScript) +# self.actionExportElegant.triggered.connect(self.exportElegant) def closeEvent(self, event): self.plot.close() @@ -148,7 +149,7 @@ class OpticsTools(QtWidgets.QMainWindow, Ui_OpticsGUI): if __name__ == '__main__': QtWidgets.QApplication.setStyle(QtWidgets.QStyleFactory.create("plastique")) parser = ArgumentParser() - parser.add_argument('-phase', type=int, help='Disable any action on the machine', default=0) + parser.add_argument('-phase', type=int, help='Select Phase of the Lattice', default=0) parser.add_argument('-offline', type=int, help='Excludes any connection to control system', default=1) args = parser.parse_args() app = QtWidgets.QApplication(sys.argv) diff --git a/Scripts/SFPlus/initTwiss.madx b/Scripts/SFPlus/initTwiss.madx new file mode 100644 index 0000000..de079a1 --- /dev/null +++ b/Scripts/SFPlus/initTwiss.madx @@ -0,0 +1,4 @@ +option,-echo; +! starting condition +Twiss0: beta0,betx=10,alfx=0,bety=10,alfy=0; +Twisssep: beta0,betx=10,alfx=-0.2,bety=15,alfy=1; \ No newline at end of file diff --git a/Scripts/SFPlus/matchAramis.madx b/Scripts/SFPlus/matchAramis.madx new file mode 100644 index 0000000..94363cd --- /dev/null +++ b/Scripts/SFPlus/matchAramis.madx @@ -0,0 +1,363 @@ + + +betax0=10; +alphax0=0; +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=10,alfx=-0.2,bety=15,alfy=1; + + +y_sep=0.01; +py_sep=0.0; + + + +S20SY02.MKDC010.cory := SYKICK*2; +S20SY02.MKAC020.cory := SYKICK*3; +S20SY02.MKDC030.cory := SYKICK*2; +S20SY02.MKAC040.cory := SYKICK*3; +S20SY02.MKDC050.cory := SYKICK*2; + + + +use,sequence=swissfel; +select,flag=Error,pattern="SAT.*"; +ealign,DY=0.01; + +MATCH,SEQUENCE=swissfel,range=s20sy02$start/s20sy02$end,beta0=Twisssep; +VARY,NAME=s20sy02.mqua070.k1,STEP=0.0001,lower=-3,upper=3; +VARY,NAME=s20sy02.mqua100.k1,STEP=0.0001,lower=-3,upper=3; +VARY,NAME=s20sy02.mqua140.k1,STEP=0.0001,lower=-3,upper=3; +VARY,NAME=s20sy02.mqua180.k1,STEP=0.0001,lower=-3,upper=3; +VARY,NAME=SYKICK,STEP=0.0001; +CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,y=y_sep; +CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,py=py_sep; +CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,dy=-0.007; +CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,dpy=1.7e-3; +CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mqua180, BETY < 60; +LMDIF,CALLS=8000,TOLERANCE=1.e-21; +ENDMATCH; + + + +! this statements are needed to have explicit values in the output file +SYKICK=0; +S20SY02.MKDC010.c1:= SYKICK*2; +S20SY02.MKAC020.c1:= SYKICK*3; +S20SY02.MKDC030.c1:= SYKICK*2; +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<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; + +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; +s20cb02.mqua430.k1=-0.5*pol; + +match,SEQUENCE=swissfel,range=S20cb01$start/s20cb02$end; +Vary,name=S20CB01.MQUA430.k1,step=0.0001; +Vary,name=S20CB02.MQUA430.k1,step=0.0001; +constraint,sequence=swissfel,range=s20cb02$end,mux=muLin3; +constraint,sequence=swissfel,range=s20cb02$end,muy=muLin3; +lmdif,calls=100,tolerance=1e-21; +endmatch; + +twiss,SEQUENCE=swissfel,range=s20cb01$start/s20cb02$end; + +nbetx=table(twiss,s20cb02$end,betx); +nalfx=table(twiss,s20cb02$end,alfx); +nbety=table(twiss,s20cb02$end,bety); +nalfy=table(twiss,s20cb02$end,alfy); +plot,haxis=s,vaxis=betx,bety,colour=100; + + + +s20cb03.mqua430.k1 = s20cb01.mqua430.k1; +s20cb04.mqua430.k1 = s20cb02.mqua430.k1; +s30cb01.mqua430.k1 = s20cb01.mqua430.k1; +s30cb02.mqua430.k1 = s20cb02.mqua430.k1; +s30cb03.mqua430.k1 = s20cb01.mqua430.k1; +s30cb04.mqua430.k1 = s20cb02.mqua430.k1; +s30cb05.mqua430.k1 = s20cb01.mqua430.k1; +s30cb06.mqua430.k1 = s20cb02.mqua430.k1; +s30cb07.mqua430.k1 = s20cb01.mqua430.k1; +s30cb08.mqua430.k1 = s20cb02.mqua430.k1; +s30cb09.mqua430.k1 = s20cb01.mqua430.k1; +s30cb10.mqua430.k1 = s20cb02.mqua430.k1; +s30cb11.mqua430.k1 = s20cb01.mqua430.k1; +s30cb12.mqua430.k1 = s20cb02.mqua430.k1; +s30cb13.mqua430.k1 = s20cb01.mqua430.k1; +s30cb14.mqua430.k1 = s20cb02.mqua430.k1; + + + + +MATCH,SEQUENCE=Swissfel,range=s20sy02$start/s20cb04$end,beta0=twisssep; +VARY,NAME=s20ma01.mqua010.k1,STEP=0.0001; +VARY,NAME=s20ma01.mqua020.k1,STEP=0.0001; +VARY,NAME=s20ma01.mqua040.k1,STEP=0.0001; +vary,name=s20cb01.mqua430.k1,step=0.0001; +CONSTRAINT,SEQUENCE=SwissFEL,range= s20cb03$start,betx=nbetx; +CONSTRAINT,SEQUENCE=SwissFEL,range= s20cb03$start,bety=nbety; +CONSTRAINT,SEQUENCE=SwissFEL,range= s20cb03$start,alfx=nalfx; +CONSTRAINT,SEQUENCE=SwissFEL,range= s20cb03$start,alfy=nalfy; +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + +twiss,SEQUENCE=swissfel,range=s20sy02$start/S20cb04$end,beta0=twisssep; +plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; + + +MATCH,SEQUENCE=Swissfel,range=s20sy02$start/s30cb07$end,beta0=twisssep; +VARY,NAME=s30cb01.mqua430.k1,STEP=0.0001; +VARY,NAME=s30cb02.mqua430.k1,STEP=0.0001; +VARY,NAME=s30cb03.mqua430.k1,STEP=0.0001; +VARY,NAME=s30cb04.mqua430.k1,STEP=0.0001; +CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb05$start,betx=nbetx; +CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb05$start,bety=nbety; +CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb05$start,alfx=nalfx; +CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb05$start,alfy=nalfy; +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + + +!L = 9; +!alpha = 1.5; +!beta = alpha*L; + + +!MATCH,SEQUENCE=Swissfel,range=s20sy02$start/s30cb14$end,beta0=twisssep; +!VARY,NAME=s30cb10.mqua430.k1,STEP=0.0001; +!VARY,NAME=s30cb11.mqua430.k1,STEP=0.0001; +!VARY,NAME=s30cb12.mqua430.k1,STEP=0.0001; +!VARY,NAME=s30cb13.mqua430.k1,STEP=0.0001; +!VARY,NAME=s30cb14.mqua430.k1,STEP=0.0001; +!CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb14.mqua430$end,betx=beta; +!CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb14.mqua430$end,bety=beta; +!CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb14.mqua430$end,alfx=alpha; +!CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb14.mqua430$end,alfy=alpha; +!CONSTRAINT,SEQUENCE=SwissFEL,range= s30cb14.mqua430$end,X<1; +!LMDIF,CALLS=1000,TOLERANCE=1.e-21; +!ENDMATCH; + +twiss,SEQUENCE=swissfel,range=s20sy02$start/S30cb14$END,beta0=twisssep; +plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; + + + +Select,flag=Error,pattern="SPO.*"; +EALIGN,DY=0.01; + + +PSYKICK:=0.1; +S30cb15.MKDC010.cory := PSYKICK*2; +S30cb15.MKAC020.cory := PSYKICK*3; +S30cb15.MKDC030.cory := PSYKICK*2; +S30cb15.MKAC040.cory := PSYKICK*3; +S30CB15.MKDC050.cory := PSYKICK*2; +pqf:=1; + +S30cb15.mqua100.k1 := -0.2*pqf; +S30cb15.mqua200.k1 := -pqf; + +MATCH,SEQUENCE=Swissfel,range=S30CB15$START/s30cb15$END,BETA0 = TWISSsep; +VARY, NAME=PSYKICK, STEP=0.00001; +VARY, NAME=PQF, STEP=0.00001; +CONSTRAINT, SEQUENCE=swissfel, RANGE=s30cb15$end, Y = 0.01; +CONSTRAINT, SEQUENCE=swissfel, RANGE=s30cb15$end, PY = 0.; +LMDIF, CALLS=1000, TOLERANCE=1.E-21; +ENDMATCH; + + +pbetx=3.9036; +palfx=-0.05021; +pbety=37.6374; +palfy=4.4433; + +twisspor: beta0, betx=pbetx,alfx=palfx, bety=pbety,alfy=palfy; + +s30cb13.mqua430.k1 = 0.456; +s30cb14.mqua430.k1 = -1.741; +s30cb15.mqua010.k1 = 1.1533; +s30cb15.mqua020.k1 = -0.0961; + +MATCH,SEQUENCE=Swissfel,range=s20sy02$start/s30sy01$end,beta0=twisssep; +VARY,NAME=s30cb13.mqua430.k1,STEP=0.0001; +VARY,NAME=s30cb14.mqua430.k1,STEP=0.0001; +VARY,NAME=s30cb15.mqua010.k1,STEP=0.0001; +VARY,NAME=s30cb15.mqua020.k1,STEP=0.0001; +CONSTRAINT, SEQUENCE=swissfel, RANGE=s30cb15$end,betx=pbetx; +CONSTRAINT, SEQUENCE=swissfel, RANGE=s30cb15$end,bety=pbety; +CONSTRAINT, SEQUENCE=swissfel, RANGE=s30cb15$end,alfx=palfx; +CONSTRAINT, SEQUENCE=swissfel, RANGE=s30cb15$end,alfy=palfy; +!LMDIF, CALLS=1000, TOLERANCE=1.E-21; +Simplex, CALLS=1000, TOLERANCE=1.E-21; +ENDMATCH; + +twiss,SEQUENCE=swissfel,range=s20sy02$start/s30cb15$end,beta0=twisssep; +plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; +plot,haxis=s,vaxis=y,dy,range=s30cb15$start/#e,colour=100; + + + + +S30cb15.MKDC010.cory := 0; +S30cb15.MKAC020.cory := 0; +S30cb15.MKDC030.cory := 0; +S30cb15.MKAC040.cory := 0; +S30CB15.MKDC050.cory := 0; +R56 = -000e-6; + +MATCH,RMATRIX,SEQUENCE=swissFEL,range=SARCL02$start/SARCL02$end,betx=10,alfx=0,bety=10,alfy=0; +VARY,NAME=sarcl02.mqua130.k1,STEP=0.0001; +CONSTRAINT,SEQUENCE=swissfel,range=sarcl02.mqua210,re56=R56*0.5; +LMDIF,CALLS=100,TOLERANCE=1.e-21; +ENDMATCH; + + +sarcl02.mqua210.k1=-sarcl02.mqua130.k1*0.9; + +MATCH,SEQUENCE=swissfel,range=sarcl02$start/sarma01.mqua010,betx=10,alfx=0,bety=10,alfy=0; +VARY,NAME=sarcl02.mqua250.k1,STEP=0.0001; +CONSTRAINT,SEQUENCE=swissfel,range=sarcl02.dbpm260$end,dpx=0; +LMDIF,CALLS=100,TOLERANCE=1.e-21; +ENDMATCH; + + +sarcl02.mqua310.k1=sarcl02.mqua250.k1; +sarcl02.mqua350.k1=sarcl02.mqua210.k1; +sarcl02.mqua460.k1=sarcl02.mqua130.k1; + + +dL=0.625+0.25; +bx0=25; +bx=bx0+dL*dL/bx0; +ax=-dL/bx0; +by0=0.8; +by=by0+dL*dL/by0; +ay=-dL/by0; + + +twiss,sequence=swissfel,range=sarcl02.mqsk300/sarma01.mqua010,betx=bx,alfx=ax,bety=by,alfy=ay; + +nbetx= table(twiss,sarma01$start,betx); +nalfx=-table(twiss,sarma01$start,alfx); +nbety= table(twiss,sarma01$start,bety); +nalfy=-table(twiss,sarma01$start,alfy); + + + + +MATCH,SEQUENCE=swissfel,range=S30SY01$start/sarma01.mqua010,beta0=twisspor; +VARY,NAME=sarcl01.mqua020.k1,STEP=0.0001; +VARY,NAME=sarcl01.mqua050.k1,STEP=0.0001; +VARY,NAME=sarcl01.mqua080.k1,STEP=0.0001; +VARY,NAME=sarcl01.mqua100.k1,STEP=0.0001; +VARY,NAME=sarcl01.mqua140.k1,STEP=0.0001; +VARY,NAME=sarcl01.mqua190.k1,STEP=0.0001; +!CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua080,betx=beta; +!CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua080,alfx=alpha; +!CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua080,bety=beta; +!CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua080,alfy=alpha; + +CONSTRAINT,SEQUENCE=swissfel,range=sarcl02$start,betx=nbetx; +CONSTRAINT,SEQUENCE=swissfel,range=sarcl02$start,alfx=nalfx; +CONSTRAINT,SEQUENCE=swissfel,range=sarcl02$start,bety=nbety; +CONSTRAINT,SEQUENCE=swissfel,range=sarcl02$start,alfy=nalfy; +CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua050,bety<30; +CONSTRAINT,SEQUENCE=swissfel,range=sarcl01.mqua190,betx<30; +LMDIF,CALLS=100,TOLERANCE=1.e-21; +ENDMATCH; + + +muAR=0.17; +match,SEQUENCE=swissfel,range=sarun02$start/sarun03$end; +Vary,name=sarun02.mqua080.k1,step=0.0001; +Vary,name=sarun03.mqua080.k1,step=0.0001; +constraint,sequence=swissfel,range=sarun03$end,mux=muAR; +constraint,sequence=swissfel,range=sarun03$end,muy=muAR; +lmdif,calls=100,tolerance=1e-21; +endmatch; + +twiss,sequence=swissfel,range=sarun02$start/sarun03$end; +mbetx=table(twiss,sarun02$end,betx); +malfx=table(twiss,sarun02$end,alfx); +mbety=table(twiss,sarun02$end,bety); +malfy=table(twiss,sarun02$end,alfy); + +plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; +sarun04.mqua080.k1=sarun02.mqua080.k1; +sarun05.mqua080.k1=sarun03.mqua080.k1; +sarun06.mqua080.k1=sarun02.mqua080.k1; +sarun07.mqua080.k1=sarun03.mqua080.k1; +sarun08.mqua080.k1=sarun02.mqua080.k1; +sarun09.mqua080.k1=sarun03.mqua080.k1; +sarun10.mqua420.k1=sarun02.mqua080.k1; +sarun11.mqua080.k1=sarun03.mqua080.k1; +sarun12.mqua080.k1=sarun02.mqua080.k1; +sarun13.mqua080.k1=sarun03.mqua080.k1; +sarun14.mqua080.k1=sarun02.mqua080.k1; +sarun15.mqua080.k1=sarun03.mqua080.k1; +sarun16.mqua080.k1=sarun02.mqua080.k1; +sarun17.mqua080.k1=sarun03.mqua080.k1; +sarun18.mqua080.k1=sarun02.mqua080.k1; +sarun19.mqua080.k1=sarun03.mqua080.k1; + +SARUN01.mqua080.k1=sarun03.mqua080.k1; +sarma02.mqua050.k1=0; +sarma02.mqua120.k1=0.7*sarun02.mqua080.k1; + + +sarma01.mqua010.k1 := -1.435783623; +sarma01.mqua060.k1 := 1.29993551; +sarma01.mqua080.k1 := -1.1356922498; +sarma01.mqua120.k1 := 0.4142170392; +sarma01.mqua140.k1 := -0.4428419456; + +MATCH,SEQUENCE=swissfel,range=S30SY01$start/sarun02$start,beta0=twisspor; +VARY,NAME=sarma01.mqua010.k1,STEP=0.0001; +VARY,NAME=sarma01.mqua060.k1,STEP=0.0001; +VARY,NAME=sarma01.mqua080.k1,STEP=0.0001; +VARY,NAME=sarma01.mqua120.k1,STEP=0.0001; +VARY,NAME=sarma01.mqua140.k1,STEP=0.0001; +CONSTRAINT,SEQUENCE=swissfel,range=sarun01$start,betx=mbetx; +CONSTRAINT,SEQUENCE=swissfel,range=sarun01$start,bety=mbety; +CONSTRAINT,SEQUENCE=swissfel,range=sarun01$start,alfx=malfx; +CONSTRAINT,SEQUENCE=swissfel,range=sarun01$start,alfy=malfy; +CONSTRAINT,SEQUENCE=swissfel,range=sarun02$start,x<5; +LMDIF,CALLS=100,TOLERANCE=1.e-21; +ENDMATCH; + + + +twiss,SEQUENCE=swissfel,range=#s/sarun19$end,beta0=twiss0; +plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; +plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100; + +exit; + + + diff --git a/Scripts/SFPlus/matchAthos.madx b/Scripts/SFPlus/matchAthos.madx new file mode 100644 index 0000000..7de7167 --- /dev/null +++ b/Scripts/SFPlus/matchAthos.madx @@ -0,0 +1,362 @@ +!!!!!!!!!!!!!!!!! septum +betax0=10; +alphax0=0; +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=10,alfx=-0.2,bety=15,alfy=1; + +y_sep=0.01; +py_sep=0.0; +!dy_sep=-y_sep; +!dpy_sep=-py_sep; + + +S20SY02.MKDC010.cory := SYKICK*2; +S20SY02.MKAC020.cory := SYKICK*3; +S20SY02.MKDC030.cory := SYKICK*2; +S20SY02.MKAC040.cory := SYKICK*3; +S20SY02.MKDC050.cory := SYKICK*2; + + + +use,sequence=swissfel; +select,flag=Error,pattern="SAT.*"; +ealign,DY=0.01; + +MATCH,SEQUENCE=swissfel,range=s20sy02$start/s20sy02$end,beta0=Twisssep; +VARY,NAME=s20sy02.mqua070.k1,STEP=0.0001,lower=-3,upper=3; +VARY,NAME=s20sy02.mqua100.k1,STEP=0.0001,lower=-3,upper=3; +VARY,NAME=s20sy02.mqua140.k1,STEP=0.0001,lower=-3,upper=3; +VARY,NAME=s20sy02.mqua180.k1,STEP=0.0001,lower=-3,upper=3; +VARY,NAME=SYKICK,STEP=0.0001; +CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,y=y_sep; +CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,py=py_sep; +CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,dy=-0.007; +CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mbnd200,dpy=1.7e-3; +CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mqua180, BETY < 60; +LMDIF,CALLS=8000,TOLERANCE=1.e-21; +ENDMATCH; + + + +! this statements are needed to have explicit values in the output file +S20SY02.MKDC010.c1= SYKICK*2; +S20SY02.MKAC020.c1= SYKICK*3; +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.7; + +MATCH,SEQUENCE=Swissfel,range=s20sy02$start/satsy02$end,beta0=twisssep; +VARY,NAME=satsy01.mqua010.k1,STEP=0.0001; +VARY,NAME=satsy01.mqua020.k1,STEP=0.0001; +VARY,NAME=satsy01.mqua030.k1,STEP=0.0001; +VARY,NAME=satsy02.mqua010.k1,STEP=0.0001; + + +CONSTRAINT,SEQUENCE=SwissFEL,range= satsy01$end,DX=0.0; +CONSTRAINT,SEQUENCE=SwissFEL,range= satsy01$end,DPX=0.0; +CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mbnd200,DY=0.0; +CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mbnd200,DPY=0.0; +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; + + + + +MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satsy03$end,beta0=twisssep; +VARY,NAME=satsy03.mqua110.k1,STEP=0.0001; +CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mbnd200,DX=0.0; +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + +L = 38-9.8+6.25; + +alpha=1.0; +beta = L*alpha; +MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satsy03$end,beta0=twisssep; +VARY,NAME=satsy02.mqua205.k1,STEP=0.0001; +VARY,NAME=satsy02.mqua210.k1,STEP=0.0001; +VARY,NAME=satsy02.mqua220.k1,STEP=0.0001; +VARY,NAME=satsy02.mqua230.k1,STEP=0.0001; +CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua230,betx=beta; +CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua230,bety=beta; +CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua230,alfx=alpha; +CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua230,alfy=alpha; +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + + +MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satsy03$end,beta0=twisssep; +VARY,NAME=satsy02.mqua300.k1,STEP=0.0001; +VARY,NAME=satsy02.mqua310.k1,STEP=0.0001; +VARY,NAME=satsy02.mqua320.k1,STEP=0.0001; +VARY,NAME=satsy02.mqua330.k1,STEP=0.0001; + +CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mqua110,betx=5; +CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mqua110,bety=4; +CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mqua110,alfx=1.77; +CONSTRAINT,SEQUENCE=SwissFEL,range= satsy03.mqua110,alfy=-1.04; + +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + + +twiss,SEQUENCE=swissfel,range=s20sy02$start/Satsy03.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; + + + +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; +VARY,NAME=satsy03.mqua410.k1,STEP=0.0001; +CONSTRAINT,SEQUENCE=SwissFEL,range= satbc01.mbnd400,BETX<5; +CONSTRAINT,SEQUENCE=SwissFEL,range= satbc01.mbnd400,BETY<60; +CONSTRAINT,SEQUENCE=SwissFEL,range= satbc01.mbnd100,BETX<80; +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + +CL1.k1 := -1.3; +CL2.k1 := 1.1; +satcl01.mqua120.k1 := CL1.k1; +satcl01.mqua130.k1 := CL2.k1; +satcl01.mqua180.k1 := CL2.k1; +satcl01.mqua190.k1 := CL1.k1; + + +MATCH,SEQUENCE=SwissFEL,range=satcl01$start/satcl01$end,betx=3,alfx=0,bety=50,alfy=5; +VARY,NAME=cl1.k1,STEP=0.0001; +VARY,NAME=cl2.k1,STEP=0.0001; + +CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01$end,dx=0; +CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01$end,dpx=0; + +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + + + +MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satcl01$end,beta0=twisssep; +VARY,NAME=satbc01.mqua410.k1,STEP=0.0001; +VARY,NAME=satbc01.mqua420.k1,STEP=0.0001; +VARY,NAME=satbc01.mqua430.k1,STEP=0.0001; +VARY,NAME=satbc01.mqua440.k1,STEP=0.0001; + +CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01.msex160, alfx = 0; +CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01.msex160, alfy = 0; +CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01.msex160, betx > 10; +CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01.msex160, bety < 5; +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + +MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satdi01$end,beta0=twisssep; +VARY,NAME=satdi01.mqua025.k1,STEP=0.0001; +CONSTRAINT,SEQUENCE=SwissFEL,range= satdi01.dscr065$start, betx<18; +CONSTRAINT,SEQUENCE=SwissFEL,range= satdi01.dscr065$start, bety<18; +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + +twiss,SEQUENCE=swissfel,rmatrix,range=s20sy02$start/satdi01.dscr065$end,beta0=twisssep; +plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; +plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100; +plot,haxis=s,vaxis=re56,range=#s/#e,colour=100; + + + + + + + + + + + + + + + + +scl:=1.5; +ss:=0.83; + +satdi01.mqua080.k1:=0.8*scl; +satdi01.mqua220.k1:=-0.52*scl; +satdi01.mqua230.k1:=-1.2*ss; +satdi01.mqua250.k1:=1.2*ss; +satcb01.mqua230.k1:=1.2*ss; +satcb01.mqua430.k1:=-1.2*ss+0.2; + + +L = 20.; +alpha=0.7; +beta=L*alpha; + + +MATCH, SEQUENCE=SwissFEL,range=s20sy02$start/satcb01$end,beta0=twisssep; +VARY,NAME=satdi01.mqua080.k1,STEP=0.0001,lower=-1.8,upper=1.8; +VARY,NAME=satdi01.mqua220.k1,STEP=0.0001,lower=-1.8,upper=1.8; +VARY,NAME=satdi01.mqua230.k1,STEP=0.0001,lower=-1.8,upper=1.8; +VARY,NAME=satdi01.mqua250.k1,STEP=0.0001,lower=-1.8,upper=1.8; +VARY,NAME=satcb01.mqua230.k1,STEP=0.0001,lower=-1.8,upper=1.8; +VARY,NAME=satcb01.mqua430.k1,STEP=0.0001,lower=-1.8,upper=1.8; +CONSTRAINT,SEQUENCE=swissfel,range=satcb01.mqua430$end,betx=beta; +CONSTRAINT,SEQUENCE=swissfel,range=satcb01.mqua430$end,alfx=alpha; +CONSTRAINT,SEQUENCE=swissfel,range=satcb01.mqua430$end,bety=beta; +CONSTRAINT,SEQUENCE=swissfel,range=satcb01.mqua430$end,alfy=alpha; +CONSTRAINT,SEQUENCE=swissfel,range=satcb01.mqua430$start,x<10; +CONSTRAINT,SEQUENCE=swissfel,range=satcb01.mqua430$start,y<10; +CONSTRAINT,SEQUENCE=swissfel,range=satcb01.mqua430$start,DX<10; +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + +twiss,SEQUENCE=swissfel,range=s20sy02$start/satma01$end,beta0=twisssep; +plot,haxis=s,vaxis=betx,bety,range=satdi01$start/satma01.dscr030$start,colour=100; + + + +!!!!!!!!!!!!!!!!!!!!!! Athos undulator + +pol=-1; +satun06.mqua080.k1 := -1.699673315*pol; +satun07.mqua080.k1 := 1.746074065*pol; +muAT=0.15; +match,SEQUENCE=swissfel,range=satun06$start/satun07$end; +Vary,name=satun06.mqua080.k1,step=0.0001; +Vary,name=satun07.mqua080.k1,step=0.0001; +constraint,sequence=swissfel,range=satun07$end,mux=muAT; +constraint,sequence=swissfel,range=satun07$end,muy=muAT; +lmdif,calls=100,tolerance=1e-21; +endmatch; + + +satun08.mqua080.k1 := satun06.mqua080.k1; +satun09.mqua080.k1 := satun07.mqua080.k1; +satun10.mqua080.k1 := satun06.mqua080.k1; +satun11.mqua080.k1 := satun07.mqua080.k1; +satun12.mqua080.k1 := satun06.mqua080.k1; +satun13.mqua080.k1 := satun07.mqua080.k1; +satun14.mqua080.k1 := satun06.mqua080.k1; +satun15.mqua080.k1 := satun07.mqua080.k1; +satun16.mqua420.k1 := satun06.mqua080.k1; +satun17.mqua080.k1 := satun07.mqua080.k1; +satun18.mqua080.k1 := satun06.mqua080.k1; +satun19.mqua080.k1 := satun07.mqua080.k1; +satun20.mqua080.k1 := satun06.mqua080.k1; +satun21.mqua080.k1 := satun07.mqua080.k1; +satun22.mqua080.k1 := satun06.mqua080.k1; +satun23.mqua080.k1 := satun07.mqua080.k1; +satun24.mqua080.k1 := satun06.mqua080.k1; +satun25.mqua080.k1 := satun07.mqua080.k1; +satun26.mqua080.k1 := satun06.mqua080.k1; + + +twiss,sequence=swissfel,range=satun06$start/satun07$end; +plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; +ATbetx=table(twiss,satun07$end,betx); +ATalfx=table(twiss,satun07$end,alfx); +ATbety=table(twiss,satun07$end,bety); +ATalfy=table(twiss,satun07$end,alfy); + + + +eebetx=8; +eealfx=0.5; +eebety=30; +eealfy=-0.5; + +eebetx=7; +eealfx=0.5; +eebety=30; +eealfy=1.5; + +twissee: beta0,betx=eebetx,bety=eebety,alfx=eealfx,alfy=eealfy; + +MATCH, SEQUENCE=swissfel,range=satma01.mqua250$end/satun07$end,beta0=twissee; +VARY,NAME=satma01.mqua610.k1,STEP=0.0001,lower=-2.0,upper=2.0; +VARY,NAME=satma01.mqua630.k1,STEP=0.0001,lower=-2.0,upper=2.0; +VARY,NAME=satma01.mqua640.k1,STEP=0.0001,lower=-2.0,upper=2.0; +VARY,NAME=satun04.mqua060.k1,STEP=0.0001,lower=-3.8,upper=3.8; +VARY,NAME=satun05.mqua420.k1,STEP=0.0001,lower=-3.8,upper=3.8; +CONSTRAINT,SEQUENCE=swissfel,range=satun06$start,betx=ATbetx; +CONSTRAINT,SEQUENCE=swissfel,range=satun06$start,bety=ATbety; +CONSTRAINT,SEQUENCE=swissfel,range=satun06$start,alfx=ATalfx; +CONSTRAINT,SEQUENCE=swissfel,range=satun06$start,alfy=ATalfy; +CONSTRAINT,SEQUENCE=swissfel,range=satun06$start,x<10; +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + + + + + +twiss,SEQUENCE=swissfel,range=satma01.mqua250$end/satun11$end,beta0=twissee; +plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; + + + +scl=4; +satcb02.mqua230.k1=scl*0.2; +satcb02.mqua430.k1=-scl*0.2; +satcb03.mqua230.k1=scl*0.2; +satcb03.mqua430.k1=-scl*0.2; + + + +satma01.mqua120.k1=0; +satma01.mqua140.k1=0; +satma01.mqua160.k1=0; +satma01.mqua180.k1=0; +satma01.mqua230.k1=0; +satma01.mqua250.k1=0; + + +MATCH, SEQUENCE=swissfel,range=s20sy02$start/satma01$end,beta0=twisssep; +VARY,NAME=satcb03.mqua430.k1,STEP=0.0001,lower=-3.8,upper=3.8; +VARY,NAME=satma01.mqua120.k1,STEP=0.0001,lower=-3.8,upper=3.8; +VARY,NAME=satma01.mqua140.k1,STEP=0.0001,lower=-3.8,upper=3.8; +VARY,NAME=satma01.mqua160.k1,STEP=0.0001,lower=-3.8,upper=3.8; +VARY,NAME=satma01.mqua180.k1,STEP=0.0001,lower=-3.8,upper=3.8; +VARY,NAME=satma01.mqua230.k1,STEP=0.0001,lower=-3.0,upper=3.0; +VARY,NAME=satma01.mqua250.k1,STEP=0.0001,lower=-3.0,upper=3.0; +CONSTRAINT,SEQUENCE=swissfel,range=satma01.mqua250$end,betx=eebetx; +CONSTRAINT,SEQUENCE=swissfel,range=satma01.mqua250$end,bety=eebety; +CONSTRAINT,SEQUENCE=swissfel,range=satma01.mqua250$end,alfx=eealfx; +CONSTRAINT,SEQUENCE=swissfel,range=satma01.mqua250$end,alfy=eealfy; +CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua120$start, betx <70; +CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua120$start, bety <70; +CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua140$start, betx <70; +CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua140$start, bety <70; +CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua160$start, betx <70; +CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua160$start, bety <70; +CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua180$start, betx <70; +CONSTRAINT,SEQUENCE=swissFEL,range=satma01.mqua180$start, bety <70; +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + +twiss,SEQUENCE=swissfel,range=s20sy02$start/satun11$end,beta0=twisssep; +plot,haxis=s,vaxis=betx,bety,range=satdi01$start/#e,colour=100; + + +twiss,SEQUENCE=swissfel,range=#s/satun26$end,beta0=twiss0; +plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; +plot,haxis=s,vaxis=dx,dy,range=#s/#e,colour=100; diff --git a/Scripts/SFPlus/matchInjector.madx b/Scripts/SFPlus/matchInjector.madx new file mode 100644 index 0000000..3d40296 --- /dev/null +++ b/Scripts/SFPlus/matchInjector.madx @@ -0,0 +1,213 @@ +! reg filter for updated variables +updateInjector := "S[I1].*k1;S20SY01.*k1"; + +! into laser heater + + +sinlh01.mqua020.k1 = 0; +sinlh01.mqua040.k1 = 0; +sinlh01.mqua070.k1 = 0; +sinsb03.mqua130.k1 = 0; +sinsb03.mqua230.k1 = 0; + +L = 8.72; +alpha = 1; +beta = alpha*L; + + + +MATCH,SEQUENCE=SwissFEL,range=#s/sinbc02$start,beta0 = Twiss0; +VARY,NAME=sinlh01.MQUA020.k1,STEP=0.0001; +VARY,NAME=sinlh01.MQUA040.k1,STEP=0.0001; +VARY,NAME=sinlh01.MQUA070.k1,STEP=0.0001; +VARY,NAME=sinsb03.MQUA130.k1,STEP=0.0001; +VARY,NAME=sinsb03.MQUA230.k1,STEP=0.0001; +VARY,NAME=sinsb04.MQUA130.k1,STEP=0.0001; +VARY,NAME=sinsb04.MQUA230.k1,STEP=0.0001; + +CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua230$end, alfx = alpha; +CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua230$end, alfy = alpha; +CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua230$end, betx = beta; +CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua230$end, bety = beta; +CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua130$end, betx < 100; +CONSTRAINT,SEQUENCE=SwissFEL,range=sinsb04.mqua130$end, bety < 100; +CONSTRAINT,SEQUENCE=SwissFEL,range=sinlh01.mqua070$end, betx < 100; +CONSTRAINT,SEQUENCE=SwissFEL,range=sinlh01.mqua070$end, bety < 100; +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +SIMPLEX,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + +sinbc01.mqua020.k1=0.0; +sinbc01.mqua050.k1=0; +sinbc01.mqua070.k1=0; +sinbc01.mqua090.k1=0; +sinbc01.mqua110.k1=0; + +twiss,SEQUENCE=swissfel,range=#s/sinbc01$end,beta0 = Twiss0; +plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; + +MATCH,SEQUENCE=SwissFEL,range=#s/sinma01$start,beta0 = Twiss0; +VARY,NAME=sinbc01.MQUA020.k1,STEP=0.0001; +VARY,NAME=sinbc01.MQUA050.k1,STEP=0.0001; +VARY,NAME=sinbc01.MQUA070.k1,STEP=0.0001; +VARY,NAME=sinbc01.MQUA090.k1,STEP=0.0001; +VARY,NAME=sinbc01.MQUA110.k1,STEP=0.0001; +CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc02$end, betx < 5; +CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc02$end, alfx = 0; +CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc01.mqua070$end, bety < 32; +CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc02$end, bety < 59; +CONSTRAINT,SEQUENCE=SwissFEL,range=sinbc01$end, x = 0; +SIMPLEX,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + +twiss,SEQUENCE=swissfel,range=#s/sinbc02$end,beta0 = Twiss0; +plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; + +sinma01.mqua020.k1=-0.1; +sinma01.mqua030.k1=0; +sinma01.mqua050.k1=0; +sincb01.mqua230.k1=0; +sincb01.mqua430.k1=0; + + +sindi01.mqua020.k1=0; +sindi01.mqua070.k1=0; + +sindi02.mqua020.k1=0.0; +sindi02.mqua030.k1=0.0; +sindi02.mqua050.k1=0; +sindi02.mqua060.k1=0; +sindi02.mqua090.k1=0; + +bc1betx=11.1557; +bc1alfx=-1.17; +bc1bety=50; +bc1alfy=0; + +beta=50; +MATCH,SEQUENCE=SwissFEL,range=#s/sindi02$end,beta0 = Twiss0; +VARY,NAME=sinma01.MQUA020.k1,STEP=0.0001; +VARY,NAME=sinma01.MQUA030.k1,STEP=0.0001; +VARY,NAME=sinma01.MQUA050.k1,STEP=0.0001; +VARY,NAME=sincb01.MQUA230.k1,STEP=0.0001; +VARY,NAME=sincb01.MQUA430.k1,STEP=0.0001; +VARY,NAME=sindi01.mqua020.k1,STEP=0.0001,lower=-3.5,upper=3.5; +VARY,NAME=sindi01.mqua070.k1,STEP=0.0001,lower=-3.5,upper=3.5; +CONSTRAINT,SEQUENCE=SwissFEL,range=sindi02.mqua020$start,bety=bc1bety; +CONSTRAINT,SEQUENCE=SwissFEL,range=sindi02.mqua020$start,alfy=bc1alfy; +CONSTRAINT,SEQUENCE=SwissFEL,range=sindi02.mqua020$start,betx=bc1betx; +CONSTRAINT,SEQUENCE=SwissFEL,range=sindi02.mqua020$start,alfx=bc1alfx; +CONSTRAINT,SEQUENCE=SwissFEL,range=sinma01$end, betx < 100; +CONSTRAINT,SEQUENCE=SwissFEL,range=sinma01$end, bety < 100; +CONSTRAINT,SEQUENCE=SwissFEL,range=sincb01$end, betx < 100; +CONSTRAINT,SEQUENCE=SwissFEL,range=sincb01$end, bety < 100; +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +SIMPLEX,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + + +twiss,SEQUENCE=swissfel,range=#s/sindi02$end,beta0 = Twiss0; +plot,haxis=s,vaxis=betx,bety,range=sinbc02$start/#e,colour=100; + + +s10cb01.mqua230.k1=0.2; +s10cb01.mqua430.k1=-0.2; + +muLin1=0.2; + +match,SEQUENCE=swissfel,range=S10cb01$start/s10cb01$end; +Vary,name=S10CB01.MQUA230.k1,step=0.0001; +Vary,name=S10CB01.MQUA430.k1,step=0.0001; +constraint,sequence=swissfel,range=s10cb01$end,mux=muLin1; +constraint,sequence=swissfel,range=s10cb01$end,muy=muLin1; +lmdif,calls=100,tolerance=1e-21; +endmatch; + +s10cb02.mqua230.k1 = s10cb01.mqua230.k1; +s10cb02.mqua430.k1 = s10cb01.mqua430.k1; + +twiss,SEQUENCE=swissfel,range=s10cb01$start/s10cb01$end; + +nbetx=table(twiss,s10cb01$end,betx); +nalfx=table(twiss,s10cb01$end,alfx); +nbety=table(twiss,s10cb01$end,bety); +nalfy=table(twiss,s10cb01$end,alfy); +plot,haxis=s,vaxis=betx,bety,colour=100; + + +MATCH,SEQUENCE=SwissFEL,range=#s/s10cb02$end,beta0 = Twiss0; +VARY,NAME=sindi02.mqua020.k1,STEP=0.0001,lower=-5.5,upper=5.5; +VARY,NAME=sindi02.mqua030.k1,STEP=0.0001,lower=-5.5,upper=5.5; +VARY,NAME=sindi02.mqua050.k1,STEP=0.0001,lower=-5.5,upper=5.5; +VARY,NAME=sindi02.mqua060.k1,STEP=0.0001,lower=-5.5,upper=5.5; +VARY,NAME=sindi02.mqua090.k1,STEP=0.0001,lower=-5.5,upper=5.5; +VARY,NAME=s10cb01.mqua230.k1,STEP=0.0001,lower=-5.5,upper=5.5; +VARY,NAME=s10cb01.mqua430.k1,STEP=0.0001,lower=-5.5,upper=5.5; + +CONSTRAINT,SEQUENCE=swissfel,range=s10cb02$start,betx=nbetx; +CONSTRAINT,SEQUENCE=swissfel,range=s10cb02$start,alfx=nalfx; +CONSTRAINT,SEQUENCE=swissfel,range=s10cb02$start,bety=nbety; +CONSTRAINT,SEQUENCE=swissfel,range=s10cb02$start,alfy=nalfy; +CONSTRAINT,SEQUENCE=swissfel,range=s10cb01$start,x=0; +CONSTRAINT,SEQUENCE=swissfel,range=s10cb01$start,y=0; +CONSTRAINT,SEQUENCE=swissfel,range=s10cb01$start,dx=0; +CONSTRAINT,SEQUENCE=swissfel,range=s10cb01$start,dy=0; +LMDIF,CALLS=1000,TOLERANCE=1.e-21; +ENDMATCH; + +twiss,SEQUENCE=swissfel,range=#s/s10cb02$end,beta0 = Twiss0; +plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; + +S10DI01.MQUA120.k1=S10CB02.MQUA230.k1; +S10CB03.MQUA230.k1=S10CB02.MQUA430.k1; +S10CB03.MQUA430.k1=S10CB02.MQUA230.k1; +S10CB04.MQUA230.k1=S10CB02.MQUA430.k1; +S10CB04.MQUA430.k1=S10CB02.MQUA230.k1; +S10CB05.MQUA230.k1=S10CB02.MQUA430.k1; +S10CB05.MQUA430.k1=S10CB02.MQUA230.k1; +S10CB06.MQUA230.k1=S10CB02.MQUA430.k1; +S10CB06.MQUA430.k1=S10CB02.MQUA230.k1; +S10CB07.MQUA230.k1=S10CB02.MQUA430.k1; +S10CB07.MQUA430.k1=S10CB02.MQUA230.k1; +S10CB08.MQUA230.k1=S10CB02.MQUA430.k1; +S10CB08.MQUA430.k1=S10CB02.MQUA230.k1; +S10CB09.MQUA230.k1=S10CB02.MQUA430.k1; +S10CB09.MQUA430.k1=S10CB02.MQUA230.k1; +S10CB10.MQUA230.k1=S10CB02.MQUA430.k1; +S10CB10.MQUA430.k1=S10CB02.MQUA230.k1; +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.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.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; +plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100; + + diff --git a/matchmaker.py b/matchmaker.py new file mode 100644 index 0000000..4dfaedd --- /dev/null +++ b/matchmaker.py @@ -0,0 +1,62 @@ +import re +from onlinemodel.madx import CMadX + + +class MatchMaker: + def __init__(self, scriptlocation = None): + self.scriptdir = scriptlocation + self.scriptInjector = 'matchInjector.madx' + self.scriptAramis = 'matchAramis.madx' + self.scriptAthos = 'matchAthos.madx' + + + + def match(self, om, Injector=True, Athos = True, Aramis = False): + + if Athos: + target = 'SATBD01' + else: + target = 'SARUN20' + madx = CMadX() + madx.E0 = 2000 + om.setBranch(target, 'SINLH01') + madx.updateLattice(om, target) # write lattice + madx.commonHeader('SwissFEL', '#s/#e', None) # sets header + madx.madx.call(self.scriptdir + '/initTwiss.madx') + if Injector: + madx.madx.call(self.scriptdir+'/matchInjector.madx', chdir=True) + self.updateOnlineModel(om,madx.madx, 's[i1].*k1|s20sy01.*k1') + if Athos: + madx.madx.call(self.scriptdir+'/matchAthos.madx', chdir=True) + self.updateOnlineModel(om, madx.madx, 'sat.*k1|s20sy02.*m[kq]') + if Aramis: + if target=='SATBD01': + target = 'SARUN20' + om.setBranch(target, 'SINLH01') + madx.updateLattice(om, target) # write lattice + madx.commonHeader('SwissFEL', '#s/#e', None) # sets header + madx.madx.call(self.scriptdir + '/initTwiss.madx') + madx.madx.call(self.scriptdir + '/matchAramis.madx', chdir=True) + + def updateOnlineModel(self,om,madx,filter): + reg = re.compile(filter) + for var in list(madx.globals): + if reg.match(var): + if '.k1' in var: + element = var.split('.k1')[0] + ele = om.getElement(element) + if not ele is None: + ele.k1 = madx.globals.get(var,0) + print('... Updating', ele.Name, 'to k1=',ele.k1) + else: + print('### Unidentified element', element) + elif '.cory' in var: + element = var.split('.cory')[0] + ele = om.getElement(element) + if not ele is None: + ele.design_kick = madx.globals.get(var, 0) + print('... Updating', ele.Name, 'to design_kick=', ele.design_kick) + else: + print('### Unidentified element', element) + + diff --git a/runOpticsTools.sh b/runOpticsTools.sh index 5f8f837..9911050 100755 --- a/runOpticsTools.sh +++ b/runOpticsTools.sh @@ -2,12 +2,27 @@ BASEDIR=$(dirname $0) echo "Script location: ${BASEDIR}" + +while : +do + echo $1 + case "$1" in + "-offline") offline=$2;; + "-phase") phase=$2;; + esac + shift +done +echo "-offline" +echo $offline +echo "-phase" +echo $phase + # runs in the sfbd conda environment SLIC source /sf/bd/packages/conda/etc/profile.d/conda.sh conda activate slic export PYTHONPATH=/sf/bd/packages/slic:/sf/bd/packages/sfbd:/sf/bd/packages/bstrd:/sf/bd/packages/pyrealta:/sf/bd/packages/onlinemodel:$PYTHONPATH cd $BASEDIR -python OpticsTools.py +#python OpticsTools.py ${:1} # needs command line arguments #-debug 1 -offline 0