source: MML/trunk/machine/SOLEIL/StorageRing/bpm/setorbitV.m @ 17

Last change on this file since 17 was 17, checked in by zhangj, 10 years ago

To have a stable version on the server.

  • Property svn:executable set to *
File size: 6.9 KB
Line 
1function OCS = setorbitV(varargin)
2%SETORBITV - Correct the horizontal orbit
3%
4%  INPUTS
5%  1. GoalOrbit - Goal orbit (vector or cell array (if BPM is a cell array))
6%                'Golden' for the golden orbit {Default}
7%                'Offset' for the offset orbit
8%  2. BPM - BPMDevList
9%  3. CM - CMDevList
10%  4. SVDIndex - vector, maximum number, 'All', or
11%                base on a threshold of min/max singular value {Default: 1e-3}
12%  5. NIter - Number of iterations  {Default: 1}
13%            (NIter can be 0, see note 1 below)
14%  6. BPMWeight - Weight applied to the BPMs (OCS.BPMWeight)
15%  7. FLAGS  - 'Abs' or 'Absolute' - GoalOrbit is an absolute orbit {Default}
16%              'Inc' or 'Incremental' - GoalOrbit is a incremental change
17%              'ModelResp' - calculate the model response matrix {Default: measured response matrix}
18%              'SetSP' - Make the setpoint change {Default}
19%              'NoSetSP' - Don't set the magnets, just return the OCS
20%              'Display' - plot orbit information before applying the correction
21%              'FitRF' - Fit and change the RF frequency (use rmdisp before
22%                        calling this function to remove the dispersion orbit)
23%              'MeasDisp' - measure the dispersion  {Default}
24%              'ModelDisp' - calculate the model dispersion
25%              'GoldenDisp' - use the golden dispersion
26%              And the usual Units and Mode flags
27%
28%  OUTPUTS
29%  1. OCS    - New orbit correction structure (OCS)
30%
31%  See Also setorbit, setorbitV
32
33%
34%% Written by Laurent S. Nadolski
35
36TypeFlag = 'SOFB';
37GoldenFlag = 0;
38% Default BPM Family
39BPMFamily = getvbpmfamily;
40BPMlist = [];
41
42% Default corrector Family
43CMlist = [];
44
45OCSFlags    = [];
46InputFlags  = [];
47
48% Defaults values
49OCS.NIter           = 1; % Number of iteration
50OCS.SVDIndex        = 56; % number of eigenvector for correction
51OCS.IncrementalFlag = 'No';
52OCS.FitRF       = 0; % take RF as a corrector
53
54% Input parsing
55for i = length(varargin):-1:1
56    if isstruct(varargin{i})
57        % Ignore structures
58    elseif iscell(varargin{i})
59        % Ignore cells
60    elseif strcmpi(varargin{i},'Golden')
61        % Use the golden orbit
62        OCS.GoalOrbit = 'Golden';
63        OCSFlags      = [OCSFlags varargin(i)];
64        varargin(i)   = [];
65    elseif strcmpi(varargin{i},'Offset')
66        % Use the offset orbit
67        OCS.GoalOrbit = 'Offset';
68        OCSFlags      = [OCSFlags varargin(i)];
69        varargin(i)   = [];
70    elseif strcmpi(varargin{i},'Display')
71        OCSFlags    = [OCSFlags varargin(i)];
72        varargin(i) = [];
73    elseif strcmpi(varargin{i},'NoDisplay') || ...
74            strcmpi(varargin{i},'No Display')
75        InputFlags  = [InputFlags varargin(i)];
76        varargin(i) = [];
77    elseif strcmpi(varargin{i},'ModelResp')
78        OCSFlags      = [OCSFlags varargin(i)];
79        varargin(i)   = [];
80    elseif strcmpi(varargin{i},'FitRF')
81        OCSFlags    = [OCSFlags varargin(i)];
82        varargin(i) = [];
83    elseif strcmpi(varargin{i},'ModelDisp')
84        OCSFlags    = [OCSFlags varargin(i)];
85        varargin(i) = [];
86    elseif strcmpi(varargin{i},'MeasDisp')
87        OCSFlags    = [OCSFlags varargin(i)];
88        varargin(i) = [];
89    elseif strcmpi(varargin{i},'GoldenDisp')
90        OCSFlags    = [OCSFlags varargin(i)];
91        varargin(i) = [];
92    elseif strcmpi(varargin{i},'Inc') || strcmpi(varargin{i},'Incremental')
93        OCSFlags        = [OCSFlags varargin(i)];
94        varargin(i)     = [];
95    elseif strcmpi(varargin{i},'Abs') || strcmpi(varargin{i},'Absolute')
96        OCSFlags        = [OCSFlags varargin(i)];
97    elseif strcmpi(varargin{i},'SetSP')
98        InputFlags  = [InputFlags varargin(i)];
99        varargin(i) = [];
100    elseif strcmpi(varargin{i},'NoSetSP')
101        InputFlags  = [InputFlags varargin(i)];
102        varargin(i) = [];
103    elseif strcmpi(varargin{i},'Simulator') || strcmpi(varargin{i},'Model')
104        OCSFlags    = [OCSFlags varargin(i)];
105        InputFlags  = [InputFlags varargin(i)];
106        varargin(i) = [];
107    elseif strcmpi(varargin{i},'Online')
108        OCSFlags    = [OCSFlags varargin(i)];
109        InputFlags  = [InputFlags varargin(i)];
110        varargin(i) = [];
111    elseif strcmpi(varargin{i},'Manual')
112        OCSFlags    = [OCSFlags varargin(i)];
113        InputFlags  = [InputFlags varargin(i)];
114        varargin(i) = [];
115    elseif strcmpi(varargin{i},'Physics')
116        OCSFlags    = [OCSFlags varargin(i)];
117        InputFlags  = [InputFlags varargin(i)];
118        varargin(i) = [];
119    elseif strcmpi(varargin{i},'Hardware')
120        OCSFlags    = [OCSFlags varargin(i)];
121        InputFlags  = [InputFlags varargin(i)];
122        varargin(i) = [];
123    elseif strcmpi(varargin{i},'Archive')
124        % Just remove
125        varargin(i) = [];
126    elseif strcmpi(varargin{i},'noarchive')
127        % Just remove
128        varargin(i) = [];
129    elseif strcmpi(varargin{i},'struct')
130        % Just remove
131        varargin(i) = [];
132    elseif strcmpi(varargin{i},'numeric')
133        % Just remove
134        varargin(i) = [];
135            elseif strcmpi(varargin{i},'FOFB')
136        TypeFlag = 'FOFB';
137        varargin(i) = [];
138    elseif strcmpi(varargin{i},'SOFB')
139        TypeFlag = 'SOFB';
140        varargin(i) = [];
141    end
142end
143
144% switchard for typical orbit correction at SOLEIL
145switch TypeFlag
146    case 'FOFB'
147        % number of eigenvector for correction
148        OCS.SVDIndex        = 40;
149        % Default corrector Family
150        CMFamily  = 'FVCOR';
151    case 'SOFB'
152        % number of eigenvector for correction
153        OCS.SVDIndex        = 56;
154        % Default corrector Family
155        CMFamily  = 'VCOR';
156    otherwise
157        error('TypeFlag invalid')
158end
159% Get Goal orbit
160if length(varargin) >= 1
161    OCS.GoalOrbit = varargin{1};
162    varargin(1) = [];
163end
164
165% Get BPM knobs
166if length(varargin) >= 1
167    BPMlist = varargin{1};
168    varargin(1) = [];
169end
170
171% Get CM knobs
172if length(varargin) >= 1
173    CMlist = varargin{1};
174    varargin(1) = [];
175end
176
177% Get SVDIndex
178if length(varargin) >= 1
179    OCS.SVDIndex = varargin{1};
180    varargin(1) = [];
181end
182
183% Get NIter
184if length(varargin) >= 1
185    OCS.NIter = varargin{1};
186    varargin(1) = [];
187end
188
189% Get BPMWeight
190if length(varargin) >= 1
191    OCS.BPMWeight = varargin{1};
192    varargin(1) = [];
193end
194
195Zgoal = getgolden(BPMFamily, BPMlist);
196
197%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
198% Build up Orbit correction Structures   %
199%  for setorbit programme : OCSx and OCSy%
200%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
201%  ORBIT CORRECTION STRUCTURE (OCS)
202%    OCS.BPM (data structure)
203%    OCS.CM  (data structure)
204%    OCS.GoalOrbit
205%    OCS.NIter
206%    OCS.SVDIndex
207%    OCS.IncrementalFlag = 'Yes'/'No'
208%    OCS.BPMWeight
209%    OCS.Flags = { 'FitRF' , etc.  }
210
211% Horizontal plane
212OCS.BPM             = getz(BPMlist, 'struct');
213OCS.GoalOrbit       = Zgoal;
214OCS.CM              = getsp(CMFamily, CMlist, 'struct');
215OCS.Flags = OCSFlags;
216
217if isempty(InputFlags)
218    OCS = setorbit(OCS);
219else
220    OCS = setorbit(OCS,InputFlags{:});
221end
Note: See TracBrowser for help on using the repository browser.