/ATF2/FlightSim/coreApps/FlLoadExternal.m
MATLAB | 788 lines | 660 code | 69 blank | 59 comment | 86 complexity | 7e6e3032926abffb9cde97a9d6267397 MD5 | raw file
Possible License(s): BSD-2-Clause, LGPL-2.0, IPL-1.0, BSD-3-Clause
- function [stat,retVals]=FlLoadExternal(request,comstack_get,retValsIn)
- % [stat,retVals]=FlLoadExternal(request,comstack_get,retValsIn);
- % ------------------------------------------------------------------------------
- % Generate magnet currents from either a SET file or a MAD Twiss tape-file;
- % file names are defined in:
- %
- % ExternalDataFiles.m (must be somewhere in Matlab's path)
- %
- % Input Arguments
- %
- % request : "loadSET" or "loadMAD"
- % comstack_get : list of EPICS PV names generated by FlUpdate:getPut
- % retValsIn : list of EPICS PV values returned by lcaGet in FlUpdate
- %
- % Output Arguments
- %
- % stat : return status ... 1 means success
- % retVals : list of EPICS PV values from SET file or computed from
- % MAD Twiss tape-file
- % ------------------------------------------------------------------------------
-
- % check arguments; check for existence of ExternalDataFiles.m; check for proper
- % definition of file name
-
- retVals=[];
- stat=0;
- if (nargin<3)
- warning('FlLoadExternal requires 3 input arguments')
- return
- elseif (nargout<2)
- warning('FlLoadExternal requires 2 output arguments')
- return
- end
- if (~isequal(request,'loadSET')&&~isequal(request,'loadMAD'))
- warning('Invalid request to FlLoadExternal')
- return
- end
- retVals=retValsIn;
-
- % check for the existence of ExternalDataFiles.m; run it; check defined files
-
- dataFile='ExternalDataFiles';
- if (~isequal(exist(dataFile,'file'),2))
- warning(sprintf('%s not found by FlLoadExternal',dataFile))
- return
- end
- eval(dataFile)
- if (isequal(request,'loadSET'))
- if (~exist('SETfile','var')||isempty(SETfile))
- warning(sprintf('SETfile not defined in %s',dataFile))
- return
- elseif (~isequal(exist(SETfile,'file'),2))
- warning(sprintf('%s not found by FlLoadExternal',SETfile))
- return
- end
- else
- if (~exist('MADfile','var')||isempty(MADfile))
- warning(sprintf('MADfile not defined in %s',dataFile))
- return
- elseif (~isequal(exist(MADfile,'file'),2))
- warning(sprintf('%s not found by FlLoadExternal',MADfile))
- return
- end
- end
-
- % initialize local psList
-
- psList=FlLoadInit(comstack_get);
-
- % get currents
-
- curflag=[1,1,1,1,0]; % [SBEN,QUAD,SEXT,MULT,XYCOR] ... change to arg? global?
- if (isequal(request,'loadSET'))
- psList=FlLoadSETfile(psList,SETfile,curflag);
- else
- psList=FlLoadDesign(psList,MADfile,curflag);
- end
-
- % stuff currents into retVals
-
- verbose=0;
- for n=1:length(psList)
- id=psList(n).id;
- retVals(id)=psList(n).cur;
- if (verbose)
- disp(sprintf('%4d) %9.3f (%9.3f) %s',id,retVals(id), ...
- retValsIn(id),char(comstack_get{id})))
- end
- end
-
- stat=1;
-
- end
- function psList=FlLoadInit(comstack_get)
-
- haDbUDF=1; % set if atf-ioc DB doesn't initialize
-
- % locate PS entries in comstack_get
-
- id=strmatch('c1:qmov',comstack_get);id1=id(end)+1;
- id=strmatch('ATF:BPMS',comstack_get);id2=id(1)-1;
- idps=[id1:id2]';
- Nps=length(idps);
-
- % construct a list for PS entries of interest
-
- psList=[];
- for nps=1:length(idps)
- ncg=idps(nps);
- pvname=char(comstack_get{ncg});
- psList(nps).id=ncg; % pointer into comstack_get
- psList(nps).pvname=pvname; % local copy of comstack_get PV name
- %disp(sprintf('comstack_get{%d}=%s',ncg,pvname))
- ic=strfind(pvname,':');
- if (strmatch('ATF:',pvname))
- name=pvname(ic(2)+1:ic(3)-1);
- if (strcmp(name,'BH1X')||strcmp(name,'BH2X')||strcmp(name,'BH3X'))
- keyw=pvname(ic(1)+1:ic(2)-1);
- if (strcmp(keyw,'SBEN-TRIM'))
- name(1:2)='ZX';
- end
- end
- elseif (strmatch('PS',pvname))
- if (haDbUDF)
- pv=strcat(pvname(1:ic(1)),'name.PROC');
- lcaPut(pv,1); % change undefined to defined
- end
- pv=strcat(pvname(1:ic(1)),'name');
- name=char(lcaGet(pv));
- else
- name=pvname(1:ic(1)-1);
- end
- psList(nps).name=name;
- psList(nps).cur=0;
- end
-
- end
- function psList=FlLoadSETfile(psListIn,setfile,curflag)
- psList=psListIn;
-
- % ------------------------------------------------------------------------------
- % DR
- % ------------------------------------------------------------------------------
-
- % device names
-
- bname=[ ...
- 'BH1R '];
- qname=[ ...
- 'QF1R ';'QF2R '; ...
- 'QM1R ';'QM2R ';'QM3R ';'QM4R ';'QM5R ';'QM6R '; ...
- 'QM7R ';'QM8R ';'QM9R ';'QM10R ';'QM11R ';'QM12R '; ...
- 'QM13R ';'QM14R ';'QM15R ';'QM16R ';'QM17R ';'QM18R '; ...
- 'QM19R ';'QM20R ';'QM21R ';'QM22R ';'QM23R ';'QM7AR '];
- sname=[ ...
- 'SF1R ';'SD1R '];
- cname=[ ...
- 'ZH1R ';'ZH2R ';'ZH3R ';'ZH4R ';'ZH5R ';'ZH6R '; ...
- 'ZH7R ';'ZH8R ';'ZH9R ';'ZH10R ';'ZH11R ';'ZH12R '; ...
- 'ZH13R ';'ZH14R '; 'ZH16R ';'ZH17R ';'ZH18R '; ...
- 'ZH19R ';'ZH20R ';'ZH21R ';'ZH22R ';'ZH23R ';'ZH24R '; ...
- 'ZH25R ';'ZH26R ';'ZH27R ';'ZH28R ';'ZH29R ';'ZH30R '; ...
- 'ZH31R ';'ZH32R ';'ZH33R ';'ZH34R ';'ZH35R ';'ZH36R '; ...
- 'ZH37R ';'ZH38R ';'ZH39R ';'ZH40R ';'ZH41R ';'ZH42R '; ...
- 'ZH43R ';'ZH44R ';'ZH45R ';'ZH46R ';'ZH47R ';'ZH48R '; ...
- 'ZV1R ';'ZV2R ';'ZV3R ';'ZV4R ';'ZV5R ';'ZV6R '; ...
- 'ZV7R ';'ZV8R ';'ZV9R ';'ZV10R ';'ZV11R ';'ZV12R '; ...
- 'ZV13R ';'ZV14R ';'ZV15R '; 'ZV17R ';'ZV18R '; ...
- 'ZV19R ';'ZV20R ';'ZV21R ';'ZV22R ';'ZV23R ';'ZV24R '; ...
- 'ZV25R ';'ZV26R ';'ZV27R ';'ZV28R ';'ZV29R ';'ZV30R '; ...
- 'ZV31R ';'ZV32R ';'ZV33R ';'ZV34R ';'ZV35R ';'ZV36R '; ...
- 'ZV37R ';'ZV38R ';'ZV39R ';'ZV40R ';'ZV41R ';'ZV42R '; ...
- 'ZV43R ';'ZV44R ';'ZV45R ';'ZV46R ';'ZV47R ';'ZV48R '; ...
- 'ZV49R ';'ZV50R ';'ZV51R '; ...
- 'ZH100R ';'ZH101R ';'ZH102R ';'ZV100R '];
-
- % construct trim names (quadrupole trims)
-
- [nr,nc]=size(qname);
- Nt=[28,26,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0];
- tname=[];
- for n=1:nr
- for m=1:Nt(n)
- name=sprintf('%s.%d',deblank(qname(n,:)),m);
- name=[name,blanks(nc-length(name))];
- tname=[tname;name];
- end
- end
-
- % construct trim names (skew quadrupole trims on sextupoles)
-
- [nr,nc]=size(sname);
- Nt=[34,34];
- mname=[];
- for n=1:nr
- for m=1:Nt(n)
- name=sprintf('%s.%d',deblank(sname(n,:)),m);
- name=[name,blanks(nc-length(name))];
- mname=[mname;name];
- end
- end
-
- % set up SET file data arrays
-
- names=[bname;qname;tname;sname;mname;cname];
-
- [Nb,dummy]=size(bname);
- [Nq,dummy]=size(qname);
- [Nt,dummy]=size(tname);
- [Ns,dummy]=size(sname);
- [Nm,dummy]=size(mname);
- [Nc,dummy]=size(cname);
-
- Ibend=zeros(Nb,1);
- Iquad=zeros(Nq,1);
- Itrim=zeros(Nt,1);
- Isext=zeros(Ns,1);
- Imult=zeros(Nm,1);
- Icorr=zeros(Nc,1);
- I=zeros(Nb+Nq+Nt+Ns+Nm+Nc,1);
-
- % read the SET file
-
- fid=fopen(setfile,'rt');
- while (1)
- s=fgetl(fid);
- if (~isstr(s)),break,end
- [t,r]=strtok(s);
- n=strmatch(t,names,'exact');
- if (~isempty(n))
- I(n)=str2num(strtok(r));
- end
- end
- fclose(fid);
-
- % assign currents
-
- Ibend=I(1:Nb);
- Iquad=I(Nb+1:Nb+Nq);
- Itrim=I(Nb+Nq+1:Nb+Nq+Nt);
- Isext=I(Nb+Nq+Nt+1:Nb+Nq+Nt+Ns);
- Imult=I(Nb+Nq+Nt+Ns+1:Nb+Nq+Nt+Ns+Nm);
- Icorr=I(Nb+Nq+Nt+Ns+Nm+1:Nb+Nq+Nt+Ns+Nm+Nc);
-
- % load currents into psList structure
-
- psName=char(psList.name);
- for n=1:Nb
- name=deblank(bname(n,:));
- id=strmatch(name,psName,'exact');
- for m=1:length(id)
- psList(id(m)).class=1; % SBEN
- if (curflag(1))
- psList(id(m)).cur=Ibend(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- for n=1:Nq
- name=deblank(qname(n,:));
- id=strmatch(name,psName,'exact');
- for m=1:length(id)
- psList(id(m)).class=2; % QUAD
- if (curflag(2))
- psList(id(m)).cur=Iquad(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- for n=1:Nt
- name=deblank(strrep(tname(n,:),'.','_'));
- id=strmatch(name,psName,'exact');
- for m=1:length(id)
- psList(id(m)).class=3; % trim
- if (curflag(2)) % QUAD trim
- psList(id(m)).cur=Itrim(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- for n=1:Ns
- name=deblank(sname(n,:));
- id=strmatch(name,psName,'exact');
- for m=1:length(id)
- psList(id(m)).class=4; % SEXT
- if (curflag(3))
- psList(id(m)).cur=Isext(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- for n=1:Nm
- name=deblank(strrep(mname(n,:),'.','_'));
- id=strmatch(name,psName,'exact');
- for m=1:length(id)
- psList(id(m)).class=5; % MULT
- if (curflag(4))
- psList(id(m)).cur=Imult(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- for n=1:Nc
- name=deblank(cname(n,:));
- id=strmatch(name,psName,'exact');
- for m=1:length(id)
- psList(id(m)).class=6; % XCOR or YCOR
- if (curflag(5))
- psList(id(m)).cur=Icorr(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
-
- % ------------------------------------------------------------------------------
- % ATF2
- % ------------------------------------------------------------------------------
-
- % device names
-
- bname=[ ...
- 'BS1X ';'BS2X ';'BS3X '; ...
- 'BH1X ';'BH2X ';'BH3X ';'B5FF ';'B2FF ';'B1FF ';'BDUMP '];
- qname=[ ...
- 'QS1X ';'QF1X ';'QD2X ';'QF3X ';'QF4X ';'QD5X '; ...
- 'QF6X ';'QS2X ';'QF7X ';'QD8X ';'QF9X ';'QK1X '; ...
- 'QD10X ';'QF11X ';'QK2X ';'QD12X ';'QF13X ';'QD14X '; ...
- 'QF15X ';'QK3X ';'QD16X ';'QF17X ';'QK4X ';'QD18X '; ...
- 'QF19X ';'QD20X ';'QF21X ';'QM16FF ';'QM15FF ';'QM14FF '; ...
- 'QM13FF ';'QM12FF ';'QM11FF ';'QD10BFF';'QD10AFF';'QF9BFF '; ...
- 'QF9AFF ';'QD8FF ';'QF7FF ';'QD6FF ';'QF5BFF ';'QF5AFF '; ...
- 'QD4BFF ';'QD4AFF ';'QF3FF ';'QD2BFF ';'QD2AFF ';'QF1FF '; ...
- 'QD0FF '];
- sname=[ ...
- 'SF6FF ';'SF5FF ';'SD4FF ';'SF1FF ';'SD0FF '];
- cname=[ ...
- 'ZX1X ';'ZX2X ';'ZX3X '; ...
- 'ZH1X ';'ZH2X ';'ZH3X ';'ZH4X ';'ZH5X ';'ZH6X ';'ZH7X '; ...
- 'ZH8X ';'ZH9X ';'ZH10X ';'ZH1FF '; ...
- 'ZV1X ';'ZV2X ';'ZV3X ';'ZV4X ';'ZV5X ';'ZV6X ';'ZV7X '; ...
- 'ZV8X ';'ZV9X ';'ZV10X ';'ZV11X ';'ZV1FF '];
- names=[bname;qname;sname;cname];
-
- [Nb,dummy]=size(bname);
- [Nq,dummy]=size(qname);
- [Ns,dummy]=size(sname);
- [Nc,dummy]=size(cname);
-
- Ibend=zeros(Nb,1);
- Iquad=zeros(Nq,1);
- Isext=zeros(Ns,1);
- Icorr=zeros(Nc,1);
- I=zeros(Nb+Nq+Ns+Nc,1);
-
- % READ the setdata file
-
- fid=fopen(setfile,'rt');
- while (1)
- s=fgetl(fid);
- if (~isstr(s)),break,end
- [t,r]=strtok(s);
- if (strcmp(t,'FFMAG'))
- [t,r]=strtok(r);
- end
- n=strmatch(t,names,'exact');
- if (~isempty(n))
- I(n)=str2num(strtok(r));
- end
- end
- fclose(fid);
-
- % assign currents
-
- Ibend=I(1:Nb);
- Iquad=I(Nb+1:Nb+Nq);
- Isext=I(Nb+Nq+1:Nb+Nq+Ns);
- Icorr=I(Nb+Nq+Ns+1:Nb+Nq+Ns+Nc);
-
- % distribute currents to family members
-
- id1=strmatch('BS1X ',bname);
- id2=strmatch('BS2X ',bname);
- Ibend(id2)=Ibend(id1);
-
- id1=strmatch('BH1X ',bname);
- id2=strmatch('BH2X ',bname);
- Ibend(id2)=Ibend(id1);
-
- id1=strmatch('QF15X ',qname);
- id2=strmatch('QF13X ',qname);
- Iquad(id2)=Iquad(id1);
-
- % load currents into psList structure
-
- psName=char(psList.name);
- for n=1:Nb
- name=deblank(bname(n,:));
- id=strmatch(name,psName,'exact');
- for m=1:length(id)
- psList(id(m)).class=1; % SBEN
- if (curflag(1))
- psList(id(m)).cur=Ibend(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- for n=1:Nq
- name=deblank(qname(n,:));
- id=strmatch(name,psName,'exact');
- for m=1:length(id)
- psList(id(m)).class=2; % QUAD
- if (curflag(2))
- psList(id(m)).cur=Iquad(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- for n=1:Ns
- name=deblank(sname(n,:));
- id=strmatch(name,psName,'exact');
- for m=1:length(id)
- psList(id(m)).class=4; % SEXT
- if (curflag(3))
- psList(id(m)).cur=Isext(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- for n=1:Nc
- name=deblank(cname(n,:));
- id=strmatch(name,psName,'exact');
- for m=1:length(id)
- psList(id(m)).class=6; % XCOR or YCOR
- if (curflag(5))
- psList(id(m)).cur=Icorr(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
-
- % ------------------------------------------------------------------------------
-
- end
- function psList=FlLoadDesign(psListIn,MADfile,curflag)
- global FL % for initial Twiss
- psList=psListIn;
-
- %[tt,K,N,L,P,A,T,E,FDN,twss,orbt,S]=xtfft2mat(MADfile); % mex version
- [tt,K,N,L,P,twss,orbt,S]=xtfft2mat5(MADfile); % non-mex version
-
- FL.SimModel.Initial.x.Twiss.nu=twss(1,1);
- FL.SimModel.Initial.x.Twiss.beta=twss(1,2);
- FL.SimModel.Initial.x.Twiss.alpha=twss(1,3);
- FL.SimModel.Initial.x.Twiss.eta=twss(1,4);
- FL.SimModel.Initial.x.Twiss.etap=twss(1,5);
- FL.SimModel.Initial.y.Twiss.nu=twss(1,6);
- FL.SimModel.Initial.y.Twiss.beta=twss(1,7);
- FL.SimModel.Initial.y.Twiss.alpha=twss(1,8);
- FL.SimModel.Initial.y.Twiss.eta=twss(1,9);
- FL.SimModel.Initial.y.Twiss.etap=twss(1,10);
-
- energy=FL.SimModel.Initial.Momentum;
- clight=299792458; % m/s
- Cb=1e9/clight; % T-m/GeV
- brho=Cb*energy; % T-m
-
- % ------------------------------------------------------------------------------
- % DR
- % ------------------------------------------------------------------------------
-
- % device names
-
- bname=[ ...
- 'BH1R '];
- qname=[ ...
- 'QF1R ';'QF2R '; ...
- 'QM1R ';'QM2R ';'QM3R ';'QM4R ';'QM5R ';'QM6R '; ...
- 'QM7R ';'QM8R ';'QM9R ';'QM10R ';'QM11R ';'QM12R '; ...
- 'QM13R ';'QM14R ';'QM15R ';'QM16R ';'QM17R ';'QM18R '; ...
- 'QM19R ';'QM20R ';'QM21R ';'QM22R ';'QM23R ';'QM7AR '];
- sname=[ ...
- 'SF1R ';'SD1R '];
- cname=[ ...
- 'ZH1R ';'ZH2R ';'ZH3R ';'ZH4R ';'ZH5R ';'ZH6R '; ...
- 'ZH7R ';'ZH8R ';'ZH9R ';'ZH10R ';'ZH11R ';'ZH12R '; ...
- 'ZH13R ';'ZH14R '; 'ZH16R ';'ZH17R ';'ZH18R '; ...
- 'ZH19R ';'ZH20R ';'ZH21R ';'ZH22R ';'ZH23R ';'ZH24R '; ...
- 'ZH25R ';'ZH26R ';'ZH27R ';'ZH28R ';'ZH29R ';'ZH30R '; ...
- 'ZH31R ';'ZH32R ';'ZH33R ';'ZH34R ';'ZH35R ';'ZH36R '; ...
- 'ZH37R ';'ZH38R ';'ZH39R ';'ZH40R ';'ZH41R ';'ZH42R '; ...
- 'ZH43R ';'ZH44R ';'ZH45R ';'ZH46R ';'ZH47R ';'ZH48R '; ...
- 'ZV1R ';'ZV2R ';'ZV3R ';'ZV4R ';'ZV5R ';'ZV6R '; ...
- 'ZV7R ';'ZV8R ';'ZV9R ';'ZV10R ';'ZV11R ';'ZV12R '; ...
- 'ZV13R ';'ZV14R ';'ZV15R '; 'ZV17R ';'ZV18R '; ...
- 'ZV19R ';'ZV20R ';'ZV21R ';'ZV22R ';'ZV23R ';'ZV24R '; ...
- 'ZV25R ';'ZV26R ';'ZV27R ';'ZV28R ';'ZV29R ';'ZV30R '; ...
- 'ZV31R ';'ZV32R ';'ZV33R ';'ZV34R ';'ZV35R ';'ZV36R '; ...
- 'ZV37R ';'ZV38R ';'ZV39R ';'ZV40R ';'ZV41R ';'ZV42R '; ...
- 'ZV43R ';'ZV44R ';'ZV45R ';'ZV46R ';'ZV47R ';'ZV48R '; ...
- 'ZV49R ';'ZV50R ';'ZV51R '; ...
- 'ZH100R ';'ZH101R ';'ZH102R ';'ZV100R '];
-
- % SBEN
-
- Ibh1r=DR_energy(2,energy);
- name=deblank(bname);
- id=strmatch(name,char(psList.name));
- for m=1:length(id)
- psname=psList(id(m)).name;
- if (strcmp(psname,name))
- if (curflag(1))
- psList(id(m)).cur=Ibh1r;
- else
- psList(id(m)).cur=0;
- end
- end
- end
-
- % QUAD
-
- [nr,nc]=size(qname);
- KL=zeros(nr,1);
- for n=1:nr
- name=deblank(qname(n,:));
- if (strcmp(name,'QM7R'))
- name='QM7R2';
- elseif (strcmp(name,'QM7AR'))
- name='QM7R1';
- else
- name=strcat(qname(n,:),'1');
- end
- id=strmatch(name,N,'exact');
- KL(n)=sum(P(id,2).*L(id));
- end
- Iquad=get_DR_quads(2,energy,KL,0);
- for n=1:nr
- name=deblank(qname(n,:));
- id=strmatch(name,char(psList.name));
- for m=1:length(id)
- psname=psList(id(m)).name;
- if (strcmp(psname,name))
- if (curflag(2))
- psList(id(m)).cur=Iquad(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- end
-
- % SEXT
-
- [nr,nc]=size(sname);
- KL=zeros(nr,1);
- for n=1:nr
- name=strcat(sname(n,:),'1');
- id=strmatch(name,N,'exact');
- KL(n)=sum(P(id,3).*L(id));
- end
- Isext=get_DR_sexts(2,energy,KL,0);
- for n=1:nr
- name=deblank(sname(n,:));
- id=strmatch(name,char(psList.name));
- for m=1:length(id)
- psname=psList(id(m)).name;
- if (strcmp(psname,name))
- if (curflag(3))
- psList(id(m)).cur=Isext(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- end
-
- % MULT
-
- [nr,nc]=size(sname);
- Nt=[34,34];
- mname=[];
- for n=1:nr
- for m=1:Nt(n)
- name=sprintf('SQ%s%d',sname(n,1:2),m);
- name=[name,blanks(nc-length(name))];
- mname=[mname;name];
- end
- end
- [nr,nc]=size(mname);
- KL=zeros(nr,1);
- for n=1:nr
- name=deblank(mname(n,:));
- id=strmatch(name,N,'exact');
- KL(n)=P(id,2); % K1L
- end
- Imult=get_DR_skews(2,energy,KL,0);
- for n=1:nr
- name=deblank(mname(n,:));
- id=strmatch(name,char(psList.name));
- for m=1:length(id)
- psname=psList(id(m)).name;
- if (strcmp(psname,name))
- if (curflag(4))
- psList(id(m)).cur=Imult(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- end
-
- % XCOR and YCOR
-
- [nr,nc]=size(cname);
- KL=zeros(nr,1);
- for n=1:nr
- name=deblank(cname(n,:));
- id=strmatch(name,N,'exact');
- if (strcmp(K(id,:),'HKIC'))
- KL(n)=P(id,4);
- else
- KL(n)=P(id,5);
- end
- end
- Icorr=get_DR_corrs(2,energy,KL,0);
- for n=1:nr
- name=deblank(cname(n,:));
- id=strmatch(name,char(psList.name));
- for m=1:length(id)
- psname=psList(id(m)).name;
- if (strcmp(psname,name))
- if (curflag(5))
- psList(id(m)).cur=Icorr(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- end
-
- % ------------------------------------------------------------------------------
- % ATF2
- % ------------------------------------------------------------------------------
-
- % device names
-
- bname=[ ...
- 'BH1X ';'BH2X ';'BH3X ';'B5FF ';'B2FF ';'B1FF ';'BDUMP '];
- qname=[ ...
- 'QM6RX ';'QM7RX ';'QS1X ';'QF1X ';'QD2X ';'QF3X ';'QF4X '; ...
- 'QD5X ';'QF6X ';'QS2X ';'QF7X ';'QD8X ';'QF9X ';'QK1X '; ...
- 'QD10X ';'QF11X ';'QK2X ';'QD12X ';'QF13X ';'QD14X ';'QF15X '; ...
- 'QK3X ';'QD16X ';'QF17X ';'QK4X ';'QD18X ';'QF19X ';'QD20X '; ...
- 'QF21X ';'QM16FF ';'QM15FF ';'QM14FF ';'QM13FF ';'QM12FF ';'QM11FF '; ...
- 'QD10BFF';'QD10AFF';'QF9BFF ';'QF9AFF ';'QD8FF ';'QF7FF ';'QD6FF '; ...
- 'QF5BFF ';'QF5AFF ';'QD4BFF ';'QD4AFF ';'QF3FF ';'QD2BFF ';'QD2AFF '; ...
- 'QF1FF ';'QD0FF '];
- sname=[ ...
- 'SF6FF ';'SF5FF ';'SD4FF ';'SF1FF ';'SD0FF '];
- cname=[ ...
- 'ZH100RX';'ZH101RX'; ...
- 'ZX1X ';'ZX2X ';'ZX3X '; ...
- 'ZH1X ';'ZH2X ';'ZH3X ';'ZH4X ';'ZH5X ';'ZH6X ';'ZH7X '; ...
- 'ZH8X ';'ZH9X ';'ZH10X ';'ZH1FF '; ...
- 'ZV100RX'; ...
- 'ZV1X ';'ZV2X ';'ZV3X ';'ZV4X ';'ZV5X ';'ZV6X ';'ZV7X '; ...
- 'ZV8X ';'ZV9X ';'ZV10X ';'ZV11X ';'ZV1FF '];
- idqmff=(30:35)'; % FF matching quads
-
- % SBEN
-
- [nr,nc]=size(bname);
- KL=zeros(nr,1);
- for n=1:nr
- name=deblank(bname(n,:));
- id=strmatch(name,N);
- KL(n)=sum(P(id,1));
- end
- Ibend=get_ATF2_bends(2,energy,KL,0);
- for n=1:nr
- name=deblank(bname(n,:));
- id=strmatch(name,char(psList.name));
- for m=1:length(id)
- psname=psList(id(m)).name;
- if (strcmp(psname,name))
- if (curflag(1))
- psList(id(m)).cur=Ibend(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- end
-
- % QUAD
-
- [nr,nc]=size(qname);
- KL=zeros(nr,1);
- for n=1:nr
- name=deblank(qname(n,:));
- id=strmatch(name,N,'exact');
- KL(n)=sum(P(id,2).*L(id));
- end
- QMFFpol=[1;-1;-1;1;1;-1]; % "normal" polarity defined (as wired)
- rev=sign(KL(idqmff)).*QMFFpol; % -1=reversed, 0=off, +1=normal
- idrev=find(rev==-1);
- QMFFrev=[1;1;1;1;1;1]; % start with normal polarity ...
- QMFFrev(idrev)=-1; % ... and make the necessary reversals
- Iquad=get_ATF2_quads(2,energy,KL,QMFFrev,0);
- for n=1:nr
- name=deblank(qname(n,:));
- id=strmatch(name,char(psList.name));
- for m=1:length(id)
- psname=psList(id(m)).name;
- if (strcmp(psname,name))
- if (curflag(2))
- psList(id(m)).cur=Iquad(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- end
-
- % SEXT
-
- [nr,nc]=size(sname);
- KL=zeros(nr,1);
- for n=1:nr
- name=deblank(sname(n,:));
- id=strmatch(name,N,'exact');
- KL(n)=sum(P(id,3).*L(id));
- end
- Isext=get_ATF2_sexts(2,energy,KL,0);
- for n=1:nr
- name=deblank(sname(n,:));
- id=strmatch(name,char(psList.name));
- for m=1:length(id)
- psname=psList(id(m)).name;
- if (strcmp(psname,name))
- if (curflag(3))
- psList(id(m)).cur=Isext(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- end
-
- % XCOR and YCOR
-
- [nr,nc]=size(cname);
- KL=zeros(nr,1);
- for n=1:nr
- name=deblank(cname(n,:));
- id=strmatch(name,N,'exact');
- if (strcmp(K(id,:),'HKIC'))
- KL(n)=P(id,4);
- else
- KL(n)=P(id,5);
- end
- end
- Icorr=get_ATF2_corrs(2,energy,KL,[0;0;0;0;Ibend],0);
- for n=1:nr
- name=deblank(cname(n,:));
- id=strmatch(name,char(psList.name));
- for m=1:length(id)
- psname=psList(id(m)).name;
- if (strcmp(psname,name))
- if (curflag(5))
- psList(id(m)).cur=Icorr(n);
- else
- psList(id(m)).cur=0;
- end
- end
- end
- end
-
- end