source: MML/trunk/mml/setchro.m @ 4

Last change on this file since 4 was 4, checked in by zhangj, 11 years ago

Initial import--MML version from SOLEIL@2013

File size: 4.6 KB
Line 
1function [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
53FBTFlag = 0; % tune measured using FBT
54
55
56ActuatorFamily = {};
57UnitsFlag = {'Physics'};
58ModeFlag = {};
59for 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       
82end
83
84
85NewChro = [];
86if length(varargin) >= 1
87    NewChro = varargin{1};
88end
89if 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(:);
97end
98if isempty(NewChro)
99    error('Golden chromaticity not found');
100end
101
102if length(varargin) >= 2
103    ChroResponseMatrix = varargin{2};
104else
105    ChroResponseMatrix = [];   
106end
107
108if length(varargin) >= 3
109    ActuatorFamily = varargin{3};
110else
111    ActuatorFamily = findmemberof('Chromaticity Corrector')';
112    if isempty(ActuatorFamily)
113        ActuatorFamily = {'S9','S10'};
114    end
115end
116
117disp('   Begin initial chromaticity measurement...');
118if FBTFlag
119    if length(varargin) < 4
120        MeasuredChrom = measchroFBT('Numeric', UnitsFlag{:}, ModeFlag{:});
121    else
122        MeasuredChrom = measchroFBT(varargin{3}, 'Numeric', UnitsFlag{:}, ModeFlag{:});
123    end
124else
125    if length(varargin) < 4
126        MeasuredChrom = measchro('Numeric', UnitsFlag{:}, ModeFlag{:});
127    else
128        MeasuredChrom = measchro(varargin{3}, 'Numeric', UnitsFlag{:}, ModeFlag{:});
129    end
130end
131
132fprintf('   Measured Horizontal Chromaticity = %f (Goal is %f)\n', MeasuredChrom(1), NewChro(1));
133fprintf('   Measured Vertical   Chromaticity = %f (Goal is %f)\n', MeasuredChrom(2), NewChro(2));
134
135if 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');
140else
141    disp('   Chromaticity not changed');
142    DelSext = zeros(length(ActuatorFamily),1);
143end
Note: See TracBrowser for help on using the repository browser.