source: MML/trunk/machine/SOLEIL/StorageRing/modelchrosensitivity.m @ 4

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

Initial import--MML version from SOLEIL@2013

File size: 4.6 KB
Line 
1function [DSx DSz DchroVal] = modelchrosensitivity(varargin)
2%modelchrosensitivity - Computes sextupole change for FamilyList given dxi
3%
4%  INPUTS
5%  1. dxix - horizontal tune change
6%  2. dxiz - vertical tune change
7%
8%  OUTPUTS
9%  1. DSx - sextupole change to get dxix
10%  2. DSz - sextupole change to get dxiz
11%
12%  NOTES
13%  1. S11 and S1 are seen as a unique family
14%  2. Value depends on the optics for the moment see below the sextu steps 
15%
16%  See Also modeltunesensitivity, modelmcfsensitivity
17
18%
19%  Written by Laurent S. Nadolski
20
21NumericFlag = 1;
22Unit = 'Hardware';
23Mode = 'Model';
24DebugFlag = 0;
25
26timeout = 1; % second
27
28DSx= NaN; DSz=NaN;
29
30% Switchyard factory
31for i = length(varargin):-1:1
32    if strcmpi(varargin{i},'Model')
33        Mode = 'Model';
34        varargin(i) = [];
35    elseif strcmpi(varargin{i},'Online')
36        Mode = 'Online';
37        varargin(i) = [];
38    elseif strcmpi(varargin{i},'Simulator')
39        Mode = 'Simulator';
40        varargin(i) = [];
41    elseif strcmpi(varargin{i},'Physics')
42        Unit = 'Physics';
43        varargin(i) = [];
44    elseif strcmpi(varargin{i},'Hardware')
45        Unit = 'Hardware';
46        varargin(i) = [];
47    end
48end
49
50
51if isempty(varargin)
52    dxix = 1e-1;
53    dxiz = 1e-1;
54elseif nvargin == 1
55    dxix = varargin{1};
56    dxiz = dxix;
57end
58
59fprintf('   ******** Summary for ''%s'' ********\n', getlatticename);
60
61%fprintf('Sextupole change for dxix of %f and dxiz = %f \n',dxix,dxiz);
62
63% get all sextupoles
64FamilyList = findmemberof('SEXT');
65FamilyList(12) = []; % remove nanoscopium
66FamilyList(11) = []; % S11 seen as same family as S1
67FamilyNumber= length(FamilyList);
68
69if ~NumericFlag
70    for k = 1:FamilyNumber,
71
72        Family = FamilyList{k};
73
74        [bx bz] = modeltwiss('beta',Family);
75        [etax etaz] = modeldisp(Family);
76
77        L = getleff(Family);
78        NQ = length(getspos(Family));
79
80        DSx(k) =  2*pi*dxix/bx(1)/etax(1)/NQ/L(1);
81        DSz(k) = -2*pi*dxiz/bz(1)/etax(1)/NQ/L(1);
82
83        fprintf('%s : DSxL = %1.2e DSzL = %1.2e betax = %2.2f m betaz = %2.2f m etax = %2.2f m NQ = %2.0f  L= %1.2e m \n', ...
84            Family, DSx(k)*L(1), DSz(k)*L(1), bx(1), bz(1), etax(1), NQ, L(1));
85    end
86else
87    DchroVal  = zeros(2,FamilyNumber)*NaN;
88
89    % sextupole variation in Ampere
90    % alphaby10_nouveau_modele_dec08_opt_lin_1
91    %            S1 S2 S3 S4 S5 S6 S7 S8 S9 S10
92    StepValue = [10 40 10 10 50 50 50 25 5 10]; % A
93    %StepValue = [1 1 1 1 1 1 1 1 1 1]*0.1; % A
94
95
96    for k = 1:FamilyNumber,
97
98        Family = FamilyList{k};
99
100        if DebugFlag
101            fprintf('%s changed by %f\n', Family,  0.5*StepValue(k));
102        end
103       
104        % step sextupole strength by plus delta
105        if strcmp(Family, 'S1') % S1 and S11 are linked
106            fprintf('S11 Delta I = %f\n', 0.5*StepValue(k));
107            stepsp('S11', 0.5*StepValue(k), ...
108                Mode, Unit); % plus delta
109        end
110        fprintf('%s Delta I = %f\n', Family, 0.5*StepValue(k));
111        stepsp(Family, 0.5*StepValue(k), Mode, Unit); % plus delta
112       
113       
114        if strcmp(Mode, 'Model')
115            ChroValplus = modelchro(Mode);
116        else
117            pause(timeout);
118            ChroValplus = measchro(Mode, 'NoDisplay');
119        end
120        if DebugFlag
121            fprintf('Xix = %f Xiz = %f \n', ChroValplus);
122        end       
123
124     
125        % step sextupole strength to minus delta
126        if strcmp(Family, 'S1') % S1 and S11 are linked
127            fprintf('S11 Delta I = %f\n', -StepValue(k));
128            stepsp('S11', -StepValue(k), Mode, Unit); % minus delta
129        end
130        fprintf('%s Delta I = %f\n', Family, -StepValue(k));
131        stepsp(Family, -StepValue(k), Mode, Unit); % minus delta
132       
133        if strcmp(Mode, 'Model')
134            ChroValminus = modelchro;
135        else
136            pause(timeout);
137            ChroValminus = measchro(Mode, 'NoDisplay');
138        end
139
140        if DebugFlag
141            fprintf('Xix = %f Xiz = %f \n', ChroValminus);
142        end
143
144        DchroVal(:,k) = (ChroValplus - ChroValminus) / StepValue(k);
145
146        % restore sextupole strength to nominal value
147        if strcmp(Family, 'S1') % S1 and S11 are linked
148            fprintf('S11 Delta I = %f\n', 0.5*StepValue(k));
149            stepsp('S11', 0.5*StepValue(k), Mode, Unit);
150        end
151        fprintf('%s Delta I = %f\n\n', Family, 0.5*StepValue(k));
152        stepsp(Family, 0.5*StepValue(k), Mode, Unit); % come back to nominal value
153    end
154end
155
156for k = 1:FamilyNumber,
157    fprintf('%3s (%3.1f A): Dxix = % 1.2e Dxiz = % 1.2e\n', ...
158        FamilyList{k}, StepValue(k), DchroVal(1,k)*StepValue(k), ...
159        DchroVal(2,k)*StepValue(k));
160end
Note: See TracBrowser for help on using the repository browser.