1 | function [Quadstruct] = bpm2quad4bba(BPMFamily, BPMDev, LocationFlag) |
---|
2 | %BPM2QUAD - Returns the nearest quadrupole to the specified BPM |
---|
3 | % [QUADFamily, QUADDeviceList, DeltaSpos, PhaseAdvance] = bpm2quad(BPMFamily, BPMDeviceList, LocationFlag) |
---|
4 | % |
---|
5 | % INPUTS |
---|
6 | % 1. BPMFamily - BPM family (1 family only (row string)) |
---|
7 | % 2. BPMDeviceList - BPM device list |
---|
8 | % 3. LocationFlag - Only search quadrupole positions that are 'UpStream' or 'DownStream' {Default for transport lines} |
---|
9 | % of the BPM. Else no location preference is used {Default for rings}. |
---|
10 | % |
---|
11 | % OUTPUTS |
---|
12 | % 1. QUADFamily |
---|
13 | % 2. QUADDeviceList |
---|
14 | % 3. DeltaSpos - Distance from the BPM to the Quad |
---|
15 | % |
---|
16 | % See Also quad2bpm |
---|
17 | |
---|
18 | % |
---|
19 | % Written by Laurent S. Nadolski |
---|
20 | |
---|
21 | % List device list of BBA BPM sharing same quad |
---|
22 | |
---|
23 | BPM4Q4Q5DevList=[ |
---|
24 | 1 4 |
---|
25 | 4 4 |
---|
26 | 5 4 |
---|
27 | 8 4 |
---|
28 | 9 4 |
---|
29 | 12 4 |
---|
30 | 13 4 |
---|
31 | 16 4 |
---|
32 | ]; |
---|
33 | |
---|
34 | BPM4Q10DevList =[ |
---|
35 | 2 4 |
---|
36 | 2 7 |
---|
37 | 3 4 |
---|
38 | 3 7 |
---|
39 | 6 4 |
---|
40 | 6 7 |
---|
41 | 7 4 |
---|
42 | 7 7 |
---|
43 | 10 4 |
---|
44 | 10 7 |
---|
45 | 11 4 |
---|
46 | 11 7 |
---|
47 | 14 4 |
---|
48 | 14 7 |
---|
49 | 15 4 |
---|
50 | 15 7 |
---|
51 | ]; |
---|
52 | |
---|
53 | BPM4Q12DevList =[ |
---|
54 | 13 8 |
---|
55 | 13 9 |
---|
56 | ]; |
---|
57 | |
---|
58 | if nargin < 1 |
---|
59 | BPMFamily = []; |
---|
60 | end |
---|
61 | if isempty(BPMFamily) |
---|
62 | BPMFamily = gethbpmfamily; |
---|
63 | end |
---|
64 | |
---|
65 | if nargin < 2 |
---|
66 | BPMDev = []; |
---|
67 | end |
---|
68 | if isempty(BPMFamily) |
---|
69 | BPMDev = family2dev(BPMFamily); |
---|
70 | BPMDev = BPMDev(1,:); |
---|
71 | end |
---|
72 | |
---|
73 | if nargin < 3 |
---|
74 | LocationFlag = ''; |
---|
75 | end |
---|
76 | if isempty(LocationFlag) |
---|
77 | if any(strcmpi(getfamilydata('MachineType'), {'Transport','Transportline','Linac'})) |
---|
78 | LocationFlag = 'UpStream'; |
---|
79 | else |
---|
80 | LocationFlag = 'Any'; |
---|
81 | end |
---|
82 | end |
---|
83 | |
---|
84 | |
---|
85 | % Get all the quad families |
---|
86 | QUADFamilyList = getfamilylist; |
---|
87 | [tmp, i] = ismemberof(QUADFamilyList, 'QUAD'); |
---|
88 | if ~isempty(i) |
---|
89 | QUADFamilyList = QUADFamilyList(i,:); |
---|
90 | else |
---|
91 | QUADFamilyList = ['QF','QD']; |
---|
92 | end |
---|
93 | |
---|
94 | |
---|
95 | % Find the Quad next to the BPM |
---|
96 | |
---|
97 | % BPMdev Quad1Fam Quad1dev Quad2 Quad2dev |
---|
98 | % Question: Special field to add to SOLEILinit? |
---|
99 | % Example: BPM.BBA |
---|
100 | |
---|
101 | Idx = dev2elem('BPMx', BPMDev); |
---|
102 | |
---|
103 | varlist = { |
---|
104 | [ 1 2] 'Q1 ' [ 1 1] '' [] |
---|
105 | [ 1 3] 'Q2 ' [ 1 1] 'Q3 ' [1 1] |
---|
106 | [ 1 4] 'Q4 ' [ 1 1] 'Q5 ' [1 1] |
---|
107 | [ 1 5] 'Q5 ' [ 1 2] '' [] |
---|
108 | [ 1 6] 'Q4 ' [ 1 2] '' [] |
---|
109 | [ 1 7] 'Q6 ' [ 1 1] 'Q7' [1 1] |
---|
110 | [ 2 1] 'Q8 ' [ 1 1] '' [] |
---|
111 | [ 2 2] 'Q8 ' [ 2 1] '' [] |
---|
112 | [ 2 3] 'Q7 ' [ 2 1] 'Q6' [2 1] |
---|
113 | [ 2 4] 'Q9 ' [ 2 1] '' [] |
---|
114 | [ 2 5] 'Q10' [ 2 1] '' [] |
---|
115 | [ 2 6] 'Q10' [ 2 2] '' [] |
---|
116 | [ 2 7] 'Q9 ' [ 2 2] '' [] |
---|
117 | [ 2 8] 'Q6 ' [ 2 2] 'Q7' [2 2] |
---|
118 | [ 3 1] 'Q8 ' [ 2 2] '' [] |
---|
119 | [ 3 2] 'Q8 ' [ 3 1] '' [] |
---|
120 | [ 3 3] 'Q7 ' [ 3 1] 'Q6' [3 1] |
---|
121 | [ 3 4] 'Q9 ' [ 3 1] '' [] |
---|
122 | [ 3 5] 'Q10' [ 3 1] '' [] |
---|
123 | [ 3 6] 'Q10' [ 3 2] '' [] |
---|
124 | [ 3 7] 'Q9 ' [ 3 2] '' [] |
---|
125 | [ 3 8] 'Q6 ' [ 3 2] 'Q7' [3 2] |
---|
126 | [ 4 1] 'Q8 ' [ 3 2] '' [] |
---|
127 | [ 4 2] 'Q8 ' [ 4 1] '' [] |
---|
128 | [ 4 3] 'Q7 ' [ 4 1] 'Q6 ' [4 1] |
---|
129 | [ 4 4] 'Q4 ' [ 4 1] 'Q5 ' [4 1] |
---|
130 | [ 4 5] 'Q5 ' [ 4 2] '' [] |
---|
131 | [ 4 6] 'Q4 ' [ 4 2] '' [] |
---|
132 | [ 4 7] 'Q3 ' [ 4 1] 'Q2' [4 1] |
---|
133 | [ 5 1] 'Q1 ' [ 4 1] '' [] |
---|
134 | [ 5 2] 'Q1 ' [ 5 1] '' [] |
---|
135 | [ 5 3] 'Q2 ' [ 5 1] 'Q3 ' [5 1] |
---|
136 | [ 5 4] 'Q4 ' [ 5 1] 'Q5 ' [5 1] |
---|
137 | [ 5 5] 'Q5 ' [ 5 2] '' [] |
---|
138 | [ 5 6] 'Q4 ' [ 5 2] '' [] |
---|
139 | [ 5 7] 'Q6 ' [ 5 1] 'Q7' [5 1] |
---|
140 | [ 6 1] 'Q8 ' [ 5 1] '' [] |
---|
141 | [ 6 2] 'Q8 ' [ 6 1] '' [] |
---|
142 | [ 6 3] 'Q7 ' [ 6 1] 'Q6' [6 1] |
---|
143 | [ 6 4] 'Q9 ' [ 6 1] '' [] |
---|
144 | [ 6 5] 'Q10' [ 6 1] '' [] |
---|
145 | [ 6 6] 'Q10' [ 6 2] '' [] |
---|
146 | [ 6 7] 'Q9 ' [ 6 2] '' [] |
---|
147 | [ 6 8] 'Q6 ' [ 6 2] 'Q7' [6 2] |
---|
148 | [ 7 1] 'Q8 ' [ 6 2] '' [] |
---|
149 | [ 7 2] 'Q8 ' [ 7 1] '' [] |
---|
150 | [ 7 3] 'Q7 ' [ 7 1] 'Q6' [7 1] |
---|
151 | [ 7 4] 'Q9 ' [ 7 1] '' [] |
---|
152 | [ 7 5] 'Q10' [ 7 1] '' [] |
---|
153 | [ 7 6] 'Q10' [ 7 2] '' [] |
---|
154 | [ 7 7] 'Q9 ' [ 7 2] '' [] |
---|
155 | [ 7 8] 'Q6 ' [ 7 2] 'Q7' [7 2] |
---|
156 | [ 8 1] 'Q8 ' [ 7 2] '' [] |
---|
157 | [ 8 2] 'Q8 ' [ 8 1] '' [] |
---|
158 | [ 8 3] 'Q7 ' [ 8 1] 'Q6 ' [8 1] |
---|
159 | [ 8 4] 'Q4 ' [ 8 1] 'Q5 ' [8 1] |
---|
160 | [ 8 5] 'Q5 ' [ 8 2] '' [] |
---|
161 | [ 8 6] 'Q4 ' [ 8 2] '' [] |
---|
162 | [ 8 7] 'Q3 ' [ 8 1] 'Q2' [8 1] |
---|
163 | [ 9 1] 'Q1 ' [ 8 1] '' [] |
---|
164 | [ 9 2] 'Q1 ' [ 9 1] '' [] |
---|
165 | [ 9 3] 'Q2 ' [ 9 1] 'Q3 ' [9 1] |
---|
166 | [ 9 4] 'Q4 ' [ 9 1] 'Q5 ' [9 1] |
---|
167 | [ 9 5] 'Q5 ' [ 9 2] '' [] |
---|
168 | [ 9 6] 'Q4 ' [ 9 2] '' [] |
---|
169 | [ 9 7] 'Q6 ' [ 9 1] 'Q7' [9 1] |
---|
170 | [10 1] 'Q8 ' [ 9 1] '' [] |
---|
171 | [10 2] 'Q8 ' [10 1] '' [] |
---|
172 | [10 3] 'Q7 ' [10 1] 'Q6' [10 1] |
---|
173 | [10 4] 'Q9 ' [10 1] '' [] |
---|
174 | [10 5] 'Q10' [10 1] '' [] |
---|
175 | [10 6] 'Q10' [10 2] '' [] |
---|
176 | [10 7] 'Q9 ' [10 2] '' [] |
---|
177 | [10 8] 'Q6 ' [10 2] 'Q7' [10 2] |
---|
178 | [11 1] 'Q8 ' [10 2] '' [] |
---|
179 | [11 2] 'Q8 ' [11 1] '' [] |
---|
180 | [11 3] 'Q7 ' [11 1] 'Q6' [11 1] |
---|
181 | [11 4] 'Q9 ' [11 1] '' [] |
---|
182 | [11 5] 'Q10' [11 1] '' [] |
---|
183 | [11 6] 'Q10' [11 2] '' [] |
---|
184 | [11 7] 'Q9 ' [11 2] '' [] |
---|
185 | [11 8] 'Q6 ' [11 2] 'Q7' [11 2] |
---|
186 | [12 1] 'Q8 ' [11 2] '' [] |
---|
187 | [12 2] 'Q8 ' [12 1] '' [] |
---|
188 | [12 3] 'Q7 ' [12 1] 'Q6 ' [12 1] |
---|
189 | [12 4] 'Q4 ' [12 1] 'Q5 ' [12 1] |
---|
190 | [12 5] 'Q5 ' [12 2] '' [] |
---|
191 | [12 6] 'Q4 ' [12 2] '' [] |
---|
192 | [12 7] 'Q3 ' [12 1] 'Q2' [12 1] |
---|
193 | [13 1] 'Q1 ' [12 1] '' [] |
---|
194 | [13 8] 'Q11' [13 1] '' [] |
---|
195 | [13 9] 'Q12' [13 1] 'Q11' [13 2] |
---|
196 | [13 2] 'Q1 ' [13 1] '' [] |
---|
197 | [13 3] 'Q2 ' [13 1] 'Q3 ' [13 1] |
---|
198 | [13 4] 'Q4 ' [13 1] 'Q5 ' [13 1] |
---|
199 | [13 5] 'Q5 ' [13 2] '' [] |
---|
200 | [13 6] 'Q4 ' [13 2] '' [] |
---|
201 | [13 7] 'Q6 ' [13 1] 'Q7' [13 1] |
---|
202 | [14 1] 'Q8 ' [13 1] '' [] |
---|
203 | [14 2] 'Q8 ' [14 1] '' [] |
---|
204 | [14 3] 'Q7 ' [14 1] 'Q6' [14 1] |
---|
205 | [14 4] 'Q9 ' [14 1] '' [] |
---|
206 | [14 5] 'Q10' [14 1] '' [] |
---|
207 | [14 6] 'Q10' [14 2] '' [] |
---|
208 | [14 7] 'Q9 ' [14 2] '' [] |
---|
209 | [14 8] 'Q6 ' [14 2] 'Q7' [14 2] |
---|
210 | [15 1] 'Q8 ' [14 2] '' [] |
---|
211 | [15 2] 'Q8 ' [15 1] '' [] |
---|
212 | [15 3] 'Q7 ' [15 1] 'Q6' [15 1] |
---|
213 | [15 4] 'Q9 ' [15 1] '' [] |
---|
214 | [15 5] 'Q10' [15 1] '' [] |
---|
215 | [15 6] 'Q10' [15 2] '' [] |
---|
216 | [15 7] 'Q9 ' [15 2] '' [] |
---|
217 | [15 8] 'Q6 ' [15 2] 'Q7' [15 2] |
---|
218 | [16 1] 'Q8 ' [15 2] '' [] |
---|
219 | [16 2] 'Q8 ' [16 1] '' [] |
---|
220 | [16 3] 'Q7 ' [16 1] 'Q6 ' [16 1] |
---|
221 | [16 4] 'Q4 ' [16 1] 'Q5 ' [16 1] |
---|
222 | [16 5] 'Q5 ' [16 2] '' [] |
---|
223 | [16 6] 'Q4 ' [16 2] '' [] |
---|
224 | [16 7] 'Q3 ' [16 1] 'Q2' [16 1] |
---|
225 | [ 1 1] 'Q1 ' [16 1] '' [] |
---|
226 | }; |
---|
227 | |
---|
228 | % rechecher avec findrowindex |
---|
229 | % idem dan getbpmbycell |
---|
230 | Idx = findrowindex(BPMDev, reshape([varlist{:,1}],[2,length([varlist{:,1}])/2])'); |
---|
231 | for k = 1:size(Idx,1) |
---|
232 | if isempty(varlist{Idx(k),4}) |
---|
233 | fprintf('BPM(%2d,%2d) %s(%2d,%2d)\n', varlist{Idx(k),1}, varlist{Idx(k),2}, varlist{Idx(k),3}); |
---|
234 | else |
---|
235 | fprintf('BPM(%2d,%2d) %s(%2d,%2d) %s(%2d,%2d)\n', varlist{Idx(k),1}, varlist{Idx(k),2}, varlist{Idx(k),3}, varlist{Idx(k),4}, varlist{Idx(k),5}); |
---|
236 | end |
---|
237 | Quadstruct(k).Family1 = deblank(varlist{Idx(k),2}); |
---|
238 | Quadstruct(k).DevList1 = varlist{Idx(k),3}; |
---|
239 | Quadstruct(k).Family2 = deblank(varlist{Idx(k),4}); |
---|
240 | Quadstruct(k).DevList2 = varlist{Idx(k),5}; |
---|
241 | end |
---|
242 | |
---|
243 | %function contructOutput(1) |
---|