Ready for release

This commit is contained in:
2025-12-18 14:42:40 +01:00
parent 1816ec94e3
commit a22a09d15a
7 changed files with 1039 additions and 19 deletions

View File

@@ -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)

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

62
matchmaker.py Normal file
View File

@@ -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)

View File

@@ -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