1 | function [DelSext, ActuatorFamily] = setchro(varargin) |
---|
2 | %SETCHRO - Measures then sets the chromaticity |
---|
3 | % [DelSext, SextFamily] = setchro(NewChromaticity, ChroResponseMatrix, DeltaRF) |
---|
4 | % |
---|
5 | % INPUTS |
---|
6 | % 1. | Horizontal Chromaticity | |
---|
7 | % NewChromaticity = | | |
---|
8 | % | Vertical Chromaticity | |
---|
9 | % 2. ChroResponseMatrix - Chromaticity response matrix {Default: getchroresp} |
---|
10 | % 3. ActuatorFamily - Sextupoles to vary, ex {'S9', 'S10'} {Default: findmemberof('Chromaticity Corrector')'} |
---|
11 | % 4. DeltaRF - measchro for an explaination of DeltaRF {Default comes from measchro} |
---|
12 | % 5. Optional override of the units: |
---|
13 | % 'Physics' - Use physics units |
---|
14 | % 'Hardware' - Use hardware units |
---|
15 | % 6. Optional override of the mode: |
---|
16 | % 'Online' - Set/Get data online |
---|
17 | % 'Model' - Set/Get data on the simulated accelerator using AT |
---|
18 | % 'Simulator' - Set/Get data on the simulated accelerator using AT |
---|
19 | % 'Manual' - Set/Get data manually |
---|
20 | % 'FBT' - For golden correction, used tune from FBT system |
---|
21 | % |
---|
22 | % |
---|
23 | % OUTPUTS |
---|
24 | % 1. DelSext - Change in sextrupole strength (vector by family) |
---|
25 | % 2. SextFamily - Families used (cell array) |
---|
26 | % |
---|
27 | % ALGORITHM |
---|
28 | % SVD |
---|
29 | % DelSext = inv(CHROMATICITY_RESP_MATRIX) * (NewChromaticity-getchro) |
---|
30 | % |
---|
31 | % NOTES |
---|
32 | % 1. Beware of what units you are working in. The default units are usually |
---|
33 | % hardware units so the default chromaticity is likely going to be negative. |
---|
34 | % For instance, at Spear the physics units chromaticity of 1 unit corresponds to roughly |
---|
35 | % -1.8 units in hardware units. |
---|
36 | % |
---|
37 | % EXAMPLES |
---|
38 | % 1. use default families |
---|
39 | % setchro([1 0.5]) |
---|
40 | % 2. use 10 families |
---|
41 | % Sfam = {'S1','S2','S3','S4','S5','S6','S7','S8','S9','S10'}; |
---|
42 | % B = measchroresp('Model','Display',Sfam); |
---|
43 | % setchro([1 0.5],'Model',B,Sfam) |
---|
44 | % |
---|
45 | % Also See stepchro |
---|
46 | |
---|
47 | % |
---|
48 | % Written by Gregory J. Portmann |
---|
49 | % Modification by Laurent S. Nadolski |
---|
50 | % Actuator family list as an optional input --> 3rd argument is now 4th |
---|
51 | % argument! |
---|
52 | |
---|
53 | FBTFlag = 0; % tune measured using FBT |
---|
54 | |
---|
55 | |
---|
56 | ActuatorFamily = {}; |
---|
57 | UnitsFlag = {'Physics'}; |
---|
58 | ModeFlag = {}; |
---|
59 | for i = length(varargin):-1:1 |
---|
60 | if strcmpi(varargin{i},'physics') |
---|
61 | UnitsFlag = varargin(i); |
---|
62 | varargin(i) = []; |
---|
63 | elseif strcmpi(varargin{i},'hardware') |
---|
64 | UnitsFlag = varargin(i); |
---|
65 | varargin(i) = []; |
---|
66 | elseif strcmpi(varargin{i},'simulator') | strcmpi(varargin{i},'model') |
---|
67 | ModeFlag = varargin(i); |
---|
68 | varargin(i) = []; |
---|
69 | elseif strcmpi(varargin{i},'online') |
---|
70 | ModeFlag = varargin(i); |
---|
71 | varargin(i) = []; |
---|
72 | elseif strcmpi(varargin{i},'manual') |
---|
73 | ModeFlag = varargin(i); |
---|
74 | varargin(i) = []; |
---|
75 | elseif strcmpi(varargin{i},'FBT') |
---|
76 | FBTFlag = 1; |
---|
77 | varargin(i) = []; |
---|
78 | elseif strcmpi(varargin{i},'NoFBT') |
---|
79 | FBTFlag = 0; |
---|
80 | varargin(i) = []; |
---|
81 | end |
---|
82 | end |
---|
83 | |
---|
84 | |
---|
85 | NewChro = []; |
---|
86 | if length(varargin) >= 1 |
---|
87 | NewChro = varargin{1}; |
---|
88 | end |
---|
89 | if isempty(NewChro) |
---|
90 | if strcmpi(UnitsFlag{1}, 'Physics') |
---|
91 | NewChro = getgolden('Chromaticity'); % Physics units |
---|
92 | else |
---|
93 | NewChro = -getgolden('Chromaticity') / getrf / getmcf; % Hardware units |
---|
94 | end |
---|
95 | NewChro = NewChro(1:2); |
---|
96 | NewChro = NewChro(:); |
---|
97 | end |
---|
98 | if isempty(NewChro) |
---|
99 | error('Golden chromaticity not found'); |
---|
100 | end |
---|
101 | |
---|
102 | if length(varargin) >= 2 |
---|
103 | ChroResponseMatrix = varargin{2}; |
---|
104 | else |
---|
105 | ChroResponseMatrix = []; |
---|
106 | end |
---|
107 | |
---|
108 | if length(varargin) >= 3 |
---|
109 | ActuatorFamily = varargin{3}; |
---|
110 | else |
---|
111 | ActuatorFamily = findmemberof('Chromaticity Corrector')'; |
---|
112 | if isempty(ActuatorFamily) |
---|
113 | ActuatorFamily = {'S9','S10'}; |
---|
114 | end |
---|
115 | end |
---|
116 | |
---|
117 | disp(' Begin initial chromaticity measurement...'); |
---|
118 | if FBTFlag |
---|
119 | if length(varargin) < 4 |
---|
120 | MeasuredChrom = measchroFBT('Numeric', UnitsFlag{:}, ModeFlag{:}); |
---|
121 | else |
---|
122 | MeasuredChrom = measchroFBT(varargin{3}, 'Numeric', UnitsFlag{:}, ModeFlag{:}); |
---|
123 | end |
---|
124 | else |
---|
125 | if length(varargin) < 4 |
---|
126 | MeasuredChrom = measchro('Numeric', UnitsFlag{:}, ModeFlag{:}); |
---|
127 | else |
---|
128 | MeasuredChrom = measchro(varargin{3}, 'Numeric', UnitsFlag{:}, ModeFlag{:}); |
---|
129 | end |
---|
130 | end |
---|
131 | |
---|
132 | fprintf(' Measured Horizontal Chromaticity = %f (Goal is %f)\n', MeasuredChrom(1), NewChro(1)); |
---|
133 | fprintf(' Measured Vertical Chromaticity = %f (Goal is %f)\n', MeasuredChrom(2), NewChro(2)); |
---|
134 | |
---|
135 | if strcmpi(questdlg('Do you want to change the chromaticity now?','Yes','No'), 'Yes') |
---|
136 | disp(' Begin chromaticity change...'); |
---|
137 | [DelSext, ActuatorFamily] = stepchro([NewChro(1)-MeasuredChrom(1); NewChro(2)-MeasuredChrom(2)], ... |
---|
138 | ChroResponseMatrix, ActuatorFamily, UnitsFlag{:}, ModeFlag{:}); |
---|
139 | disp(' Finished chromaticity change'); |
---|
140 | else |
---|
141 | disp(' Chromaticity not changed'); |
---|
142 | DelSext = zeros(length(ActuatorFamily),1); |
---|
143 | end |
---|