source: MML/trunk/machine/THOMX/StorageRing/updateatindex.m

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

(1) Fix the bug to define all sextupole members in one family in AO. (2) Fix the bug to get and define the conversions between the dipole current and beam energy, for the two types dipoles in the transfer line.

  • Property svn:executable set to *
File size: 6.0 KB
Line 
1function updateatindex
2%UPDATEATINDEX - Updates the AT indices in the MiddleLayer with the
3%present AT lattice (THERING), depends on the Lattice
4% element types which are defined in thomxinit.m
5%
6%
7%  Modified for ThomX machine by Jianfeng Zhang @ LAL, 21/06/2013
8%
9%
10% Adapted by Laurent S. Nadolski
11% Modified 21 November Nanoscopium S11/S12 missing Atgroupparameter
12%
13%
14%
15% Needs to be modified when the ThomX machine & Tango is ready...
16% Needs to be carefully tested...by Zhang @ LAL, 02/2014.
17%
18%
19%
20%24/02/2014 by Jianfeng Zhang @ LAL
21%   Fix the bug to set/get value of the individual sextupole family member.
22%
23
24global THERING
25
26%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
27% Append Accelerator Toolbox information %
28%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
29
30% Since changes in the AT model could change the AT indexes, etc,
31% It's best to regenerate all the model indices whenever a model is loaded
32
33% Sort by family first (findcells is linear and slow)
34Indices = atindex(THERING);
35
36AO = getao;
37
38%% BPMS
39try
40    ifam = 'BPMx';
41    AO.(ifam).AT.ATType = 'X';
42    AO.(ifam).AT.ATIndex = Indices.BPMx(:); % findcells(THERING,'FamName','BPM')';
43    AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex)';
44
45    ifam = 'BPMz';
46    AO.(ifam).AT.ATType = 'Z';
47    AO.(ifam).AT.ATIndex = Indices.BPMz(:); % findcells(THERING,'FamName','BPM')';
48    AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex)';
49
50catch err
51    warning('MML:wrongfamily', '%s family not found in the model.', ifam);
52    fprintf('Message: %s\n', err.message);
53end
54
55
56%% CORRECTORS
57try
58    ifam = 'HCOR';
59    %% Horizontal correctors are at every AT corrector
60    AO.(ifam).AT.ATType = ifam;
61    AO.(ifam).AT.ATIndex = buildatindex(AO.(ifam).FamilyName, Indices.HCOR);
62    AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex(:,1))';
63
64    %% Vertical correctors are at every AT corrector
65    ifam = 'VCOR';
66    AO.(ifam).AT.ATType = ifam;
67    AO.(ifam).AT.ATIndex = buildatindex(AO.(ifam).FamilyName, Indices.VCOR);
68    AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex(:,1))';
69
70   
71    %% PX2 tuner correctors
72    if isfield(AO,'PX2C') && isfield(Indices,'PX2C')
73        ifam = 'PX2C';
74        AO.(ifam).AT.ATType = 'HCOR';
75        AO.(ifam).AT.ATIndex = buildatindex(AO.(ifam).FamilyName, Indices.PX2C);
76        AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex(:,1))';
77    end
78   
79catch err
80    warning('MML:wrongfamily', 'Corrector family %s not found in the model.',ifam);
81    fprintf('Message: %s\n', err.message);
82end
83
84
85%% QUADRUPOLES
86try
87    for k = 1:6,
88        ifam = ['QP' num2str(k)];
89        if(k==5), ifam = 'QP31'; end;
90        if(k==6), ifam = 'QP41'; end;
91        AO.(ifam).AT.ATType = 'QUAD';
92        AO.(ifam).AT.ATIndex = buildatindex(AO.(ifam).FamilyName, Indices.(ifam));
93        AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex(:,1))';
94    end
95    ifam = 'Qall';
96    AO.(ifam).AT.ATType = 'QUAD';
97    AO.(ifam).AT.ATIndex = [AO.QP1.AT.ATIndex; AO.QP2.AT.ATIndex; AO.QP3.AT.ATIndex; AO.QP31.AT.ATIndex; AO.QP41.AT.ATIndex;AO.QP4.AT.ATIndex];
98    AO.(ifam).Position = [AO.QP1.Position; AO.QP2.Position; AO.QP3.Position; AO.QP31.Position; AO.QP41.Position;AO.QP4.Position];
99   
100    ifam = 'Qall';
101    %sort all s-position, mandatory for plotfamily
102    [t idx] = sort(AO.(ifam).Position);
103    AO.(ifam).Position = AO.(ifam).Position(idx);
104    AO.(ifam).Setpoint.TangoNames = AO.(ifam).Setpoint.TangoNames(idx);
105    AO.(ifam).Monitor.TangoNames = AO.(ifam).Monitor.TangoNames(idx);
106    AO.(ifam).DeviceName = AO.(ifam).DeviceName(idx);
107    AO.(ifam).Status = AO.(ifam).Status(idx);
108catch err
109    warning('MML:wrongfamily', '%s family not found in the model.',ifam);
110    fprintf('Message: %s\n', err.message);
111end
112
113%% SEXTUPOLES
114try
115    for k = 1:3,
116        ifam = ['SX' num2str(k)];
117        AO.(ifam).AT.ATType = 'SEXT';
118        AO.(ifam).AT.ATIndex = buildatindex(AO.(ifam).FamilyName, Indices.(ifam));
119        AO.(ifam).Position = findspos(THERING, AO.(ifam).AT.ATIndex(:,1))';
120    %    AO.(ifam).AT.ATParameterGroup{1} = mkparamgroup(THERING,AO.(ifam).AT.ATIndex,'K2');
121    end
122    ifam = 'Sall'; % take first element
123    AO.(ifam).Position = [AO.SX1.Position(1); AO.SX2.Position(1); ...
124        AO.SX3.Position(1)];
125   
126%     ifam = 'Sall';
127    %sort all s-position, mandatory for plotfamily
128    % Does not work for indivual sextupoles
129%     [t idx] = sort(AO.(ifam).Position);
130%     AO.(ifam).Position = AO.(ifam).Position(idx);
131%     AO.(ifam).Setpoint.TangoNames = AO.(ifam).Setpoint.TangoNames(idx);
132%     AO.(ifam).Monitor.TangoNames = AO.(ifam).Monitor.TangoNames(idx);
133%     AO.(ifam).DeviceName = AO.(ifam).DeviceName(idx);
134%     AO.(ifam).Status = AO.(ifam).Status(idx);
135catch err
136    warning('MML:wrongfamily', 'Sextupole %s families not found in the model.', ifam);
137    fprintf('Message: %s\n', err.message);
138end
139
140
141%% BEND
142
143try
144    % Combined BEND   
145    AO.BEND.AT.ATType = 'BEND';
146    ATIndex = Indices.BEND(:);
147    AO.BEND.AT.ATIndex = buildatindex(AO.BEND.FamilyName, sort(ATIndex));
148    AO.BEND.Position = findspos(THERING, AO.BEND.AT.ATIndex(:,1))';
149catch err
150    warning('MML:wrongfamily', 'BEND family not found in the model.');
151    fprintf('Message: %s\n', err.message);
152end
153
154%% RF CAVITY
155try
156    AO.RF.AT.ATType = 'RF Cavity';
157    AO.RF.AT.ATIndex = findcells(THERING,'Frequency')';
158    AO.RF.Position = findspos(THERING, AO.RF.AT.ATIndex(:,1))';
159catch err
160    warning('MML:wrongfamily', 'RF cavity not found in the model.');
161    fprintf('Message: %s\n', err.message);
162end
163
164setao(AO);
165
166%% Set TwissData at the start of the storage ring
167try
168
169    % BTS twiss parameters at the input for transfer line
170    TwissData.alpha = [0 0]';
171    TwissData.beta  = [3.7 1.803]';
172    TwissData.mu    = [0 0]';
173    TwissData.ClosedOrbit = [0 0 0 0]';
174    TwissData.dP = 0;
175    TwissData.dL = 0;
176    TwissData.Dispersion  = [.01 0 0 0]';
177
178    setpvmodel('TwissData', '', TwissData);  % Same as, THERING{1}.TwissData = TwissData;
179
180catch err
181    warning('MML:wrongfamily','Setting the twiss data parameters in the MML failed.');
182    fprintf('Message: %s\n', err.message);
183end
Note: See TracBrowser for help on using the repository browser.