SF+ matching and support for ELegant lattice export
This commit is contained in:
1 parent
85b8e89917
commit
4e9a35b0e7
8 files changed
+818
-323
No files matched your search
@@ -13,6 +13,7 @@ from machine import Machine
|
||||
from reference import ReferenceManager
|
||||
from sandbox import Sandbox
|
||||
from matchmaker import MatchMaker
|
||||
from elegant import Elegant
|
||||
|
||||
|
||||
|
||||
@@ -35,6 +36,7 @@ class OpticsTools(QtWidgets.QMainWindow, QtCore.QObject, Ui_OpticsGUI):
|
||||
|
||||
# initialize online model
|
||||
self.model = Model(phase=phase,parent=self)
|
||||
self.elegant=Elegant(onlinemodel=self.model,parent=self)
|
||||
|
||||
# initialize modeling
|
||||
self.match = MatchMaker(signal=self.sigStatus,phase=phase)
|
||||
@@ -64,6 +66,7 @@ class OpticsTools(QtWidgets.QMainWindow, QtCore.QObject, Ui_OpticsGUI):
|
||||
self.UIMatchSelected.clicked.connect(self.doMatch)
|
||||
self.actionOpen_2.triggered.connect(self.loadSettings)
|
||||
self.actionSave.triggered.connect(self.saveSettings)
|
||||
self.actionExport_Elegant.triggered.connect(self.exportElegant)
|
||||
self.UIUpdateFromMachine.clicked.connect(self.fullUpdate)
|
||||
self.actionHelp.triggered.connect(self.openGit)
|
||||
self.actionAbout.triggered.connect(self.about)
|
||||
@@ -88,11 +91,16 @@ class OpticsTools(QtWidgets.QMainWindow, QtCore.QObject, Ui_OpticsGUI):
|
||||
vars = self.getMatchVariables()
|
||||
else:
|
||||
vars = None
|
||||
if self.UIDoInitialEnergy.isChecked():
|
||||
erg0 =float(str(self.UIInitialEnergy.text()))
|
||||
else:
|
||||
erg0=-1
|
||||
inittwiss={}
|
||||
inittwiss['betax']=float(str(self.UIInitBetax.text()))
|
||||
inittwiss['betay'] = float(str(self.UIInitBetay.text()))
|
||||
inittwiss['alphax'] = float(str(self.UIInitAlphax.text()))
|
||||
inittwiss['alphay'] = float(str(self.UIInitAlphay.text()))
|
||||
inittwiss['energy'] = erg0
|
||||
twiss = self.match.match(self.model.om, variables = vars, initCond = inittwiss, Injector = injector,Athos = athos, Aramis = aramis, Porthos = porthos, full = fullOutput)
|
||||
self.updateMatchResult(self.match.matchresult)
|
||||
energy = self.model.calcEnergyProfile(twiss)
|
||||
@@ -162,6 +170,8 @@ class OpticsTools(QtWidgets.QMainWindow, QtCore.QObject, Ui_OpticsGUI):
|
||||
variables[name]={'Val':val}
|
||||
return variables
|
||||
|
||||
def exportElegant(self):
|
||||
self.elegant.export()
|
||||
|
||||
def closeEvent(self, event):
|
||||
self.plot.close()
|
||||
|
||||
@@ -19,6 +19,7 @@ ealign,DY=0.01;
|
||||
|
||||
|
||||
|
||||
|
||||
Print,text='MATCH POINT: Kicker Strength of Septum';
|
||||
MATCH,SEQUENCE=swissfel,range=s20sy02$start/s20sy02$end,beta0=Twisssep;
|
||||
VARY,NAME=s20sy02.mqua070.k1,STEP=0.0001,lower=-3,upper=3;
|
||||
@@ -30,7 +31,7 @@ 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;
|
||||
CONSTRAINT,SEQUENCE=swissfel,range=S20SY02.mqua180$end, BETY < 60;
|
||||
LMDIF,CALLS=8000,TOLERANCE=1.e-21;
|
||||
ENDMATCH;
|
||||
|
||||
@@ -49,43 +50,41 @@ plot,haxis=s,vaxis=betx,bety,range=#s/#e,colour=100;
|
||||
plot,haxis=s,vaxis=y,dy,range=#s/#e,colour=100;
|
||||
|
||||
|
||||
satsy01.mqua110.k1=-1.7;
|
||||
|
||||
|
||||
Print,text='MATCH POINT: Closed Dispersion in Switchyard';
|
||||
MATCH,SEQUENCE=Swissfel,range=s20sy02$start/satsy02$end,beta0=twisssep;
|
||||
MATCH,SEQUENCE=Swissfel,range=s20sy02$start/satsy02$start,beta0=twisssep;
|
||||
VARY,NAME=satsy01.mqua020.k1,STEP=0.0001;
|
||||
VARY,NAME=satsy01.mqua050.k1,STEP=0.0001;
|
||||
VARY,NAME=satsy01.mqua080.k1,STEP=0.0001;
|
||||
VARY,NAME=satsy02.mqua010.k1,STEP=0.0001;
|
||||
!VARY,NAME=satsy01.mqua110.k1,STEP=0.0001;
|
||||
VARY,NAME=satsy01.mqua120.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;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy01$end,DY=0.0;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy01$end,DPY=0.0;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy01$end,BETX<10;
|
||||
JACOBIAN,CALLS=1000,TOLERANCE=1.e-21;
|
||||
SIMPLEX,CALLS=1000,TOLERANCE=1.e-21;
|
||||
ENDMATCH;
|
||||
|
||||
|
||||
|
||||
Print,text='MATCH POINT: Sextupoles in Switch Yard';
|
||||
MATCH,chrom,SEQUENCE=swissfel,range=s20sy02$start/satsy02$end,beta0=twisssep;
|
||||
VARY,NAME=satsy01.msex030.k2,STEP=0.0001;
|
||||
VARY,NAME=satsy01.msex090.k2,STEP=0.0001;
|
||||
CONSTRAINT,SEQUENCE=swissfel,range=satsy01$end,ddx=0;
|
||||
CONSTRAINT,SEQUENCE=swissfel,range=satsy01$end,ddpx=0;
|
||||
LMDIF,CALLS=100,TOLERANCE=1.e-21;
|
||||
ENDMATCH;
|
||||
!Print,text='MATCH POINT: Sextupoles in Switch Yard';
|
||||
!MATCH,chrom,SEQUENCE=swissfel,range=s20sy02$start/satsy02$end,beta0=twisssep;
|
||||
!VARY,NAME=satsy01.msex030.k2,STEP=0.0001;
|
||||
!VARY,NAME=satsy01.msex090.k2,STEP=0.0001;
|
||||
!CONSTRAINT,SEQUENCE=swissfel,range=satsy01$end,ddx=0;
|
||||
!CONSTRAINT,SEQUENCE=swissfel,range=satsy01$end,ddpx=0;
|
||||
!LMDIF,CALLS=100,TOLERANCE=1.e-21;
|
||||
!ENDMATCH;
|
||||
|
||||
|
||||
|
||||
twiss,chrom,SEQUENCE=swissfel,range=s20sy02$start/Satsy02.mqua210$start,beta0=twisssep;
|
||||
twiss,chrom,SEQUENCE=swissfel,range=s20sy02$start/Satsy02.mqua010$start,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=ddx,range=#s/#e,colour=100;
|
||||
|
||||
|
||||
|
||||
Print,text='MATCH POINT: Closed Dispersion in SATSY03';
|
||||
MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satsy03$end,beta0=twisssep;
|
||||
VARY,NAME=satsy03.mqua130.k1,STEP=0.0001;
|
||||
@@ -94,35 +93,35 @@ LMDIF,CALLS=1000,TOLERANCE=1.e-21;
|
||||
ENDMATCH;
|
||||
|
||||
|
||||
Print,text='MATCH POINT: Sextupoles in SATSY03';
|
||||
MATCH,chrom,SEQUENCE=swissfel,range=s20sy02$start/satsy03$end,beta0=twisssep;
|
||||
VARY,NAME=satsy03.msex110.k2,STEP=0.0001;
|
||||
VARY,NAME=satsy03.msex140.k2,STEP=0.0001;
|
||||
CONSTRAINT,SEQUENCE=swissfel,range=satsy03.mqua220$start,ddx=0;
|
||||
CONSTRAINT,SEQUENCE=swissfel,range=satsy03.mqua220$start,ddpx=0;
|
||||
LMDIF,CALLS=100,TOLERANCE=1.e-21;
|
||||
ENDMATCH;
|
||||
|
||||
|
||||
!Print,text='MATCH POINT: Sextupoles in SATSY03';
|
||||
!MATCH,chrom,SEQUENCE=swissfel,range=s20sy02$start/satsy03$end,beta0=twisssep;
|
||||
!VARY,NAME=satsy03.msex110.k2,STEP=0.0001;
|
||||
!VARY,NAME=satsy03.msex140.k2,STEP=0.0001;
|
||||
!CONSTRAINT,SEQUENCE=swissfel,range=satsy03.mqua220$start,ddx=0;
|
||||
!CONSTRAINT,SEQUENCE=swissfel,range=satsy03.mqua220$start,ddpx=0;
|
||||
!LMDIF,CALLS=100,TOLERANCE=1.e-21;
|
||||
!ENDMATCH;
|
||||
|
||||
|
||||
|
||||
|
||||
Print,text='MATCH POINT: Switchyard Drift';
|
||||
MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satsy03$end,beta0=twisssep;
|
||||
VARY,NAME=satsy02.mqua210.k1,STEP=0.0001;
|
||||
VARY,NAME=satsy02.mqua230.k1,STEP=0.0001;
|
||||
VARY,NAME=satsy02.mqua240.k1,STEP=0.0001;
|
||||
VARY,NAME=satsy02.mqua260.k1,STEP=0.0001;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua260$end,betx=twissAT1->BETX;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua260$end,bety=twissAT1->BETY;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua260$end,alfx=twissAT1->ALFX;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua260$end,alfy=twissAT1->ALFY;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua230$end,betx<120;
|
||||
VARY,NAME=satsy02.mqua010.k1,STEP=0.0001;
|
||||
VARY,NAME=satsy02.mqua030.k1,STEP=0.0001;
|
||||
VARY,NAME=satsy02.mqua050.k1,STEP=0.0001;
|
||||
VARY,NAME=satsy02.mqua080.k1,STEP=0.0001;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua080$end,betx=twissAT1->BETX;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua080$end,bety=twissAT1->BETY;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua080$end,alfx=twissAT1->ALFX;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua080$end,alfy=twissAT1->ALFY;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua050$end,betx<150;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satsy02.mqua050$end,bety<150;
|
||||
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
|
||||
ENDMATCH;
|
||||
|
||||
|
||||
|
||||
Print,text='MATCH POINT: Match into SATSY03';
|
||||
MATCH,SEQUENCE=SwissFEL,range=s20sy02$start/satsy03$end,beta0=twisssep;
|
||||
VARY,NAME=satsy02.mqua300.k1,STEP=0.0001;
|
||||
@@ -156,8 +155,8 @@ CONSTRAINT,SEQUENCE=SwissFEL,range= satbc01.mbnd100,BETX<180;
|
||||
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
|
||||
ENDMATCH;
|
||||
|
||||
CL1.k1 := -1.;
|
||||
CL2.k1 := 1.3;
|
||||
CL1.k1 := -1;
|
||||
CL2.k1 := 1;
|
||||
satcl01.mqua120.k1 := CL1.k1;
|
||||
satcl01.mqua130.k1 := CL2.k1;
|
||||
satcl01.mqua180.k1 := CL2.k1;
|
||||
@@ -165,14 +164,16 @@ satcl01.mqua190.k1 := CL1.k1;
|
||||
|
||||
|
||||
Print,text='MATCH POINT: Closed Dispersion in SATCL01';
|
||||
MATCH,SEQUENCE=SwissFEL,range=satcl01$start/satcl01$end,betx=3,alfx=0,bety=50,alfy=5;
|
||||
MATCH,SEQUENCE=SwissFEL,range=satcl01$start/satdi01$end,betx=3,alfx=0,bety=50,alfy=5,dx=0,dpx=0;
|
||||
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;
|
||||
!CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01$end,dx=0;
|
||||
!CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01$end,dpx=0;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satdi01.mqua025$start,dx=0;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satdi01.mqua025$start,dpx=0;
|
||||
|
||||
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
|
||||
SIMPLEX,CALLS=1000,TOLERANCE=1.e-21;
|
||||
ENDMATCH;
|
||||
|
||||
|
||||
@@ -202,12 +203,12 @@ ENDMATCH;
|
||||
|
||||
Print,text='MATCH POINT: Sextupole in SATCL01';
|
||||
MATCH,chrom,SEQUENCE=SwissFEL,range=s20sy02$start/satdi01$end,beta0=twisssep;
|
||||
VARY,NAME=satcl01.msex110.k2,STEP=0.0001;
|
||||
VARY,NAME=satcl01.msex160.k2,STEP=0.0001;
|
||||
!VARY,NAME=satcl01.msex110.k2,STEP=0.0001;
|
||||
!VARY,NAME=satcl01.msex160.k2,STEP=0.0001;
|
||||
VARY,NAME=satcl01.mqua180.k1,STEP=0.0001;
|
||||
VARY,NAME=satcl01.mqua190.k1,STEP=0.0001;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01$end,ddx=0;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01$end,ddpx=0;
|
||||
!CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01$end,ddx=0;
|
||||
!CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01$end,ddpx=0;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01$end,dx=0;
|
||||
CONSTRAINT,SEQUENCE=SwissFEL,range= satcl01$end,dpx=0;
|
||||
LMDIF,CALLS=1000,TOLERANCE=1.e-21;
|
||||
|
||||
+273
-273
@@ -17,52 +17,52 @@
|
||||
"k1L": 0.0
|
||||
},
|
||||
"SINLH01.MQUA020": {
|
||||
"k1": 0.36620934394283317,
|
||||
"k1L": 0.054931401591424976
|
||||
"k1": 0.08689426596763641,
|
||||
"k1L": 0.013034139895145461
|
||||
},
|
||||
"SINLH01.MQUA040": {
|
||||
"k1": -0.013814977177058532,
|
||||
"k1L": -0.0020722465765587797
|
||||
"k1": 0.3495688049658884,
|
||||
"k1L": 0.05243532074488325
|
||||
},
|
||||
"SINLH01.MQUA070": {
|
||||
"k1": 0.8750137053045284,
|
||||
"k1L": 0.13125205579567925
|
||||
"k1": 0.8092252430523499,
|
||||
"k1L": 0.12138378645785247
|
||||
},
|
||||
"SINSB03.MQUA130": {
|
||||
"k1": -0.8715614149953018,
|
||||
"k1L": -0.13073421224929527
|
||||
"k1": -0.9015430377145227,
|
||||
"k1L": -0.1352314556571784
|
||||
},
|
||||
"SINSB03.MQUA230": {
|
||||
"k1": 1.6106130013389368,
|
||||
"k1L": 0.2415919502008405
|
||||
"k1": 1.5924298128731744,
|
||||
"k1L": 0.23886447193097615
|
||||
},
|
||||
"SINSB04.MQUA130": {
|
||||
"k1": -1.363887477240887,
|
||||
"k1L": -0.20458312158613307
|
||||
"k1": -1.3222488468339773,
|
||||
"k1L": -0.19833732702509657
|
||||
},
|
||||
"SINSB04.MQUA230": {
|
||||
"k1": 1.5192268545482268,
|
||||
"k1L": 0.22788402818223402
|
||||
"k1": 1.284281546784505,
|
||||
"k1L": 0.19264223201767575
|
||||
},
|
||||
"SINBC01.MQUA020": {
|
||||
"k1": 5.0051988744668385,
|
||||
"k1L": 0.7507798311700258
|
||||
"k1": 5.005198896632219,
|
||||
"k1L": 0.7507798344948329
|
||||
},
|
||||
"SINBC01.MQUA050": {
|
||||
"k1": -1.3552460259497292,
|
||||
"k1L": -0.20328690389245938
|
||||
"k1": -1.3552461151773778,
|
||||
"k1L": -0.20328691727660667
|
||||
},
|
||||
"SINBC01.MQUA070": {
|
||||
"k1": -0.3830830345978297,
|
||||
"k1L": -0.05746245518967445
|
||||
"k1": -0.3830829823134076,
|
||||
"k1L": -0.057462447347011135
|
||||
},
|
||||
"SINBC01.MQUA090": {
|
||||
"k1": -2.2877140525712503,
|
||||
"k1L": -0.34315710788568754
|
||||
"k1": -2.2877140540439056,
|
||||
"k1L": -0.34315710810658584
|
||||
},
|
||||
"SINBC01.MQUA110": {
|
||||
"k1": 2.739832222865398,
|
||||
"k1L": 0.41097483342980967
|
||||
"k1": 2.7398322193286893,
|
||||
"k1L": 0.41097483289930337
|
||||
},
|
||||
"SINBC02.MQSK110": {
|
||||
"k1": 0.0,
|
||||
@@ -81,192 +81,192 @@
|
||||
"k1L": 0.0
|
||||
},
|
||||
"SINMA01.MQUA020": {
|
||||
"k1": -0.796160745080611,
|
||||
"k1L": -0.11942411176209164
|
||||
"k1": -0.79616049341844,
|
||||
"k1L": -0.11942407401276599
|
||||
},
|
||||
"SINMA01.MQUA030": {
|
||||
"k1": -0.0973402324886211,
|
||||
"k1L": -0.014601034873293164
|
||||
"k1": -0.09734079474349366,
|
||||
"k1L": -0.01460111921152405
|
||||
},
|
||||
"SINMA01.MQUA050": {
|
||||
"k1": 0.43727136307188413,
|
||||
"k1L": 0.06559070446078262
|
||||
"k1": 0.4372717527741337,
|
||||
"k1L": 0.06559076291612005
|
||||
},
|
||||
"SINCB01.MQUA230": {
|
||||
"k1": 1.1239554722667795,
|
||||
"k1L": 0.1685933208400169
|
||||
"k1": 1.123955381886233,
|
||||
"k1L": 0.16859330728293492
|
||||
},
|
||||
"SINCB01.MQUA430": {
|
||||
"k1": -0.2616752802877761,
|
||||
"k1L": -0.039251292043166415
|
||||
"k1": -0.2616752171909828,
|
||||
"k1L": -0.03925128257864742
|
||||
},
|
||||
"SINDI01.MQUA020": {
|
||||
"k1": -0.5791918914752151,
|
||||
"k1L": -0.08687878372128226
|
||||
"k1": -0.5791917670811274,
|
||||
"k1L": -0.08687876506216911
|
||||
},
|
||||
"SINDI01.MQSK030": {
|
||||
"k1": 0.0,
|
||||
"k1L": 0.0
|
||||
},
|
||||
"SINDI01.MQUA070": {
|
||||
"k1": 0.12803905933769652,
|
||||
"k1L": 0.019205858900654477
|
||||
"k1": 0.12803890813311772,
|
||||
"k1L": 0.019205836219967656
|
||||
},
|
||||
"SINDI02.MQUA020": {
|
||||
"k1": -1.3489159089890062,
|
||||
"k1L": -0.2023373863483509
|
||||
"k1": -1.3864676735437733,
|
||||
"k1L": -0.207970151031566
|
||||
},
|
||||
"SINDI02.MQUA030": {
|
||||
"k1": 1.0340874760230605,
|
||||
"k1L": 0.15511312140345906
|
||||
"k1": 1.1836428852018135,
|
||||
"k1L": 0.17754643278027202
|
||||
},
|
||||
"SINDI02.MQUA050": {
|
||||
"k1": 0.3506594538970562,
|
||||
"k1L": 0.05259891808455843
|
||||
"k1": 0.4317093237602979,
|
||||
"k1L": 0.06475639856404468
|
||||
},
|
||||
"SINDI02.MQUA060": {
|
||||
"k1": 0.30394534170272214,
|
||||
"k1L": 0.04559180125540832
|
||||
"k1": 0.27921960086263015,
|
||||
"k1L": 0.04188294012939452
|
||||
},
|
||||
"SINDI02.MQUA090": {
|
||||
"k1": -0.3610969993932116,
|
||||
"k1L": -0.054164549908981736
|
||||
"k1": -0.5045474804054468,
|
||||
"k1L": -0.07568212206081702
|
||||
},
|
||||
"S10CB01.MQUA230": {
|
||||
"k1": 0.47466278368218734,
|
||||
"k1L": 0.0711994175523281
|
||||
"k1": 0.3687762762289991,
|
||||
"k1L": 0.05531644143434986
|
||||
},
|
||||
"S10CB01.MQUA430": {
|
||||
"k1": 0.12258962576471828,
|
||||
"k1L": 0.01838844386470774
|
||||
"k1": 0.26893133241207234,
|
||||
"k1L": 0.04033969986181085
|
||||
},
|
||||
"S10CB02.MQUA230": {
|
||||
"k1": -0.8305860577067147,
|
||||
"k1L": -0.12458790865600719
|
||||
"k1": -0.8305860577067142,
|
||||
"k1L": -0.12458790865600713
|
||||
},
|
||||
"S10CB02.MQUA430": {
|
||||
"k1": 0.830580330412648,
|
||||
"k1L": 0.1245870495618972
|
||||
"k1": 0.8305803304126476,
|
||||
"k1L": 0.12458704956189713
|
||||
},
|
||||
"S10DI01.MQUA030": {
|
||||
"k1": 0.0,
|
||||
"k1L": 0.0
|
||||
},
|
||||
"S10DI01.MQUA120": {
|
||||
"k1": -0.8305860577067147,
|
||||
"k1L": -0.12458790865600719
|
||||
"k1": -0.8305860577067142,
|
||||
"k1L": -0.12458790865600713
|
||||
},
|
||||
"S10CB03.MQUA230": {
|
||||
"k1": 0.830580330412648,
|
||||
"k1L": 0.1245870495618972
|
||||
"k1": 0.8305803304126476,
|
||||
"k1L": 0.12458704956189713
|
||||
},
|
||||
"S10CB03.MQUA430": {
|
||||
"k1": -0.8305860577067147,
|
||||
"k1L": -0.12458790865600719
|
||||
"k1": -0.8305860577067142,
|
||||
"k1L": -0.12458790865600713
|
||||
},
|
||||
"S10CB04.MQUA230": {
|
||||
"k1": 0.830580330412648,
|
||||
"k1L": 0.1245870495618972
|
||||
"k1": 0.8305803304126476,
|
||||
"k1L": 0.12458704956189713
|
||||
},
|
||||
"S10CB04.MQUA430": {
|
||||
"k1": -0.8305860577067147,
|
||||
"k1L": -0.12458790865600719
|
||||
"k1": -0.8305860577067142,
|
||||
"k1L": -0.12458790865600713
|
||||
},
|
||||
"S10CB05.MQUA230": {
|
||||
"k1": 0.830580330412648,
|
||||
"k1L": 0.1245870495618972
|
||||
"k1": 0.8305803304126476,
|
||||
"k1L": 0.12458704956189713
|
||||
},
|
||||
"S10CB05.MQUA430": {
|
||||
"k1": -0.8305860577067147,
|
||||
"k1L": -0.12458790865600719
|
||||
"k1": -0.8305860577067142,
|
||||
"k1L": -0.12458790865600713
|
||||
},
|
||||
"S10CB06.MQUA230": {
|
||||
"k1": 0.830580330412648,
|
||||
"k1L": 0.1245870495618972
|
||||
"k1": 0.8305803304126476,
|
||||
"k1L": 0.12458704956189713
|
||||
},
|
||||
"S10CB06.MQUA430": {
|
||||
"k1": -0.8305860577067147,
|
||||
"k1L": -0.12458790865600719
|
||||
"k1": -0.8305860577067142,
|
||||
"k1L": -0.12458790865600713
|
||||
},
|
||||
"S10CB07.MQUA230": {
|
||||
"k1": 0.830580330412648,
|
||||
"k1L": 0.1245870495618972
|
||||
"k1": 0.8305803304126476,
|
||||
"k1L": 0.12458704956189713
|
||||
},
|
||||
"S10CB07.MQUA430": {
|
||||
"k1": -0.8305860577067147,
|
||||
"k1L": -0.12458790865600719
|
||||
"k1": -0.8305860577067142,
|
||||
"k1L": -0.12458790865600713
|
||||
},
|
||||
"S10CB08.MQUA230": {
|
||||
"k1": 0.830580330412648,
|
||||
"k1L": 0.1245870495618972
|
||||
"k1": 0.8305803304126476,
|
||||
"k1L": 0.12458704956189713
|
||||
},
|
||||
"S10CB08.MQUA430": {
|
||||
"k1": -0.8305860577067147,
|
||||
"k1L": -0.12458790865600719
|
||||
"k1": -0.8305860577067142,
|
||||
"k1L": -0.12458790865600713
|
||||
},
|
||||
"S10CB09.MQUA230": {
|
||||
"k1": 0.830580330412648,
|
||||
"k1L": 0.1245870495618972
|
||||
"k1": 0.8305803304126476,
|
||||
"k1L": 0.12458704956189713
|
||||
},
|
||||
"S10CB09.MQUA430": {
|
||||
"k1": -0.8305860577067147,
|
||||
"k1L": -0.12458790865600719
|
||||
"k1": -0.8305860577067142,
|
||||
"k1L": -0.12458790865600713
|
||||
},
|
||||
"S10CB10.MQUA230": {
|
||||
"k1": 0.830580330412648,
|
||||
"k1L": 0.1245870495618972
|
||||
"k1": 0.8305803304126476,
|
||||
"k1L": 0.12458704956189713
|
||||
},
|
||||
"S10CB10.MQUA430": {
|
||||
"k1": -0.8305860577067147,
|
||||
"k1L": -0.12458790865600719
|
||||
"k1": -0.8305860577067142,
|
||||
"k1L": -0.12458790865600713
|
||||
},
|
||||
"S10CB11.MQUA230": {
|
||||
"k1": 0.830580330412648,
|
||||
"k1L": 0.1245870495618972
|
||||
"k1": 0.8305803304126476,
|
||||
"k1L": 0.12458704956189713
|
||||
},
|
||||
"S20SY01.MQUA010": {
|
||||
"k1": -0.7572477177136773,
|
||||
"k1L": -0.11358715765705159
|
||||
"k1": -0.7572477177130097,
|
||||
"k1L": -0.11358715765695145
|
||||
},
|
||||
"S20SY01.MQUA030": {
|
||||
"k1": 1.2405737827596908,
|
||||
"k1L": 0.18608606741395362
|
||||
"k1": 1.2405737827592254,
|
||||
"k1L": 0.1860860674138838
|
||||
},
|
||||
"S20SY01.MQUA040": {
|
||||
"k1": -1.248134967049847,
|
||||
"k1L": -0.18722024505747703
|
||||
"k1": -1.2481349670502586,
|
||||
"k1L": -0.1872202450575388
|
||||
},
|
||||
"S20SY01.MQUA060": {
|
||||
"k1": 0.27871808261871167,
|
||||
"k1L": 0.04180771239280675
|
||||
"k1": 0.2787180826192188,
|
||||
"k1L": 0.04180771239288282
|
||||
},
|
||||
"S20SY02.MQUA070": {
|
||||
"k1": 1.55717,
|
||||
"k1L": 0.2335755
|
||||
"k1": 1.5571702267477394,
|
||||
"k1L": 0.2335755340121609
|
||||
},
|
||||
"S20SY02.MQUA100": {
|
||||
"k1": 0.013737,
|
||||
"k1L": 0.00206055
|
||||
"k1": 0.013736815174708249,
|
||||
"k1L": 0.002060522276206237
|
||||
},
|
||||
"S20SY02.MQUA140": {
|
||||
"k1": -1.170621,
|
||||
"k1L": -0.17559314999999998
|
||||
"k1": -1.170620890378731,
|
||||
"k1L": -0.17559313355680964
|
||||
},
|
||||
"S20SY02.MQUA180": {
|
||||
"k1": -0.140944,
|
||||
"k1L": -0.0211416
|
||||
"k1": -0.14094360914972026,
|
||||
"k1L": -0.02114154137245804
|
||||
},
|
||||
"S20BC01.MQUA010": {
|
||||
"k1": 0.873603591111957,
|
||||
"k1L": 0.13104053866679355
|
||||
"k1": 0.87835097911722,
|
||||
"k1L": 0.131752646867583
|
||||
},
|
||||
"S20BC01.MQUA030": {
|
||||
"k1": -0.9379972125264844,
|
||||
"k1L": -0.14069958187897266
|
||||
"k1": -0.9432169386970741,
|
||||
"k1L": -0.1414825408045611
|
||||
},
|
||||
"S20BC01.MQUA060": {
|
||||
"k1": 0.8647707996664207,
|
||||
"k1L": 0.12971561994996308
|
||||
"k1": 0.8676538482103706,
|
||||
"k1L": 0.13014807723155558
|
||||
},
|
||||
"S20BC02.MQSK110": {
|
||||
"k1": 0.0,
|
||||
@@ -285,40 +285,40 @@
|
||||
"k1L": 0.0
|
||||
},
|
||||
"S20MA01.MQUA010": {
|
||||
"k1": -0.20801880090673047,
|
||||
"k1L": -0.03120282013600957
|
||||
"k1": -0.2402040740515919,
|
||||
"k1L": -0.03603061110773878
|
||||
},
|
||||
"S20MA01.MQUA020": {
|
||||
"k1": -1.171764144178601,
|
||||
"k1L": -0.17576462162679016
|
||||
"k1": -1.14289795759262,
|
||||
"k1L": -0.171434693638893
|
||||
},
|
||||
"S20MA01.MQUA040": {
|
||||
"k1": 1.320901221249259,
|
||||
"k1L": 0.19813518318738885
|
||||
"k1": 1.331391157659883,
|
||||
"k1L": 0.19970867364898243
|
||||
},
|
||||
"S20CB01.MQUA430": {
|
||||
"k1": 0.3340241529425683,
|
||||
"k1L": 0.05010362294138525
|
||||
"k1": 0.3178095692302476,
|
||||
"k1L": 0.04767143538453714
|
||||
},
|
||||
"S20CB02.MQUA430": {
|
||||
"k1": 0.4182949696331242,
|
||||
"k1L": 0.06274424544496862
|
||||
"k1": 0.41829496962824636,
|
||||
"k1L": 0.06274424544423696
|
||||
},
|
||||
"S20CB03.MQUA430": {
|
||||
"k1": -0.7121361011399584,
|
||||
"k1L": -0.10682041517099376
|
||||
"k1": -0.7121361011386458,
|
||||
"k1L": -0.10682041517079686
|
||||
},
|
||||
"S20CB04.MQUA430": {
|
||||
"k1": 0.8147392424101467,
|
||||
"k1L": 0.122210886361522
|
||||
"k1": 0.8147392424087534,
|
||||
"k1L": 0.122210886361313
|
||||
},
|
||||
"S30CB01.MQUA430": {
|
||||
"k1": -0.7094285418856833,
|
||||
"k1L": -0.10641428128285249
|
||||
"k1": -0.7094285418872037,
|
||||
"k1L": -0.10641428128308056
|
||||
},
|
||||
"S30CB02.MQUA430": {
|
||||
"k1": 0.6690212627857176,
|
||||
"k1L": 0.10035318941785763
|
||||
"k1": 0.6690212627858554,
|
||||
"k1L": 0.10035318941787831
|
||||
},
|
||||
"S30CB03.MQUA430": {
|
||||
"k1": -0.7877148024385267,
|
||||
@@ -361,20 +361,20 @@
|
||||
"k1L": 0.11815689582252914
|
||||
},
|
||||
"S30CB13.MQUA430": {
|
||||
"k1": -0.507676594003293,
|
||||
"k1L": -0.07615148910049395
|
||||
"k1": -0.5076765938728264,
|
||||
"k1L": -0.07615148908092395
|
||||
},
|
||||
"S30CB14.MQUA430": {
|
||||
"k1": -0.30449789907398617,
|
||||
"k1L": -0.09134936972219584
|
||||
"k1": -0.30449790049608394,
|
||||
"k1L": -0.09134937014882517
|
||||
},
|
||||
"S30CB15.MQUA010": {
|
||||
"k1": -0.17009981277881317,
|
||||
"k1L": -0.05102994383364395
|
||||
"k1": -0.17009981041529426,
|
||||
"k1L": -0.05102994312458828
|
||||
},
|
||||
"S30CB15.MQUA020": {
|
||||
"k1": 0.900363739835595,
|
||||
"k1L": 0.2701091219506785
|
||||
"k1": 0.900363738875515,
|
||||
"k1L": 0.2701091216626545
|
||||
},
|
||||
"S30CB15.MQUA100": {
|
||||
"k1": -0.20725616868530256,
|
||||
@@ -385,28 +385,28 @@
|
||||
"k1L": -0.1554421265139769
|
||||
},
|
||||
"SARCL01.MQUA020": {
|
||||
"k1": 1.0485042112239236,
|
||||
"k1L": 0.31455126336717704
|
||||
"k1": 0.17803529165711338,
|
||||
"k1L": 0.05341058749713401
|
||||
},
|
||||
"SARCL01.MQUA050": {
|
||||
"k1": -0.8452727407706724,
|
||||
"k1L": -0.2535818222312017
|
||||
"k1": 0.6695804754369342,
|
||||
"k1L": 0.20087414263108025
|
||||
},
|
||||
"SARCL01.MQUA080": {
|
||||
"k1": -0.4003274763369442,
|
||||
"k1L": -0.12009824290108326
|
||||
"k1": -0.8857700557137619,
|
||||
"k1L": -0.2657310167141286
|
||||
},
|
||||
"SARCL01.MQUA100": {
|
||||
"k1": 0.6199535586235788,
|
||||
"k1L": 0.18598606758707364
|
||||
"k1": 0.30077564673670043,
|
||||
"k1L": 0.09023269402101013
|
||||
},
|
||||
"SARCL01.MQUA140": {
|
||||
"k1": 1.1619233966505333,
|
||||
"k1L": 0.34857701899515997
|
||||
"k1": 1.377857870937014,
|
||||
"k1L": 0.4133573612811042
|
||||
},
|
||||
"SARCL01.MQUA190": {
|
||||
"k1": -1.366953399953986,
|
||||
"k1L": -0.4100860199861958
|
||||
"k1": -1.3409897965787412,
|
||||
"k1L": -0.40229693897362234
|
||||
},
|
||||
"SARCL02.MQUA130": {
|
||||
"k1": 1.8,
|
||||
@@ -453,24 +453,24 @@
|
||||
"k1L": 0.54
|
||||
},
|
||||
"SARMA01.MQUA010": {
|
||||
"k1": -1.6435399681642,
|
||||
"k1L": -0.49306199044925997
|
||||
"k1": -1.6435399685725367,
|
||||
"k1L": -0.493061990571761
|
||||
},
|
||||
"SARMA01.MQUA060": {
|
||||
"k1": 1.5481652397872268,
|
||||
"k1L": 0.464449571936168
|
||||
"k1": 1.548165239970835,
|
||||
"k1L": 0.4644495719912505
|
||||
},
|
||||
"SARMA01.MQUA080": {
|
||||
"k1": -1.6684096984720258,
|
||||
"k1L": -0.5005229095416077
|
||||
"k1": -1.668409697928156,
|
||||
"k1L": -0.5005229093784468
|
||||
},
|
||||
"SARMA01.MQUA120": {
|
||||
"k1": 1.0445451496443325,
|
||||
"k1L": 0.31336354489329976
|
||||
"k1": 1.0445451491745348,
|
||||
"k1L": 0.31336354475236045
|
||||
},
|
||||
"SARMA01.MQUA140": {
|
||||
"k1": -0.556714038363632,
|
||||
"k1L": -0.1670142115090896
|
||||
"k1": -0.5567140374763775,
|
||||
"k1L": -0.16701421124291324
|
||||
},
|
||||
"SARMA02.MQUA050": {
|
||||
"k1": 0.0,
|
||||
@@ -549,12 +549,12 @@
|
||||
"k1L": -0.18797422953822612
|
||||
},
|
||||
"SARUN18.MQUA080": {
|
||||
"k1": -0.2275965827509157,
|
||||
"k1L": -0.018207726620073257
|
||||
"k1": -0.33420819140062025,
|
||||
"k1L": -0.02673665531204962
|
||||
},
|
||||
"SARUN19.MQUA080": {
|
||||
"k1": 0.9970832678636612,
|
||||
"k1L": 0.0797666614290929
|
||||
"k1": 1.056174072947472,
|
||||
"k1L": 0.08449392583579776
|
||||
},
|
||||
"SARUN20.MQUA220": {
|
||||
"k1": 0.8363412365675689,
|
||||
@@ -569,20 +569,20 @@
|
||||
"k1L": -0.16799985830701
|
||||
},
|
||||
"SATSY01.MQUA020": {
|
||||
"k1": 1.5148580412102386,
|
||||
"k1L": 0.4544574123630716
|
||||
"k1": 1.4485649054987229,
|
||||
"k1L": 0.43456947164961685
|
||||
},
|
||||
"SATSY01.MQSK040": {
|
||||
"k1": 0,
|
||||
"k1L": 0.0
|
||||
},
|
||||
"SATSY01.MQUA050": {
|
||||
"k1": -2.519230530479981,
|
||||
"k1L": -0.7557691591439943
|
||||
"k1": -2.0492313402917417,
|
||||
"k1L": -0.6147694020875225
|
||||
},
|
||||
"SATSY01.MQUA080": {
|
||||
"k1": 2.2866664735587365,
|
||||
"k1L": 0.6859999420676209
|
||||
"k1": 2.7402388431620075,
|
||||
"k1L": 0.8220716529486022
|
||||
},
|
||||
"SATSY01.MQSK100": {
|
||||
"k1": 0,
|
||||
@@ -593,24 +593,24 @@
|
||||
"k1L": -0.255
|
||||
},
|
||||
"SATSY02.MQUA010": {
|
||||
"k1": 0.8441269487029979,
|
||||
"k1L": 0.25323808461089936
|
||||
"k1": -0.6408627305578825,
|
||||
"k1L": -0.19225881916736473
|
||||
},
|
||||
"SATSY02.MQUA210": {
|
||||
"k1": 3.521141,
|
||||
"k1L": 1.0563423
|
||||
"k1": 2.6781686064452224,
|
||||
"k1L": 0.8034505819335667
|
||||
},
|
||||
"SATSY02.MQUA230": {
|
||||
"k1": -3.756948,
|
||||
"k1L": -0.5635422
|
||||
"k1": -3.5739038342617704,
|
||||
"k1L": -0.5360855751392656
|
||||
},
|
||||
"SATSY02.MQUA240": {
|
||||
"k1": 3.243975,
|
||||
"k1L": 0.48659624999999995
|
||||
"k1": 3.4668261566767877,
|
||||
"k1L": 0.5200239235015182
|
||||
},
|
||||
"SATSY02.MQUA260": {
|
||||
"k1": 2.887369,
|
||||
"k1L": 0.8662107
|
||||
"k1": -1.7907630451575853,
|
||||
"k1L": -0.5372289135472755
|
||||
},
|
||||
"SATSY02.MQUA300": {
|
||||
"k1": 1.715835,
|
||||
@@ -629,20 +629,20 @@
|
||||
"k1L": -0.1928784
|
||||
},
|
||||
"SATSY03.MQUA130": {
|
||||
"k1": 0.1714116893143215,
|
||||
"k1L": 0.05142350679429645
|
||||
"k1": 1.7543678201565072,
|
||||
"k1L": 0.5263103460469521
|
||||
},
|
||||
"SATSY03.MQUA220": {
|
||||
"k1": 0.0,
|
||||
"k1L": 0.0
|
||||
"k1": -1.9659739965977423,
|
||||
"k1L": -0.29489609948966133
|
||||
},
|
||||
"SATSY03.MQUA310": {
|
||||
"k1": 0.0,
|
||||
"k1L": 0.0
|
||||
"k1": 1.3741101816366432,
|
||||
"k1L": 0.20611652724549648
|
||||
},
|
||||
"SATSY03.MQUA430": {
|
||||
"k1": 0.0,
|
||||
"k1L": 0.0
|
||||
"k1": 0.5665375066682128,
|
||||
"k1L": 0.08498062600023192
|
||||
},
|
||||
"SATBC01.MQUA320": {
|
||||
"k1": 0.0,
|
||||
@@ -653,20 +653,20 @@
|
||||
"k1L": 0.0
|
||||
},
|
||||
"SATBC01.MQUA410": {
|
||||
"k1": 0.0,
|
||||
"k1L": 0.0
|
||||
"k1": -0.9054167986177581,
|
||||
"k1L": -0.1358125197926637
|
||||
},
|
||||
"SATBC01.MQUA430": {
|
||||
"k1": 0.0,
|
||||
"k1L": 0.0
|
||||
"k1": -0.7438305346597855,
|
||||
"k1L": -0.11157458019896783
|
||||
},
|
||||
"SATBC01.MQUA450": {
|
||||
"k1": 0.0,
|
||||
"k1L": 0.0
|
||||
"k1": 1.5388310832958934,
|
||||
"k1L": 0.461649324988768
|
||||
},
|
||||
"SATBC01.MQUA470": {
|
||||
"k1": 0.0,
|
||||
"k1L": 0.0
|
||||
"k1": -0.5035328847745485,
|
||||
"k1L": -0.07552993271618227
|
||||
},
|
||||
"SATCL01.MQUA120": {
|
||||
"k1": -1.118724117945165,
|
||||
@@ -681,12 +681,12 @@
|
||||
"k1L": 0.2609532226529367
|
||||
},
|
||||
"SATCL01.MQUA180": {
|
||||
"k1": 0.0,
|
||||
"k1L": 0.0
|
||||
"k1": 1.7404846119270094,
|
||||
"k1L": 0.2610726917890514
|
||||
},
|
||||
"SATCL01.MQUA190": {
|
||||
"k1": 0.0,
|
||||
"k1L": 0.0
|
||||
"k1": -1.126273749325358,
|
||||
"k1L": -0.16894106239880372
|
||||
},
|
||||
"SATDI01.MQUA025": {
|
||||
"k1": 0.0,
|
||||
@@ -757,92 +757,92 @@
|
||||
"k1L": 0.0
|
||||
},
|
||||
"SATMA01.MQUA610": {
|
||||
"k1": -1.2185071393832552,
|
||||
"k1L": -0.18277607090748826
|
||||
"k1": -1.218507,
|
||||
"k1L": -0.18277605
|
||||
},
|
||||
"SATMA01.MQUA630": {
|
||||
"k1": 1.3816870987354146,
|
||||
"k1L": 0.2072530648103122
|
||||
"k1": 1.381687,
|
||||
"k1L": 0.20725305000000002
|
||||
},
|
||||
"SATMA01.MQUA640": {
|
||||
"k1": 1.3544548891358774,
|
||||
"k1L": 0.20316823337038162
|
||||
"k1": 1.354455,
|
||||
"k1L": 0.20316825
|
||||
},
|
||||
"SATUN04.MQUA060": {
|
||||
"k1": -2.5934331389356884,
|
||||
"k1L": -0.20747465111485508
|
||||
"k1": -2.593433,
|
||||
"k1L": -0.20747464000000002
|
||||
},
|
||||
"SATUN05.MQUA420": {
|
||||
"k1": -0.930202,
|
||||
"k1L": -0.07441616
|
||||
},
|
||||
"SATUN06.MQUA080": {
|
||||
"k1": 4.080041726792059,
|
||||
"k1L": 0.32640333814336475
|
||||
"k1": 4.080042,
|
||||
"k1L": 0.32640336
|
||||
},
|
||||
"SATUN07.MQUA080": {
|
||||
"k1": -4.059422833505335,
|
||||
"k1L": -0.3247538266804268
|
||||
"k1": -4.059423,
|
||||
"k1L": -0.32475384
|
||||
},
|
||||
"SATUN08.MQUA080": {
|
||||
"k1": 4.080041726792059,
|
||||
"k1L": 0.32640333814336475
|
||||
"k1": 4.080042,
|
||||
"k1L": 0.32640336
|
||||
},
|
||||
"SATUN09.MQUA080": {
|
||||
"k1": -4.059422833505335,
|
||||
"k1L": -0.3247538266804268
|
||||
"k1": -4.059423,
|
||||
"k1L": -0.32475384
|
||||
},
|
||||
"SATUN10.MQUA080": {
|
||||
"k1": 4.080041726792059,
|
||||
"k1L": 0.32640333814336475
|
||||
"k1": 4.080042,
|
||||
"k1L": 0.32640336
|
||||
},
|
||||
"SATUN11.MQUA080": {
|
||||
"k1": -4.059422833505335,
|
||||
"k1L": -0.3247538266804268
|
||||
"k1": -4.059423,
|
||||
"k1L": -0.32475384
|
||||
},
|
||||
"SATUN12.MQUA080": {
|
||||
"k1": 4.080041726792059,
|
||||
"k1L": 0.32640333814336475
|
||||
"k1": 4.080042,
|
||||
"k1L": 0.32640336
|
||||
},
|
||||
"SATUN13.MQUA080": {
|
||||
"k1": -4.059422833505335,
|
||||
"k1L": -0.3247538266804268
|
||||
"k1": -4.059423,
|
||||
"k1L": -0.32475384
|
||||
},
|
||||
"SATUN14.MQUA080": {
|
||||
"k1": 4.080041726792059,
|
||||
"k1L": 0.32640333814336475
|
||||
"k1": 4.080042,
|
||||
"k1L": 0.32640336
|
||||
},
|
||||
"SATUN15.MQUA080": {
|
||||
"k1": -4.059422833505335,
|
||||
"k1L": -0.3247538266804268
|
||||
"k1": -4.059423,
|
||||
"k1L": -0.32475384
|
||||
},
|
||||
"SATUN16.MQUA420": {
|
||||
"k1": 4.080041726792059,
|
||||
"k1L": 0.32640333814336475
|
||||
"k1": 4.080042,
|
||||
"k1L": 0.32640336
|
||||
},
|
||||
"SATUN17.MQUA080": {
|
||||
"k1": -4.059422833505335,
|
||||
"k1L": -0.3247538266804268
|
||||
"k1": -4.059423,
|
||||
"k1L": -0.32475384
|
||||
},
|
||||
"SATUN18.MQUA080": {
|
||||
"k1": 4.080041726792059,
|
||||
"k1L": 0.32640333814336475
|
||||
"k1": 4.080042,
|
||||
"k1L": 0.32640336
|
||||
},
|
||||
"SATUN19.MQUA080": {
|
||||
"k1": -4.059422833505335,
|
||||
"k1L": -0.3247538266804268
|
||||
"k1": -4.059423,
|
||||
"k1L": -0.32475384
|
||||
},
|
||||
"SATUN20.MQUA080": {
|
||||
"k1": 4.080041726792059,
|
||||
"k1L": 0.32640333814336475
|
||||
"k1": 4.080042,
|
||||
"k1L": 0.32640336
|
||||
},
|
||||
"SATUN21.MQUA080": {
|
||||
"k1": -4.059422833505335,
|
||||
"k1L": -0.3247538266804268
|
||||
"k1": -4.059423,
|
||||
"k1L": -0.32475384
|
||||
},
|
||||
"SATUN22.MQUA080": {
|
||||
"k1": 4.080041726792059,
|
||||
"k1L": 0.32640333814336475
|
||||
"k1": 4.080042,
|
||||
"k1L": 0.32640336
|
||||
},
|
||||
"SATUN23.MQUA080": {
|
||||
"k1": 0.0,
|
||||
@@ -861,24 +861,24 @@
|
||||
"k1L": 0.0
|
||||
},
|
||||
"SATBD01.MQUA010": {
|
||||
"k1": 0.5069789237265826,
|
||||
"k1L": 0.15209367711797478
|
||||
"k1": 0.506979,
|
||||
"k1L": 0.15209369999999997
|
||||
},
|
||||
"SATBD01.MQUA030": {
|
||||
"k1": -0.6184665903305938,
|
||||
"k1L": -0.18553997709917813
|
||||
"k1": -0.618467,
|
||||
"k1L": -0.18554009999999999
|
||||
},
|
||||
"SATBD01.MQUA050": {
|
||||
"k1": 0.1324854421128419,
|
||||
"k1L": 0.03974563263385257
|
||||
"k1": 0.132485,
|
||||
"k1L": 0.039745499999999996
|
||||
},
|
||||
"SATBD01.MQUA070": {
|
||||
"k1": 0.474028017341573,
|
||||
"k1L": 0.1422084052024719
|
||||
"k1": 0.474028,
|
||||
"k1L": 0.14220839999999998
|
||||
},
|
||||
"SATBD01.MQUA090": {
|
||||
"k1": -0.7442648986155268,
|
||||
"k1L": -0.22327946958465802
|
||||
"k1": -0.744265,
|
||||
"k1L": -0.2232795
|
||||
},
|
||||
"S10BD01.MQUA010": {
|
||||
"k1": 0,
|
||||
@@ -889,8 +889,8 @@
|
||||
"k1L": -0.6299996827041936
|
||||
},
|
||||
"SATBD02.MQUA030": {
|
||||
"k1": -1.050806764409536,
|
||||
"k1L": -0.3152420293228608
|
||||
"k1": -1.050807,
|
||||
"k1L": -0.3152421
|
||||
},
|
||||
"SPOSY01.MQUA030": {
|
||||
"k1": 0,
|
||||
@@ -1019,32 +1019,32 @@
|
||||
"k2L": 62.330264907630585
|
||||
},
|
||||
"SATSY01.MSEX030": {
|
||||
"k2": 69.8584896019005,
|
||||
"k2L": 5.58867916815204
|
||||
"k2": 49.54525678617823,
|
||||
"k2L": 3.9636205428942586
|
||||
},
|
||||
"SATSY01.MSEX090": {
|
||||
"k2": -109.51205543384211,
|
||||
"k2L": -8.760964434707368
|
||||
"k2": -567.5496197971203,
|
||||
"k2L": -45.40396958376962
|
||||
},
|
||||
"SATSY03.MSEX110": {
|
||||
"k2": 5.710044360549549,
|
||||
"k2L": 0.45680354884396396
|
||||
"k2": 10.740682822533197,
|
||||
"k2L": 0.8592546258026558
|
||||
},
|
||||
"SATSY03.MSEX140": {
|
||||
"k2": 83.73761512845624,
|
||||
"k2L": 6.6990092102764995
|
||||
"k2": 36.226054254417726,
|
||||
"k2L": 2.898084340353418
|
||||
},
|
||||
"SATBC01.MSEX310": {
|
||||
"k2": 0.0,
|
||||
"k2L": 0.0
|
||||
},
|
||||
"SATCL01.MSEX110": {
|
||||
"k2": 0.0,
|
||||
"k2L": 0.0
|
||||
"k2": 275.50333784305354,
|
||||
"k2L": 22.040267027444283
|
||||
},
|
||||
"SATCL01.MSEX160": {
|
||||
"k2": 0.0,
|
||||
"k2L": 0.0
|
||||
"k2": 0.06686124876506554,
|
||||
"k2L": 0.005348899901205243
|
||||
},
|
||||
"SPOSY01.MSEX020": {
|
||||
"k2": 0,
|
||||
@@ -1994,23 +1994,23 @@
|
||||
},
|
||||
"S20SY02.MKDC010": {
|
||||
"cory": 0,
|
||||
"design_kick": 0.0
|
||||
"design_kick": 0.00022426070829185702
|
||||
},
|
||||
"S20SY02.MKAC020": {
|
||||
"cory": 0,
|
||||
"design_kick": 0.0
|
||||
"design_kick": 0.00033639106243778553
|
||||
},
|
||||
"S20SY02.MKDC030": {
|
||||
"cory": 0,
|
||||
"design_kick": 0.0
|
||||
"design_kick": 0.00022426070829185702
|
||||
},
|
||||
"S20SY02.MKAC040": {
|
||||
"cory": 0,
|
||||
"design_kick": 0.0
|
||||
"design_kick": 0.00033639106243778553
|
||||
},
|
||||
"S20SY02.MKDC050": {
|
||||
"cory": 0,
|
||||
"design_kick": 0.0
|
||||
"design_kick": 0.00022426070829185702
|
||||
},
|
||||
"S30CB15.MKDC030": {
|
||||
"cory": 0,
|
||||
|
||||
+431
@@ -0,0 +1,431 @@
|
||||
import math
|
||||
from onlinemodel.core.apptemplate import ApplicationTemplate
|
||||
|
||||
|
||||
# Elegant Interface
|
||||
|
||||
class Elegant(ApplicationTemplate):
|
||||
|
||||
def __init__(self, onlinemodel =None,parent=None):
|
||||
ApplicationTemplate.__init__(self)
|
||||
|
||||
self.model=onlinemodel
|
||||
self.parent=parent
|
||||
|
||||
# see what is needed
|
||||
|
||||
self.wpath = 'ReferenceFiles' # path for reference files
|
||||
self.fid = 0
|
||||
self.lsc = 0 # flag whether lsc is enabled
|
||||
self.csr = 0 # flag whether csr is enabled or not
|
||||
self.wakebins = 0 # automatic calculation of
|
||||
self.charge = 200e-12 # default charge in the lattice
|
||||
self.dump = [] # diagnostics location where to dump particle distribution
|
||||
|
||||
self.seq = []
|
||||
self.driftcount = 1 # drift counter
|
||||
|
||||
self.lscbins = 100 # number of bins for lsc calculation
|
||||
self.csrbins = 100 # number of bins for CSR calculation
|
||||
self.csrmaxlen = 10. # distance over which the CSR wake is considered after a dipole
|
||||
self.csrlen = 0 # running variable to count distance after last bend
|
||||
|
||||
self.center = [] # location where the beam is centered due to CSR kicks
|
||||
self.Distribution = 1
|
||||
|
||||
def export(self):
|
||||
if self.model is None:
|
||||
return
|
||||
start = str(self.parent.UITrackStart.text()).upper()
|
||||
end = str(self.parent.UITrackEnd.text()).upper()
|
||||
if len(start) > 7:
|
||||
start = start[0:7]
|
||||
if len(end) > 7:
|
||||
end = end[0:7]
|
||||
refloc, twiss0 = self.parent.reference.getReference()
|
||||
|
||||
if 'SWISSFEL' in refloc.upper():
|
||||
refloc = 'SINLH01$START'
|
||||
if refloc.upper() == 'START':
|
||||
refloc = start.upper()
|
||||
startEnergy = self.model.om.EnergyAt("SINLH01.DBAM010")[0] * 1e-6
|
||||
print('Start Energy is (MeV):', startEnergy)
|
||||
twiss0['energy'] = startEnergy * 1e-3 # convert to GeV for madx
|
||||
start, end = self.model.checkRange(start, end, refloc[0:7])
|
||||
if start is None:
|
||||
return
|
||||
self.model.om.setBranch(end.upper())
|
||||
print('Exporting from', start, 'to', end, '(Reference Location:', refloc, ')')
|
||||
# self.doTrack(start, end, refloc, twiss0)
|
||||
|
||||
# , project='SwissFEL', start='SINLH01', end='SARBD01', lsc=True, csr=True, Q=200e-12, dump=[],
|
||||
# align=[]):
|
||||
# start, end = self.checkRange(start, end)
|
||||
# self.setBranch(end)
|
||||
# lat = Lattice()
|
||||
# lat.charge = Q
|
||||
# lat.dump = dump
|
||||
# if lsc:
|
||||
# lat.lsc = 1
|
||||
# else:
|
||||
# lat.lsc = 0
|
||||
# if csr:
|
||||
# lat.csr = 1
|
||||
# else:
|
||||
# lat.csr = 0
|
||||
# lat.center = align
|
||||
filename = self.openLatticeStream('Elegant', 'SwissFEL')
|
||||
self.model.om.exportBranch(self)
|
||||
self.closeLatticeStream()
|
||||
return filename
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def openLatticeStream(self, path, name):
|
||||
filename = '%s/%s.lat' % (path, name)
|
||||
# self.path=path
|
||||
self.path = '.'
|
||||
self.savepath = path
|
||||
self.seq = []
|
||||
self.fid = open(filename, 'w')
|
||||
self.driftcount = 1
|
||||
self.write('Q: CHARGE, TOTAL=%e\n' % self.charge)
|
||||
self.write('ALTER: CENTER, DELTA=1,T=1\n') # put the beam on the right energy
|
||||
return filename
|
||||
|
||||
def closeLatticeStream(self):
|
||||
self.fid.close()
|
||||
|
||||
# routines to write lattice
|
||||
|
||||
def setCSR(self):
|
||||
self.csrlen = self.csrmaxlen
|
||||
|
||||
def isType(self, name):
|
||||
if (name.find('elegant') > -1):
|
||||
return 1
|
||||
else:
|
||||
return 0
|
||||
|
||||
def write(self, line):
|
||||
self.fid.write(line)
|
||||
|
||||
def writeLine(self, line, seq):
|
||||
|
||||
lc = 1
|
||||
name = line.Name
|
||||
|
||||
seqloop = seq
|
||||
if len(name) == 7:
|
||||
seqloop = self.seq
|
||||
|
||||
if len(name) < 1:
|
||||
name = 'SwissFEL'
|
||||
|
||||
self.write("\n%s.Start: MARKER\n" % (name))
|
||||
secend = name + '.End'
|
||||
if secend in self.dump:
|
||||
print('Adding dump in Elegant output for', name)
|
||||
self.write('%s.End: WATCH, FILENAME="Runs/%%s.%s.End.out", MODE=COORD\n' % (name, name))
|
||||
else:
|
||||
self.write("%s.End: MARKER\n" % (name))
|
||||
|
||||
if (name == "SwissFEL"):
|
||||
self.write("\n%s: Line=(Q, ALTER, %s.Start, " % (name, name))
|
||||
else:
|
||||
self.write("\n%s: Line=(%s.Start, " % (name, name))
|
||||
for ele in seqloop:
|
||||
# print ele
|
||||
if isinstance(ele, str):
|
||||
self.write("%s, " % (ele))
|
||||
else:
|
||||
self.write("%s, " % (ele['Name']))
|
||||
lc = lc + 1
|
||||
if (lc > 5):
|
||||
self.write("&\n\t")
|
||||
lc = 0
|
||||
self.write("%s.End)\n\n" % (name))
|
||||
|
||||
if len(name) == 7:
|
||||
del self.seq[:]
|
||||
|
||||
def writeDrift(self, l):
|
||||
if l <= 0:
|
||||
return 0
|
||||
name = "Drift%4.4d" % (self.driftcount)
|
||||
if self.csrlen > 0:
|
||||
self.write("%s.csr: CSRDRIFT, L=%f, DZ=0.1, USE_STUPAKOV=1, CSR=%d\n" % (name, l, self.csr))
|
||||
self.write("%s.lsc: LSCDRIFT, L=0, LEFFECTIVE=%f, BINS=%d, SMOOTHING=1, LSC=%d\n" % (name, l, self.lscbins,
|
||||
self.lsc))
|
||||
self.write("%s: LINE=(%s.csr,%s.lsc)\n" % (name, name, name))
|
||||
self.csrlen = self.csrlen - l
|
||||
else:
|
||||
self.write("%s: LSCDRIFT, L=%f, LEFFECTIVE=%f, BINS=%d, SMOOTHING=1, LSC=%d\n" % (name, l, l, self.lscbins,
|
||||
self.lsc))
|
||||
self.seq.append(name)
|
||||
self.driftcount = self.driftcount + 1
|
||||
return name
|
||||
|
||||
def writeMarker(self, ele):
|
||||
if 'ALIG' in ele.Name and 'dy' in ele.__dict__.keys():
|
||||
self.write('%s: MALIGN, DY=-%f \n' % (ele.Name, ele.dy))
|
||||
else:
|
||||
self.write('%s: MARK \n' % (ele.Name))
|
||||
self.seq.append(ele.Name)
|
||||
|
||||
def writeVacuum(self, ele):
|
||||
ds = ele.sRef + 0.5 * ele.getLength();
|
||||
if ds > 0:
|
||||
self.writeDrift(ds)
|
||||
self.writeMarker(ele)
|
||||
ds = ele.getResLength() - ele.sRef - 0.5 * ele.getLength();
|
||||
if ds > 0:
|
||||
self.writeDrift(ds)
|
||||
|
||||
def writeDiagnostic(self, ele):
|
||||
Seval = ele.Seval
|
||||
if (Seval < 0):
|
||||
Seval = 0.5 * ele.Length
|
||||
ds = ele.sRef + Seval;
|
||||
if ds > 0:
|
||||
self.writeDrift(ds)
|
||||
if ele.Name in self.center:
|
||||
print('Adding center in Elegant output for', ele.Name)
|
||||
self.write('%s_CENTER: CENTER\n' % ele.Name)
|
||||
self.seq.append('%s_CENTER' % ele.Name)
|
||||
|
||||
if ele.Name in self.dump:
|
||||
print('Adding dump in Elegant output for', ele.Name)
|
||||
self.write('%s: WATCH, FILENAME="Runs/%%s.%s.out", MODE=COORD\n' % (ele.Name, ele.Name))
|
||||
self.seq.append(ele.Name)
|
||||
else:
|
||||
self.writeMarker(ele)
|
||||
|
||||
ds = ele.getResLength() - ds
|
||||
if ds > 0:
|
||||
self.writeDrift(ds)
|
||||
|
||||
def writeCorrector(self, ele):
|
||||
|
||||
corx = 0
|
||||
cory = 0
|
||||
if 'corx' in ele.__dict__:
|
||||
corx = ele.corx
|
||||
if 'cory' in ele.__dict__:
|
||||
cory = ele.cory
|
||||
|
||||
if 'MADthin' in ele.__dict__:
|
||||
if 'MADshift' in ele.__dict__:
|
||||
ds = ele.Length * 0.5 + ele.MADshift
|
||||
self.writeDrift(ds)
|
||||
self.write("%s: KICKER, L=%f, HKICK=%e,VKICK=%e\n" % (ele.Name, 0, corx, cory))
|
||||
self.seq.append(ele.Name)
|
||||
return
|
||||
|
||||
if (ele.sRef > 0):
|
||||
self.writeDrift(ele.sRef)
|
||||
if self.lsc == 0 or ele.getLength() == 0:
|
||||
self.write("%s: KICKER, L=%f, HKICK=%e,VKICK=%e\n" % (ele.Name, ele.getLength(), corx, cory))
|
||||
self.seq.append(ele.Name)
|
||||
else:
|
||||
self.write("%s.cor: KICKER, L=%f, HKICK=%e,VKICK=%e\n" % (ele.Name, ele.getLength(), corx, cory))
|
||||
self.write(
|
||||
"%s.lsc: LSCDRIFT, L=0, LEFFECTIVE=%f, BINS=%d, SMOOTHING=1, LSC=%d\n" % (ele.Name, ele.getLength(),
|
||||
self.lscbins, self.lsc))
|
||||
self.write("%s: LINE=(%s.cor,%s.lsc)\n" % (ele.Name, ele.Name, ele.Name))
|
||||
self.seq.append(ele.Name)
|
||||
ds = ele.getResLength() - ele.getLength() - ele.sRef
|
||||
if ds > 0:
|
||||
self.writeDrift(ds)
|
||||
|
||||
def writeSextupole(self, ele):
|
||||
if (ele.sRef > 0):
|
||||
self.writeDrift(ele.sRef)
|
||||
if self.lsc == 0:
|
||||
self.write("%s: SEXTUPOLE, L=%f, K2=%e, Tilt=%f\n" % (ele.Name, ele.getLength(), ele.k2, ele.Tilt))
|
||||
self.seq.append(ele.Name)
|
||||
else:
|
||||
self.write("%s.sex: SEXTUPOLE, L=%f, K2=%e, Tilt=%f\n" % (ele.Name, ele.getLength(), ele.k2, ele.Tilt))
|
||||
self.write(
|
||||
"%s.lsc: LSCDRIFT, L=0, LEFFECTIVE=%f, BINS=%d, SMOOTHING=1, LSC=%d\n" % (ele.Name, ele.getLength(),
|
||||
self.lscbins, self.lsc))
|
||||
self.fid.write("%s: LINE=(%s.sex,%s.lsc)\n" % (ele.Name, ele.Name, ele.Name))
|
||||
self.seq.append(ele.Name)
|
||||
ds = ele.getResLength() - ele.getLength() - ele.sRef
|
||||
if ds > 0:
|
||||
self.writeDrift(ds)
|
||||
|
||||
def writeQuadrupole(self, ele):
|
||||
if (ele.sRef > 0):
|
||||
self.writeDrift(ele.sRef)
|
||||
if self.lsc != 0 or ('corx' in ele.__dict__) or 'cory' in ele.__dict__:
|
||||
locseq = []
|
||||
if self.lsc > 0:
|
||||
self.write(
|
||||
"%s.lsc: LSCDRIFT, L=0, LEFFECTIVE=%f, BINS=%d, SMOOTHING=1, LSC=%d\n" % (ele.Name, ele.getLength(),
|
||||
self.lscbins, self.lsc))
|
||||
locseq.append("%s.lsc" % (ele.Name))
|
||||
if ('corx' in ele.__dict__) or 'cory' in ele.__dict__:
|
||||
corx = 0
|
||||
cory = 0
|
||||
if 'corx' in ele.__dict__:
|
||||
corx = ele.corx
|
||||
if 'cory' in ele.__dict__:
|
||||
corx = ele.cory
|
||||
self.write(
|
||||
"%s.q1: QUADRUPOLE, L=%f, K1=%e, Tilt=%f\n" % (ele.Name, ele.getLength() * 0.5, ele.k1, ele.Tilt))
|
||||
self.write("%s.cor: KICKER, L=0, HKICK=%e,VKICK=%e\n" % (ele.Name, corx, cory))
|
||||
self.write(
|
||||
"%s.q2: QUADRUPOLE, L=%f, K1=%e, Tilt=%f\n" % (ele.Name, ele.getLength() * 0.5, ele.k1, ele.Tilt))
|
||||
locseq.append("%s.q1" % (ele.Name))
|
||||
locseq.append("%s.cor" % (ele.Name))
|
||||
locseq.append("%s.q2" % (ele.Name))
|
||||
else:
|
||||
self.write("%s.q: QUADRUPOLE, L=%f, K1=%e, Tilt=%f\n" % (ele.Name, ele.getLength(), ele.k1, ele.Tilt))
|
||||
locseq.append("%s.q" % (ele.Name))
|
||||
self.fid.write("%s: LINE=(%s" % (ele.Name, locseq[0]))
|
||||
for p in locseq[1:len(locseq)]:
|
||||
self.fid.write(",%s" % p)
|
||||
self.fid.write(")\n")
|
||||
self.seq.append(ele.Name)
|
||||
else:
|
||||
self.write("%s: QUADRUPOLE, L=%f, K1=%e, Tilt=%f\n" % (ele.Name, ele.getLength(), ele.k1, ele.Tilt))
|
||||
self.seq.append(ele.Name)
|
||||
ds = ele.getResLength() - ele.getLength() - ele.sRef
|
||||
if ds > 0:
|
||||
self.writeDrift(ds)
|
||||
|
||||
def writeBend(self, ele):
|
||||
if (ele.sRef > 0):
|
||||
self.writeDrift(ele.sRef)
|
||||
Lpath = ele.getLength()
|
||||
angrad = ele.angle * math.asin(1) / 90
|
||||
angradcor = angrad
|
||||
if 'cor' in ele.__dict__:
|
||||
angradcor = angrad + ele.cor
|
||||
if (self.lsc != 0):
|
||||
self.write(
|
||||
"%s.lsc: LSCDRIFT, L=0, LEFFECTIVE=%f, BINS=%d, SMOOTHING=1, LSC=%d\n" % (ele.Name, Lpath, self.lscbins,
|
||||
self.lsc))
|
||||
self.seq.append("%s.lsc" % ele.Name)
|
||||
self.write("%s.b: CSRCSBEND, L=%f, ANGLE=%f, &\n" % (ele.Name, Lpath, angradcor))
|
||||
self.write("\tE1=%f, E2=%f, TILT=%f, &\n" % (ele.e1 * angrad, ele.e2 * angrad, ele.Tilt))
|
||||
self.write("\tHGAP=0.015, FINT=0.5, NONLINEAR=1, N_KICKS=10,INTEGRATION_ORDER=4, &\n")
|
||||
self.write("\tBINS=%d,SG_HALFWIDTH=2, ISR=%d, SYNCH_RAD=%d, CSR=%d\n" % (self.csrbins, self.csr, self.csr,
|
||||
self.csr))
|
||||
self.write("%s: LINE=(%s.lsc,%s.b)\n" % (ele.Name, ele.Name, ele.Name))
|
||||
self.seq.append(ele.Name)
|
||||
else:
|
||||
self.write("%s: CSRCSBEND, L=%f, ANGLE=%f, &\n" % (ele.Name, Lpath, angradcor))
|
||||
self.write("\tE1=%f, E2=%f, TILT=%f, &\n" % (ele.e1 * angrad, ele.e2 * angrad, ele.Tilt))
|
||||
self.write("\tHGAP=0.015, FINT=0.5, NONLINEAR=1, N_KICKS=10,INTEGRATION_ORDER=4, &\n")
|
||||
self.write("\tBINS=%d,SG_HALFWIDTH=2, ISR=%d, SYNCH_RAD=%d, CSR=%d\n" % (self.csrbins, self.csr, self.csr,
|
||||
self.csr))
|
||||
self.seq.append(ele.Name)
|
||||
if abs(angrad) > 0:
|
||||
self.setCSR()
|
||||
ds = ele.getResLength() - ele.getLength() - ele.sRef
|
||||
if ds > 0:
|
||||
self.writeDrift(ds)
|
||||
|
||||
def writeUndulator(self, ele):
|
||||
pi = 2 * math.asin(1)
|
||||
Nu = round(ele.getLength() * ele.ku / pi)
|
||||
r = 3e8 / 511000 / 2 / pi / 100;
|
||||
Bu = ele.K * ele.ku * 0.01 / 2 / pi / r;
|
||||
LaserHeater = 0
|
||||
if 'UPHS' in ele.Name:
|
||||
ele.K = 0
|
||||
if 'UDLY' in ele.Name:
|
||||
ele.K = 0
|
||||
if 'Power' in ele.__dict__:
|
||||
if ele.Power > 0:
|
||||
LaserHeater = 0 ######## disable laser modulator, since energy spread is not correct anyhow
|
||||
if ele.sRef > 0:
|
||||
self.writeDrift(ele.sRef)
|
||||
if ele.K == 0:
|
||||
self.write("%s: LSCDRIFT, L=%f, LEFFECTIVE=%f, BINS=%d, SMOOTHING=1, LSC=%d\n" % (ele.Name, ele.getLength(),
|
||||
ele.getLength(),
|
||||
self.lscbins, self.lsc))
|
||||
self.seq.append(ele.Name)
|
||||
# add dechirper here
|
||||
# if 'UDCP' in ele.Name:
|
||||
# wake=Dechirper()
|
||||
# wake.getWake(ele.gap, ele.Name,self.savepath)
|
||||
# print('Write wakefile for %s with gap: %f mm' % (ele.Name,ele.gap*1e3))
|
||||
# self.write('%s_LW : WAKE, INPUTFILE = "%s/wake_%s.sdds", CHANGE_P0 = 1, &\n' % (ele.Name,self.path,ele.Name))
|
||||
# self.write('\t TCOLUMN="t",WCOLUMN="W", INTERPOLATE=1, FACTOR = %f, N_BINS=%d, SMOOTHING=1 \n'% (ele.getLength(),self.wakebins))
|
||||
# self.seq.append('%s_LW' % ele.Name)
|
||||
|
||||
# if 'DECHIRPER-V' in ele.Baugruppe:
|
||||
# self.write('%s_DW : TRWAKE, INPUTFILE = "%s/wake_%s.sdds", &\n' % (ele.Name,self.path,ele.Name))
|
||||
# self.write('\t TCOLUMN="t",WXCOLUMN="WD", WYCOLUMN="WD", XFACTOR = 0, YFACTOR = %f, &\n' % (ele.getLength()))
|
||||
# self.write('\t INTERPOLATE=1, N_BINS=%d, SMOOTHING=1 \n'% self.wakebins)
|
||||
# self.write('%s_QW : TRWAKE, INPUTFILE = "%s/wake_%s.sdds", &\n' % (ele.Name,self.path,ele.Name))
|
||||
# self.write('\t TCOLUMN="t",WXCOLUMN="WQP", WYCOLUMN="WQ", XFACTOR = %f, YFACTOR = %f, &\n' % (ele.getLength(),ele.getLength()))
|
||||
# self.write('\t INTERPOLATE=1, N_BINS=%d, SMOOTHING=1, & \n'% self.wakebins)
|
||||
# self.write('\t X_DRIVE_EXPONENT=0, Y_DRIVE_EXPONENT = 0, X_PROBE_EXPONENT = 1, Y_PROBE_EXPONENT = 1\n')
|
||||
# self.seq.append('%s_DW' % ele.Name)
|
||||
# self.seq.append('%s_QW' % ele.Name)
|
||||
# elif 'DECHIRPER-H' in ele.Baugruppe:
|
||||
# self.write('%s_DW : TRWAKE, INPUTFILE = "%s/wake_%s.sdds", &\n' % (ele.Name,self.path,ele.Name))
|
||||
# self.write('\t TCOLUMN="t",WXCOLUMN="WD", WYCOLUMN="WD", XFACTOR = %f, YFACTOR = 0, &\n' % (ele.getLength()))
|
||||
# self.write('\t INTERPOLATE=1, N_BINS=%d, SMOOTHING=1 \n'% self.wakebins)
|
||||
# self.write('%s_QW : TRWAKE, INPUTFILE = "%s/wake_%s.sdds", &\n' % (ele.Name,self.path,ele.Name))
|
||||
# self.write('\t TCOLUMN="t",WXCOLUMN="WQ", WYCOLUMN="WQP", XFACTOR = %f, YFACTOR = %f, &\n' % (ele.getLength(),ele.getLength()))
|
||||
# self.write('\t INTERPOLATE=1, N_BINS=%d, SMOOTHING=1, & \n'% self.wakebins)
|
||||
# self.write('\t X_DRIVE_EXPONENT=0, Y_DRIVE_EXPONENT = 0, X_PROBE_EXPONENT = 1, Y_PROBE_EXPONENT = 1\n')
|
||||
# self.seq.append('%s_DW' % ele.Name)
|
||||
# self.seq.append('%s_QW' % ele.Name)
|
||||
|
||||
ds = ele.getResLength() - ele.getLength() - ele.sRef
|
||||
if ds > 0:
|
||||
self.writeDrift(ds)
|
||||
return
|
||||
name = ele.Name
|
||||
if self.lsc != 0:
|
||||
self.write(
|
||||
"%s.lsc: LSCDRIFT, L=0, LEFFECTIVE=%f, BINS=%d, SMOOTHING=1, LSC=%d\n" % (ele.Name, ele.getLength(),
|
||||
self.lscbins, self.lsc))
|
||||
self.seq.append("%s.lsc" % ele.Name)
|
||||
name = "%s.wig" % ele.Name
|
||||
if LaserHeater == 0:
|
||||
self.write("%s : WIGGLER, L=%f, K=%f, POLES=%d, TILT=%f\n" % (name, ele.getLength(), ele.K, Nu, ele.Tilt))
|
||||
else:
|
||||
self.write("%s : LSRMDLTR, L=%f, PERIODS=%d, BU=%f, &\n" % (name, ele.getLength(), Nu / 2, Bu));
|
||||
self.write("\t LASER_W0=%e, LASER_PEAK_POWER=%e, &\n" % (ele.Waist, ele.Power));
|
||||
self.write("\t N_STEPS=%d, ACCURACY=0.001, POLE_FACTOR1=1, POLE_FACTOR2=1,POLE_FACTOR3=1\n" % (Nu * 60));
|
||||
self.seq.append(name)
|
||||
ds = ele.getResLength() - ele.getLength() - ele.sRef
|
||||
if ds > 0:
|
||||
self.writeDrift(ds)
|
||||
|
||||
def writeRF(self, ele):
|
||||
|
||||
if ele.sRef > 0:
|
||||
self.writeDrift(ele.sRef)
|
||||
if ele.Tag == "RACC":
|
||||
self.write('%s : RFCW, FREQ=%f, CELL_LENGTH=1.0, &\n' % (ele.Name, ele.Frequency))
|
||||
self.write(
|
||||
'\t L=%f, VOLT=%e, PHASE= %f, &\n' % (ele.getLength(), ele.Gradient * ele.getLength(), ele.Phase))
|
||||
self.write('\t CHANGE_P0=1, END1_FOCUS=1, END2_FOCUS=1, &\n');
|
||||
self.write('\t BODY_FOCUS_MODEL="NONE",INTERPOLATE=1, N_BINS=%d, SMOOTHING=1, &\n' % (self.wakebins));
|
||||
self.write('\t ZWAKEFILE="%s/wake_l_%s-band.sdds", &\n' % (self.wpath, ele.Band));
|
||||
self.write('\t TRWAKEFILE="%s/wake_t_%s-band.sdds", &\n' % (self.wpath, ele.Band));
|
||||
self.write('\t LSC=%d, LSC_BINS=%d, N_KICKS=10, &\n' % (self.lsc, self.lscbins));
|
||||
self.write('\t TCOLUMN="t",WXCOLUMN="W", WYCOLUMN="W", WZCOLUMN="W"\n');
|
||||
else:
|
||||
if ele.Band == 'S':
|
||||
SWave = 1
|
||||
else:
|
||||
SWave = 0
|
||||
self.write('%s : RFDF, FREQUENCY=%f, STANDING_WAVE=%d, TILT=%f, &\n' % (ele.Name, ele.Frequency, SWave,
|
||||
ele.Tilt))
|
||||
grad = ele.Gradient * ele.getLength()
|
||||
self.write('\t L=%f, VOLTAGE=%e, PHASE= %f\n' % (ele.getLength(), grad, ele.Phase))
|
||||
self.seq.append(ele.Name)
|
||||
ds = ele.getResLength() - ele.getLength() - ele.sRef
|
||||
if ds > 0:
|
||||
self.writeDrift(ds)
|
||||
@@ -84,6 +84,7 @@ class MatchMaker:
|
||||
|
||||
def match(self, om, variables = None, initCond=None, Injector=True, Athos = True, Aramis = False, Porthos = False, full =False):
|
||||
|
||||
|
||||
self.matchresult.clear()
|
||||
cwd = os.getcwd()
|
||||
os.chdir(self.scriptdir)
|
||||
@@ -97,6 +98,10 @@ class MatchMaker:
|
||||
f = io.StringIO()
|
||||
madx = CMadX(f)
|
||||
madx.E0 = 2000
|
||||
if initCond['energy']> 0:
|
||||
madx.E0 = initCond['energy']
|
||||
om.forceEnergyAt('SINLH02.MBND100', madx.E0 * 1e6)
|
||||
print('Updating initial Energy to:',madx.E0)
|
||||
om.setBranch(target, 'SINLH01')
|
||||
madx.updateLattice(om, target) # write lattice
|
||||
madx.commonHeader('SwissFEL', '#s/#e', None) # sets header
|
||||
|
||||
@@ -148,7 +148,11 @@ class Model:
|
||||
def loadSettingsGroup(self,group,fields,normalized=False):
|
||||
for key in group.keys():
|
||||
ele = self.om.getElement(key)
|
||||
if ele is None: # entry in settings file, which doe snot exist in lattice
|
||||
continue
|
||||
for field in fields:
|
||||
if 'design' in field:
|
||||
print(ele.Name,group[key][field])
|
||||
ele.__dict__[field]=group[key][field]
|
||||
if normalized:
|
||||
ele.__dict__[field]/=ele.Length
|
||||
@@ -164,7 +168,7 @@ class Model:
|
||||
self.loadSettingsGroup(settings['RF'], ['Gradient'],normalized=True)
|
||||
self.loadSettingsGroup(settings['RF'], ['Phase'])
|
||||
self.loadSettingsGroup(settings['Undulator'], ['K','kx','ky'])
|
||||
self.loadSettingsGroup(settings['Kicker'], ['cory','design_kick'])
|
||||
self.loadSettingsGroup(settings['Kicker'], ['design_kick'])
|
||||
self.startEnergy = settings['Energy']['energy']
|
||||
self.energyReference = settings['Energy']['location']
|
||||
self.startTwiss = settings['InitialCondition']
|
||||
@@ -213,11 +217,12 @@ class Model:
|
||||
refloc = start.upper()
|
||||
if self.startEnergy is None:
|
||||
self.startEnergy = self.om.EnergyAt(self.energyReference)[0]*1e-6
|
||||
|
||||
twiss0['energy'] = self.startEnergy*1e-3 # convert to GeV for madx
|
||||
start, end = self.checkRange(start, end, refloc[0:7])
|
||||
if start is None:
|
||||
return
|
||||
print('Tracking from',start,'to',end)
|
||||
print('Tracking from',start,'to',end, '(Reference Location:',refloc,')')
|
||||
self.doTrack(start,end,refloc,twiss0)
|
||||
|
||||
|
||||
@@ -225,11 +230,12 @@ class Model:
|
||||
#print(twiss_in)
|
||||
twiss0 = {converttwiss[key]:twiss_in[key] for key in twiss_in.keys()} # follows the madx format
|
||||
self.setBranch(end.upper())
|
||||
print("Tracking:",refloc[0:7],start)
|
||||
if not refloc[0:7] == start:
|
||||
print("Back tracking from", refloc, start)
|
||||
twiss0 = self.doBackTrack(refloc,start,twiss0) # track backwards to get new initial twiss values
|
||||
twiss = self.madx.track('swissfel',start+'$START',end+'$END',twiss0)
|
||||
energy = self.calcEnergyProfile(twiss)
|
||||
exit
|
||||
if plot:
|
||||
self.parent.plot.newData(twiss,energy)
|
||||
|
||||
@@ -285,6 +291,7 @@ class Model:
|
||||
destination = 'ATHOS'
|
||||
elif 'S10BD' in end or 'SIN' in end:
|
||||
destination = 'INJECTOR'
|
||||
print('Setting Branch in online model:', destination)
|
||||
self.om.setBranch(destination,'SINLH01')
|
||||
self.order=self.om.getBranchElements()
|
||||
self.madx.updateLattice(self.om,destination,self.forceLat)
|
||||
|
||||
@@ -433,6 +433,15 @@ class Ui_OpticsGUI(object):
|
||||
self.label_17.setObjectName("label_17")
|
||||
self.gridLayout_6.addWidget(self.label_17, 2, 0, 1, 1)
|
||||
self.verticalLayout_3.addLayout(self.gridLayout_6)
|
||||
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
|
||||
self.UIDoInitialEnergy = QtWidgets.QCheckBox(self.widget)
|
||||
self.UIDoInitialEnergy.setObjectName("UIDoInitialEnergy")
|
||||
self.horizontalLayout_3.addWidget(self.UIDoInitialEnergy)
|
||||
self.UIInitialEnergy = QtWidgets.QLineEdit(self.widget)
|
||||
self.UIInitialEnergy.setObjectName("UIInitialEnergy")
|
||||
self.horizontalLayout_3.addWidget(self.UIInitialEnergy)
|
||||
self.verticalLayout_3.addLayout(self.horizontalLayout_3)
|
||||
self.label_19 = QtWidgets.QLabel(self.widget)
|
||||
font = QtGui.QFont()
|
||||
font.setBold(True)
|
||||
@@ -717,9 +726,13 @@ class Ui_OpticsGUI(object):
|
||||
self.actionOpenMatchEditor.setObjectName("actionOpenMatchEditor")
|
||||
self.actionOpenScriptEditor = QtWidgets.QAction(OpticsGUI)
|
||||
self.actionOpenScriptEditor.setObjectName("actionOpenScriptEditor")
|
||||
self.actionExport_Elegant = QtWidgets.QAction(OpticsGUI)
|
||||
self.actionExport_Elegant.setObjectName("actionExport_Elegant")
|
||||
self.menuFile.addAction(self.actionOpen_2)
|
||||
self.menuFile.addAction(self.actionSave)
|
||||
self.menuFile.addSeparator()
|
||||
self.menuFile.addAction(self.actionExport_Elegant)
|
||||
self.menuFile.addSeparator()
|
||||
self.menuFile.addAction(self.actionQuit)
|
||||
self.menuFile.addSeparator()
|
||||
self.menuHelp.addAction(self.actionAbout)
|
||||
@@ -783,6 +796,8 @@ class Ui_OpticsGUI(object):
|
||||
self.UIInitBetay.setText(_translate("OpticsGUI", "20"))
|
||||
self.UIInitAlphay.setText(_translate("OpticsGUI", "0"))
|
||||
self.label_17.setText(_translate("OpticsGUI", "alpha"))
|
||||
self.UIDoInitialEnergy.setText(_translate("OpticsGUI", "Initialize Energy (MeV)"))
|
||||
self.UIInitialEnergy.setText(_translate("OpticsGUI", "157"))
|
||||
self.label_19.setText(_translate("OpticsGUI", "Matching Variables"))
|
||||
self.UIModifyKnobs.setText(_translate("OpticsGUI", "Overwrite default values for matching variables "))
|
||||
item = self.UIMatchKnobs.horizontalHeaderItem(0)
|
||||
@@ -869,3 +884,4 @@ class Ui_OpticsGUI(object):
|
||||
self.actionOpenMatch.setText(_translate("OpticsGUI", "Open New Matching File..."))
|
||||
self.actionOpenMatchEditor.setText(_translate("OpticsGUI", "Open Matching File in Editor..."))
|
||||
self.actionOpenScriptEditor.setText(_translate("OpticsGUI", "Open Script in Editor..."))
|
||||
self.actionExport_Elegant.setText(_translate("OpticsGUI", "Export Elegant Lattice..."))
|
||||
@@ -709,6 +709,24 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="UIDoInitialEnergy">
|
||||
<property name="text">
|
||||
<string>Initialize Energy (MeV)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="UIInitialEnergy">
|
||||
<property name="text">
|
||||
<string>157</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_19">
|
||||
<property name="font">
|
||||
@@ -1006,6 +1024,8 @@
|
||||
<addaction name="actionOpen_2"/>
|
||||
<addaction name="actionSave"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionExport_Elegant"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionQuit"/>
|
||||
<addaction name="separator"/>
|
||||
</widget>
|
||||
@@ -1362,6 +1382,11 @@
|
||||
<string>Open Script in Editor...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionExport_Elegant">
|
||||
<property name="text">
|
||||
<string>Export Elegant Lattice...</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
|
||||
Reference in new issue
Block a user