source: MML/trunk/mml/at/setradiation.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: 13.8 KB
Line 
1function [PassMethod, ATIndex, FamName, PassMethodOld, ATIndexOld, FamNameOld] = setradiation(InputString)
2%SETRADIATION - Sets the model PassMethod to include or exclude radiation ('On' / 'Off' {Default})
3%  [PassMethod, PassMethodOld, ATIndex, FamName] = setradiation('On' or 'Off')
4%
5%  INPUTS
6%  1. 'On' or 'Off'
7%
8%  OUTPUTS
9%  New AT model parameters
10%  1. PassMethod - AT PassMethod field (cell array)
11%  2. ATIndex    - AT index in THERING
12%  3. FamName    - AT family name (cell array)
13%  Old AT model parameters
14%  4. PassMethodOld - AT PassMethod field (cell array)
15%  5. ATIndexOld    - AT index in THERING
16%  6. FamNameOld    - AT family name (cell array)
17%
18%  NOTE
19%  1. setpassmethod(ATIndexOld, PassMethodOld) can be used to restore old PassMethods.
20%  2. This function is machine specific so it is prone to being out-of-date.  All machine get the
21%     same passmethods for radiation on. The potential confusion occurs when turning the radiation off.
22%     The following is the list for how this function is programmed.  Please email me if
23%     it is not correct for your accelerator.
24%
25%  1. Spear, Diamond, NSRRC, SSRF, and the X-Ray ring
26%     Quadrupole magnets pass methods:
27%     a. QuadLinearPass             - Radiation off
28%     b. StrMPoleSymplectic4RadPass - Radiation on
29%
30%     Bend magnet pass methods:
31%     a. BendLinearPass             - Radiation off
32%     b. BndMPoleSymplectic4RadPass - Radiation on
33%
34%     Sextupoles magnets pass methods:
35%     a. StrMPoleSymplectic4Pass    - Radiation off
36%     b. StrMPoleSymplectic4RadPass - Radiation on
37%
38%  2. PLS and ASP
39%     Quadrupole magnets pass methods:
40%     a. QuadLinearPass             - Radiation off
41%     b. StrMPoleSymplectic4RadPass - Radiation on
42%
43%     Bend magnet pass methods:
44%     a. BndMPoleSymplectic4Pass    - Radiation off
45%     b. BndMPoleSymplectic4RadPass - Radiation on
46%
47%     Sextupoles magnets pass methods:
48%     a. StrMPoleSymplectic4Pass    - Radiation off
49%     b. StrMPoleSymplectic4RadPass - Radiation on
50%
51%  3. ALS, CLS, ALBA, CAMD, VUV, SOLEIL ring, and any ring not mentioned above
52%     Quadrupole magnets pass methods:
53%     a. StrMPoleSymplectic4Pass    - Radiation off
54%     b. StrMPoleSymplectic4RadPass - Radiation on
55%
56%     Bend magnet pass methods:
57%     a. BndMPoleSymplectic4Pass    - Radiation off
58%     b. BndMPoleSymplectic4RadPass - Radiation on
59%
60%     Sextupoles magnets pass methods:
61%     a. StrMPoleSymplectic4Pass    - Radiation off
62%     b. StrMPoleSymplectic4RadPass - Radiation on
63%
64%  See also setpassmethod getpassmethod getcavity setcavity
65
66%
67%%  Written by Greg Portmann
68
69
70
71global THERING
72
73if nargin == 0
74    InputString = 'Off';
75end
76
77ATIndex = [];
78PassMethod = {};
79FamName = {};
80
81% Old passmethods
82if nargout > 3
83    ATIndexOld = [];
84    PassMethodOld = {};
85    FamNameOld = {};
86    localindex = findcells(THERING,'PassMethod','QuadLinearPass');
87    if ~isempty(localindex)
88        ATIndexOld = [ATIndexOld localindex(:)'];
89        PassMethodOld = [PassMethodOld; getcellstruct(THERING,'PassMethod',localindex)];
90        FamNameOld    = [FamNameOld;    getcellstruct(THERING,'FamName',   localindex)];
91    end
92    localindex = findcells(THERING,'PassMethod','StrMPoleSymplectic4Pass');
93    if ~isempty(localindex)
94        ATIndexOld = [ATIndexOld localindex(:)'];
95        PassMethodOld = [PassMethodOld; getcellstruct(THERING,'PassMethod',localindex)];
96        FamNameOld    = [FamNameOld;    getcellstruct(THERING,'FamName',   localindex)];
97    end
98    localindex = findcells(THERING,'PassMethod','StrMPoleSymplectic4RadPass');
99    if ~isempty(localindex)
100        ATIndexOld = [ATIndexOld localindex(:)'];
101        PassMethodOld = [PassMethodOld; getcellstruct(THERING,'PassMethod',localindex)];
102        FamNameOld    = [FamNameOld;    getcellstruct(THERING,'FamName',   localindex)];
103    end
104
105    localindex = findcells(THERING,'PassMethod','BendLinearPass');
106    if ~isempty(localindex)
107        ATIndexOld = [ATIndexOld localindex(:)'];
108        PassMethodOld = [PassMethodOld; getcellstruct(THERING,'PassMethod',localindex)];
109        FamNameOld    = [FamNameOld;    getcellstruct(THERING,'FamName',   localindex)];
110    end
111    localindex = findcells(THERING,'PassMethod','BndMPoleSymplectic4Pass');
112    if ~isempty(localindex)
113        ATIndexOld = [ATIndexOld localindex(:)'];
114        PassMethodOld = [PassMethodOld; getcellstruct(THERING,'PassMethod',localindex)];
115        FamNameOld    = [FamNameOld;    getcellstruct(THERING,'FamName',   localindex)];
116    end
117    localindex = findcells(THERING,'PassMethod','BndMPoleSymplectic4RadPass');
118    if ~isempty(localindex)
119        ATIndexOld = [ATIndexOld localindex(:)'];
120        PassMethodOld = [PassMethodOld; getcellstruct(THERING,'PassMethod',localindex)];
121        FamNameOld    = [FamNameOld;    getcellstruct(THERING,'FamName',   localindex)];
122    end
123    ATIndexOld = ATIndexOld(:);
124    if length(PassMethodOld) == 1
125        PassMethodOld = PassMethodOld{1};
126        FamNameOld    = FamNameOld{1};
127    end
128end
129
130
131% Main
132switch lower(InputString)
133
134    case 'off'
135       
136        MachineName = lower(getfamilydata('Machine'));
137%        if any([findstr(MachineName,'spear') findstr(MachineName,'x-ray') findstr(MachineName,'diamond') findstr(MachineName,'soleil') findstr(MachineName,'ssrf') findstr(MachineName,'NSRRC') findstr(MachineName,'sps')])
138        if any([findstr(MachineName,'spear') findstr(MachineName,'x-ray') findstr(MachineName,'diamond')  findstr(MachineName,'ssrf') findstr(MachineName,'NSRRC') findstr(MachineName,'sps')])
139
140            localindex = findcells(THERING,'PassMethod','StrMPoleSymplectic4RadPass');
141            if ~isempty(localindex)
142                for i = 1:length(localindex)
143                    if isfield(THERING{localindex(i)},'K')
144                        % Quadupoles
145                        THERING = setcellstruct(THERING,'PassMethod', localindex(i), 'QuadLinearPass');
146                    else
147                        % Sextupoles, etc.
148                        THERING = setcellstruct(THERING,'PassMethod', localindex(i), 'StrMPoleSymplectic4Pass');
149                    end
150                    PassMethod{i,1} = THERING{localindex(i)}.PassMethod;
151                    FamName{i,1}    = THERING{localindex(i)}.FamName;
152                end
153                ATIndex = localindex(:)';
154            end
155
156            % Bends
157            localindex = findcells(THERING,'PassMethod','BndMPoleSymplectic4RadPass');
158            if ~isempty(localindex)
159                THERING = setcellstruct(THERING,'PassMethod',localindex, 'BendLinearPass');
160                ATIndex = [ATIndex localindex(:)'];
161                PassMethod = [PassMethod; getcellstruct(THERING,'PassMethod',localindex)];
162                FamName    = [FamName;    getcellstruct(THERING,'FamName',   localindex)];
163            end
164           
165            % Output
166            localindex = findcells(THERING,'PassMethod','QuadLinearPass');
167            if ~isempty(localindex)
168                ATIndex = [ATIndex localindex(:)'];
169                PassMethod = [PassMethod; getcellstruct(THERING,'PassMethod',localindex)];
170                FamName    = [FamName;    getcellstruct(THERING,'FamName',   localindex)];
171            end
172            localindex = findcells(THERING,'PassMethod','StrMPoleSymplectic4Pass');
173            if ~isempty(localindex)
174                ATIndex = [ATIndex localindex(:)'];
175                PassMethod = [PassMethod; getcellstruct(THERING,'PassMethod',localindex)];
176                FamName    = [FamName;    getcellstruct(THERING,'FamName',   localindex)];
177            end
178            localindex = findcells(THERING,'PassMethod','BendLinearPass');
179            if ~isempty(localindex)
180                ATIndex = [ATIndex localindex(:)'];
181                PassMethod = [PassMethod; getcellstruct(THERING,'PassMethod',localindex)];
182                FamName    = [FamName;    getcellstruct(THERING,'FamName',   localindex)];
183            end
184
185        elseif any([findstr(MachineName,'pls') findstr(MachineName,'asp')])
186
187            localindex = findcells(THERING,'PassMethod','StrMPoleSymplectic4RadPass');
188            if ~isempty(localindex)
189                for i = 1:length(localindex)
190                    if isfield(THERING{localindex(i)},'K')
191                        % Quadupoles
192                        THERING = setcellstruct(THERING,'PassMethod', localindex(i), 'QuadLinearPass');
193                    else
194                        % Sextupoles, etc.
195                        THERING = setcellstruct(THERING,'PassMethod', localindex(i), 'StrMPoleSymplectic4Pass');
196                    end
197                    PassMethod{i,1} = THERING{localindex(i)}.PassMethod;
198                    FamName{i,1}    = THERING{localindex(i)}.FamName;
199                end
200                ATIndex = localindex(:)';
201            end
202
203            % Bends
204            localindex = findcells(THERING,'PassMethod','BndMPoleSymplectic4RadPass');
205            if ~isempty(localindex)
206                THERING = setcellstruct(THERING,'PassMethod',localindex, 'BndMPoleSymplectic4Pass');
207                ATIndex = [ATIndex localindex(:)'];
208                PassMethod = [PassMethod; getcellstruct(THERING,'PassMethod',localindex)];
209                FamName    = [FamName;    getcellstruct(THERING,'FamName',   localindex)];
210            end
211
212            % Output
213            localindex = findcells(THERING,'PassMethod','QuadLinearPass');
214            if ~isempty(localindex)
215                ATIndex = [ATIndex localindex(:)'];
216                PassMethod = [PassMethod; getcellstruct(THERING,'PassMethod',localindex)];
217                FamName    = [FamName;    getcellstruct(THERING,'FamName',   localindex)];
218            end
219            localindex = findcells(THERING,'PassMethod','StrMPoleSymplectic4Pass');
220            if ~isempty(localindex)
221                ATIndex = [ATIndex localindex(:)'];
222                PassMethod = [PassMethod; getcellstruct(THERING,'PassMethod',localindex)];
223                FamName    = [FamName;    getcellstruct(THERING,'FamName',   localindex)];
224            end
225            localindex = findcells(THERING,'PassMethod','BndMPoleSymplectic4Pass');
226            if ~isempty(localindex)
227                ATIndex = [ATIndex localindex(:)'];
228                PassMethod = [PassMethod; getcellstruct(THERING,'PassMethod',localindex)];
229                FamName    = [FamName;    getcellstruct(THERING,'FamName',   localindex)];
230            end
231
232        else
233
234            % Quadupoles, Sextupoles, etc.
235            localindex = findcells(THERING,'PassMethod','StrMPoleSymplectic4RadPass');
236            if ~isempty(localindex)
237                THERING = setcellstruct(THERING,'PassMethod',localindex, 'StrMPoleSymplectic4Pass');
238                ATIndex = localindex(:)';
239                PassMethod = [PassMethod; getcellstruct(THERING,'PassMethod',localindex)];
240                FamName    = [FamName;    getcellstruct(THERING,'FamName',   localindex)];
241            end
242
243            % Bends
244            localindex = findcells(THERING,'PassMethod','BndMPoleSymplectic4RadPass');
245            if ~isempty(localindex)
246                THERING = setcellstruct(THERING,'PassMethod',localindex, 'BndMPoleSymplectic4Pass');
247                ATIndex = [ATIndex localindex(:)'];
248                PassMethod = [PassMethod; getcellstruct(THERING,'PassMethod',localindex)];
249                FamName    = [FamName;    getcellstruct(THERING,'FamName',   localindex)];
250            end
251
252            % Output
253            localindex = findcells(THERING,'PassMethod','StrMPoleSymplectic4Pass');
254            if ~isempty(localindex)
255                ATIndex = [ATIndex localindex(:)'];
256                PassMethod = [PassMethod; getcellstruct(THERING,'PassMethod',localindex)];
257                FamName    = [FamName;    getcellstruct(THERING,'FamName',   localindex)];
258            end
259            localindex = findcells(THERING,'PassMethod','BndMPoleSymplectic4Pass');
260            if ~isempty(localindex)
261                ATIndex = [ATIndex localindex(:)'];
262                PassMethod = [PassMethod; getcellstruct(THERING,'PassMethod',localindex)];
263                FamName    = [FamName;    getcellstruct(THERING,'FamName',   localindex)];
264            end
265
266        end
267
268
269    case 'on'
270       
271        % Sextupoles, etc.
272        localindex = findcells(THERING,'PassMethod','StrMPoleSymplectic4Pass');
273        if ~isempty(localindex)
274            THERING = setcellstruct(THERING,'PassMethod',localindex, 'StrMPoleSymplectic4RadPass');
275        end
276
277        % Quadupoles
278        localindex = findcells(THERING,'PassMethod','QuadLinearPass');
279        if ~isempty(localindex)
280            THERING = setcellstruct(THERING,'PassMethod',localindex, 'StrMPoleSymplectic4RadPass');
281        end
282
283        % Bends
284        localindex = findcells(THERING,'PassMethod','BndMPoleSymplectic4Pass');
285        if ~isempty(localindex)
286            THERING = setcellstruct(THERING,'PassMethod',localindex, 'BndMPoleSymplectic4RadPass');
287        end
288
289        localindex = findcells(THERING,'PassMethod','BendLinearPass');
290        if ~isempty(localindex)
291            THERING = setcellstruct(THERING,'PassMethod',localindex, 'BndMPoleSymplectic4RadPass');
292        end
293
294        % Output
295        localindex = findcells(THERING,'PassMethod','StrMPoleSymplectic4RadPass');
296        if ~isempty(localindex)
297            ATIndex = [ATIndex localindex(:)'];
298            PassMethod = [PassMethod; getcellstruct(THERING,'PassMethod',localindex)];
299            FamName    = [FamName;    getcellstruct(THERING,'FamName',   localindex)];
300        end
301        localindex = findcells(THERING,'PassMethod','BndMPoleSymplectic4RadPass');
302        if ~isempty(localindex)
303            ATIndex = [ATIndex localindex(:)'];
304            PassMethod = [PassMethod; getcellstruct(THERING,'PassMethod',localindex)];
305            FamName    = [FamName;    getcellstruct(THERING,'FamName',   localindex)];
306        end
307        %disp(['PassMethod was changed to include radiation in ',num2str(length(ATIndex)),  ' elements'])
308end
309
310
311ATIndex = ATIndex(:);
312
313
314if length(PassMethod) == 1
315    PassMethod = PassMethod{1};
316    FamName    = FamName{1};
317end
318
Note: See TracBrowser for help on using the repository browser.