BmnRoot
Loading...
Searching...
No Matches
BmnProfRawTools.cxx
Go to the documentation of this file.
1/*
2 *
3 * Author: Yulia Topko
4 */
5
6#include "BmnProfRawTools.h"
7//-------------------------------
8//------ functions
9//-------------------------------
10
12 x = (x >> 24) |
13 ((x << 8) & 0x00FF0000) |
14 ((x >> 8) & 0x0000FF00) |
15 (x << 24);
16}
17
18bool BmnProfRawTools::data_or_trig(const uint32_t &word) {
19 return bool(word >> 31 & 0x1);
20}
21
22uint32_t BmnProfRawTools::holdb_cntr(const uint32_t &word) { // trigger = 14bit
23 return ((word & 0x7FFC0000) >> 18);
24}
25
26bool BmnProfRawTools::trig_psd(const uint32_t &word) {
27 return bool((word & 0x7F800000) == 0x55000000);
28}
29
30bool BmnProfRawTools::trig_nsd(const uint32_t &word) {
31 return bool((word & 0x7F800000) == 0x55800000);
32}
33
34uint32_t BmnProfRawTools::trig_cntr(const uint32_t &word) {
35 return (word & 0x7FFFFF);
36}
37
38bool BmnProfRawTools::adc_num(const bitset<32> &word) {
39 return word[17];
40}
41
42bool BmnProfRawTools::adc_num(const uint32_t &word) {
43 return word & (1 << 17);
44}
45
46bool BmnProfRawTools::fco(const bitset<32> &word) {
47 return word[16];
48}
49
50bool BmnProfRawTools::fco(const uint32_t &word) {
51 return word & (1 << 16);
52}
53
54int BmnProfRawTools::adc_ch(vector<bitset < 32 >> &adc_word, char channel_name) {
55 bitset<12> result;
56 map<char, size_t> offsets{
57 {'A', 0},
58 {'B', 2},
59 {'C', 4},
60 {'D', 6},
61 {'E', 8},
62 {'F', 10},
63 {'G', 12},
64 {'H', 14}};
65 for (size_t i = 0; i < 12; i++) {
66 result[11 - i] = adc_word[i / 2][i % 2 + offsets[channel_name]];
67 }
68 return static_cast<int> (result.to_ulong()) - 0x800;
69 // return result.to_ulong();
70}
71
72int BmnProfRawTools::adc_ch(vector<bitset < 32 >> &adc_word, size_t start_index, char channel_name) {
73 unsigned int result = 0;
74 map<char, size_t> offsets{
75 {'A', 0},
76 {'B', 2},
77 {'C', 4},
78 {'D', 6},
79 {'E', 8},
80 {'F', 10},
81 {'G', 12},
82 {'H', 14}};
83 for (size_t i = 0; i < 6; i++) {
84 result += ((adc_word[start_index + i] >> offsets[channel_name])[0]) << (10 - 2 * i + 1);
85 result += ((adc_word[start_index + i] >> (offsets[channel_name] + 1))[0]) << (10 - 2 * i);
86 }
87 return static_cast<int> (result - 0x800);
88}
89
90//int BmnProfRawTools::adc_ch(vector<uint32_t> &adc_word, size_t start_index, char channel_name) {
91// uint32_t result = 0;
92// map<char, size_t> offsets{
93// {'A', 0},
94// {'B', 2},
95// {'C', 4},
96// {'D', 6},
97// {'E', 8},
98// {'F', 10},
99// {'G', 12},
100// {'H', 14}};
101// for (size_t i = 0; i < 6; i++) {
102// result += ((adc_word[start_index + i] >> offsets[channel_name]) & 1) << (10 - 2 * i + 1);
103// result += ((adc_word[start_index + i] >> offsets[channel_name] + 1) & 1) << (10 - 2 * i);
104// }
105// return result - 0x800;
106// // return result.to_ulong();
107//}
108
109
110
111
112
113//---------------------------------------------------
114// Tracker detector 128x128 strip mapping
115// Y - n+ readout card 3 and 4
116// X - p+ readout card 1 and 2
117// Readout card #1 (X - p+ strips 1-64 ) ADC channel-E.
118// Readout card #2 (X - p+ strips 65-128) ADC channel-F.
119// Readout card #3 (Y - n+ strips 65-128) ADC channel-G.
120// Readout card #4 (Y - n+ strips 1-64 ) ADC channel-H.
121//---------------------------------------------------
122//---- beam_tracker_map
123
124vector<int> BmnProfRawTools::beam_tracker_map(vector<int> &vec, char adc_channel) {
125 vector<int> res(64 * sizeof (int));
126
127 switch (adc_channel) {
128 case 'E': res = tracker_X1_chE(vec);
129 break;
130 case 'F': res = tracker_X2_chF(vec);
131 break;
132 case 'G': res = tracker_Y1_chH(vec);
133 break;
134 case 'H': res = tracker_Y2_chG(vec);
135 break;
136 }
137 return res; //never reach
138}
139
140//---- tracker_X1_chE
141
142vector<int> BmnProfRawTools::tracker_X1_chE(vector<int> &vec) {
143 if (vec.size() != 64)
144 cout << "E: tracker_X1_chE.size() is not 64!" << endl;
145
146 vector<int> tracker_X1(64);
147
148 tracker_X1[0] = vec[61];
149 tracker_X1[1] = vec[61];
150 tracker_X1[2] = vec[61];
151 tracker_X1[3] = vec[61];
152 tracker_X1[4] = vec[61];
153 tracker_X1[5] = vec[62];
154 tracker_X1[6] = vec[60];
155 tracker_X1[7] = vec[58];
156 tracker_X1[8] = vec[59];
157 tracker_X1[9] = vec[57];
158 tracker_X1[10] = vec[55];
159 tracker_X1[11] = vec[56];
160 tracker_X1[12] = vec[54];
161 tracker_X1[13] = vec[52];
162 tracker_X1[14] = vec[53];
163 tracker_X1[15] = vec[51];
164 tracker_X1[16] = vec[49];
165 tracker_X1[17] = vec[50];
166 tracker_X1[18] = vec[48];
167 tracker_X1[19] = vec[46];
168 tracker_X1[20] = vec[47];
169 tracker_X1[21] = vec[45];
170 tracker_X1[22] = vec[43];
171 tracker_X1[23] = vec[44];
172 tracker_X1[24] = vec[42];
173 tracker_X1[25] = vec[40];
174 tracker_X1[26] = vec[41];
175 tracker_X1[27] = vec[39];
176 tracker_X1[28] = vec[37];
177 tracker_X1[29] = vec[38];
178 tracker_X1[30] = vec[36];
179 tracker_X1[31] = vec[34];
180 tracker_X1[32] = vec[35];
181 tracker_X1[33] = vec[33];
182 tracker_X1[34] = vec[31];
183 tracker_X1[35] = vec[32];
184 tracker_X1[36] = vec[30];
185 tracker_X1[37] = vec[28];
186 tracker_X1[38] = vec[29];
187 tracker_X1[39] = vec[27];
188 tracker_X1[40] = vec[25];
189 tracker_X1[41] = vec[26];
190 tracker_X1[42] = vec[24];
191 tracker_X1[43] = vec[22];
192 tracker_X1[44] = vec[23];
193 tracker_X1[45] = vec[21];
194 tracker_X1[46] = vec[19];
195 tracker_X1[47] = vec[20];
196 tracker_X1[48] = vec[18];
197 tracker_X1[49] = vec[16];
198 tracker_X1[50] = vec[17];
199 tracker_X1[51] = vec[15];
200 tracker_X1[52] = vec[13];
201 tracker_X1[53] = vec[14];
202 tracker_X1[54] = vec[12];
203 tracker_X1[55] = vec[10];
204 tracker_X1[56] = vec[11];
205 tracker_X1[57] = vec[9];
206 tracker_X1[58] = vec[7];
207 tracker_X1[59] = vec[8];
208 tracker_X1[60] = vec[6];
209 tracker_X1[61] = vec[4];
210 tracker_X1[62] = vec[5];
211 tracker_X1[63] = vec[3];
212 // ok = vec[63];
213 // test = vec[0], vec[1], vec[2]
214 return tracker_X1;
215}
216
217//---- tracker_X2_chF
218
219vector<int> BmnProfRawTools::tracker_X2_chF(vector<int> &vec) {
220 if (vec.size() != 64)
221 cout << "E: tracker_X2_chF.size() is not 64!" << endl;
222
223 vector<int> tracker_X2(64);
224
225 tracker_X2[0] = vec[3];
226 tracker_X2[1] = vec[4];
227 tracker_X2[2] = vec[5];
228 tracker_X2[3] = vec[6];
229 tracker_X2[4] = vec[7];
230 tracker_X2[5] = vec[8];
231 tracker_X2[6] = vec[9];
232 tracker_X2[7] = vec[10];
233 tracker_X2[8] = vec[11];
234 tracker_X2[9] = vec[12];
235 tracker_X2[10] = vec[13];
236 tracker_X2[11] = vec[14];
237 tracker_X2[12] = vec[15];
238 tracker_X2[13] = vec[16];
239 tracker_X2[14] = vec[17];
240 tracker_X2[15] = vec[18];
241 tracker_X2[16] = vec[19];
242 tracker_X2[17] = vec[20];
243 tracker_X2[18] = vec[21];
244 tracker_X2[19] = vec[22];
245 tracker_X2[20] = vec[23];
246 tracker_X2[21] = vec[24];
247 tracker_X2[22] = vec[25];
248 tracker_X2[23] = vec[26];
249 tracker_X2[24] = vec[27];
250 tracker_X2[25] = vec[28];
251 tracker_X2[26] = vec[29];
252 tracker_X2[27] = vec[30];
253 tracker_X2[28] = vec[31];
254 tracker_X2[29] = vec[32];
255 tracker_X2[30] = vec[33];
256 tracker_X2[31] = vec[34];
257 tracker_X2[32] = vec[35];
258 tracker_X2[33] = vec[36];
259 tracker_X2[34] = vec[37];
260 tracker_X2[35] = vec[38];
261 tracker_X2[36] = vec[39];
262 tracker_X2[37] = vec[40];
263 tracker_X2[38] = vec[41];
264 tracker_X2[39] = vec[42];
265 tracker_X2[40] = vec[43];
266 tracker_X2[41] = vec[44];
267 tracker_X2[42] = vec[45];
268 tracker_X2[43] = vec[46];
269 tracker_X2[44] = vec[47];
270 tracker_X2[45] = vec[48];
271 tracker_X2[46] = vec[49];
272 tracker_X2[47] = vec[50];
273 tracker_X2[48] = vec[51];
274 tracker_X2[49] = vec[52];
275 tracker_X2[50] = vec[53];
276 tracker_X2[51] = vec[54];
277 tracker_X2[52] = vec[55];
278 tracker_X2[53] = vec[56];
279 tracker_X2[54] = vec[57];
280 tracker_X2[55] = vec[58];
281 tracker_X2[56] = vec[59];
282 tracker_X2[57] = vec[60];
283 tracker_X2[58] = vec[61];
284 tracker_X2[59] = vec[62];
285 tracker_X2[60] = vec[63];
286 tracker_X2[61] = vec[63];
287 tracker_X2[62] = vec[63];
288 tracker_X2[63] = vec[63];
289 // test = vec[0], vec[1], vec[2]
290 return tracker_X2;
291}
292
293//----- tracker_Y1_chH
294
295vector<int> BmnProfRawTools::tracker_Y1_chH(vector<int> &vec) {
296 if (vec.size() != 64)
297 cout << "E: tracker_Y1_chH.size() is not 64!" << endl;
298
299 vector<int> tracker_Y1(64);
300 tracker_Y1[0] = vec[63];
301 tracker_Y1[1] = vec[63];
302 tracker_Y1[2] = vec[63];
303 tracker_Y1[3] = vec[63];
304 tracker_Y1[4] = vec[61];
305 tracker_Y1[5] = vec[62];
306 tracker_Y1[6] = vec[60];
307 tracker_Y1[7] = vec[58];
308 tracker_Y1[8] = vec[59];
309 tracker_Y1[9] = vec[57];
310 tracker_Y1[10] = vec[55];
311 tracker_Y1[11] = vec[56];
312 tracker_Y1[12] = vec[54];
313 tracker_Y1[13] = vec[52];
314 tracker_Y1[14] = vec[53];
315 tracker_Y1[15] = vec[51];
316 tracker_Y1[16] = vec[49];
317 tracker_Y1[17] = vec[50];
318 tracker_Y1[18] = vec[48];
319 tracker_Y1[19] = vec[46];
320 tracker_Y1[20] = vec[47];
321 tracker_Y1[21] = vec[45];
322 tracker_Y1[22] = vec[43];
323 tracker_Y1[23] = vec[44];
324 tracker_Y1[24] = vec[42];
325 tracker_Y1[25] = vec[40];
326 tracker_Y1[26] = vec[41];
327 tracker_Y1[27] = vec[39];
328 tracker_Y1[28] = vec[37];
329 tracker_Y1[29] = vec[38];
330 tracker_Y1[30] = vec[36];
331 tracker_Y1[31] = vec[34];
332 tracker_Y1[32] = vec[35];
333 tracker_Y1[33] = vec[33];
334 tracker_Y1[34] = vec[31];
335 tracker_Y1[35] = vec[32];
336 tracker_Y1[36] = vec[30];
337 tracker_Y1[37] = vec[28];
338 tracker_Y1[38] = vec[29];
339 tracker_Y1[39] = vec[27];
340 tracker_Y1[40] = vec[25];
341 tracker_Y1[41] = vec[26];
342 tracker_Y1[42] = vec[24];
343 tracker_Y1[43] = vec[22];
344 tracker_Y1[44] = vec[23];
345 tracker_Y1[45] = vec[21];
346 tracker_Y1[46] = vec[19];
347 tracker_Y1[47] = vec[20];
348 tracker_Y1[48] = vec[18];
349 tracker_Y1[49] = vec[16];
350 tracker_Y1[50] = vec[17];
351 tracker_Y1[51] = vec[15];
352 tracker_Y1[52] = vec[13];
353 tracker_Y1[53] = vec[14];
354 tracker_Y1[54] = vec[12];
355 tracker_Y1[55] = vec[10];
356 tracker_Y1[56] = vec[11];
357 tracker_Y1[57] = vec[9];
358 tracker_Y1[58] = vec[7];
359 tracker_Y1[59] = vec[8];
360 tracker_Y1[60] = vec[6];
361 tracker_Y1[61] = vec[4];
362 tracker_Y1[62] = vec[5];
363 tracker_Y1[63] = vec[3];
364 // test = vec[0],vec[1], vec[2]; goto test_tracker_Y1
365 return tracker_Y1;
366}
367
368//----- tracker_Y2_chG
369
370vector<int> BmnProfRawTools::tracker_Y2_chG(vector<int> &vec) {
371 if (vec.size() != 64)
372 cout << "E: tracker_Y2_chG.size() is not 64!" << endl;
373
374 vector<int> tracker_Y2(64);
375
376 tracker_Y2[0] = vec[63];
377 tracker_Y2[1] = vec[62];
378 tracker_Y2[2] = vec[61];
379 tracker_Y2[3] = vec[60];
380 tracker_Y2[4] = vec[59];
381 tracker_Y2[5] = vec[58];
382 tracker_Y2[6] = vec[57];
383 tracker_Y2[7] = vec[56];
384 tracker_Y2[8] = vec[55];
385 tracker_Y2[9] = vec[54];
386 tracker_Y2[10] = vec[53];
387 tracker_Y2[11] = vec[52];
388 tracker_Y2[12] = vec[51];
389 tracker_Y2[13] = vec[50];
390 tracker_Y2[14] = vec[49];
391 tracker_Y2[15] = vec[48];
392 tracker_Y2[16] = vec[47];
393 tracker_Y2[17] = vec[46];
394 tracker_Y2[18] = vec[45];
395 tracker_Y2[19] = vec[44];
396 tracker_Y2[20] = vec[43];
397 tracker_Y2[21] = vec[42];
398 tracker_Y2[22] = vec[41];
399 tracker_Y2[23] = vec[40];
400 tracker_Y2[24] = vec[39];
401 tracker_Y2[25] = vec[38];
402 tracker_Y2[26] = vec[37];
403 tracker_Y2[27] = vec[36];
404 tracker_Y2[28] = vec[35];
405 tracker_Y2[29] = vec[34];
406 tracker_Y2[30] = vec[33];
407 tracker_Y2[31] = vec[32];
408 tracker_Y2[32] = vec[31];
409 tracker_Y2[33] = vec[30];
410 tracker_Y2[34] = vec[29];
411 tracker_Y2[35] = vec[28];
412 tracker_Y2[36] = vec[27];
413 tracker_Y2[37] = vec[26];
414 tracker_Y2[38] = vec[25];
415 tracker_Y2[39] = vec[24];
416 tracker_Y2[40] = vec[23];
417 tracker_Y2[41] = vec[22];
418 tracker_Y2[42] = vec[21];
419 tracker_Y2[43] = vec[20];
420 tracker_Y2[44] = vec[19];
421 tracker_Y2[45] = vec[18];
422 tracker_Y2[46] = vec[17];
423 tracker_Y2[47] = vec[16];
424 tracker_Y2[48] = vec[15];
425 tracker_Y2[49] = vec[14];
426 tracker_Y2[50] = vec[13];
427 tracker_Y2[51] = vec[12];
428 tracker_Y2[52] = vec[11];
429 tracker_Y2[53] = vec[10];
430 tracker_Y2[54] = vec[9];
431 tracker_Y2[55] = vec[8];
432 tracker_Y2[56] = vec[7];
433 tracker_Y2[57] = vec[6];
434 tracker_Y2[58] = vec[5];
435 tracker_Y2[59] = vec[4];
436 tracker_Y2[60] = vec[3];
437 tracker_Y2[61] = vec[3];
438 tracker_Y2[62] = vec[3];
439 tracker_Y2[63] = vec[3];
440 // test vec[0], vec[1], vec[2]
441 return tracker_Y2;
442}
443
444//----- tracker_test_signal
445
446vector<int> BmnProfRawTools::tracker_tst_sgnl(vector<int> &chE, vector<int> &chF,
447 vector<int> &chH, vector<int> &chG) {
448 vector<int> tst_sgnl(4 * 3);
449
450 tst_sgnl[0] = chE[0];
451 tst_sgnl[1] = chE[1];
452 tst_sgnl[2] = chE[2];
453 tst_sgnl[3] = chF[0];
454 tst_sgnl[4] = chF[1];
455 tst_sgnl[5] = chF[2];
456 tst_sgnl[6] = chH[0];
457 tst_sgnl[7] = chH[1];
458 tst_sgnl[8] = chH[2];
459 tst_sgnl[9] = chG[0];
460 tst_sgnl[10] = chG[1];
461 tst_sgnl[11] = chG[2];
462
463 return tst_sgnl;
464}
465
int i
Definition P4_F32vec4.h:22
static bool data_or_trig(const uint32_t &word)
static bool trig_nsd(const uint32_t &word)
static vector< int > tracker_X2_chF(vector< int > &vec)
static vector< int > beam_tracker_map(vector< int > &vec, char adc_channel)
static bool fco(const bitset< 32 > &word)
static vector< int > tracker_tst_sgnl(vector< int > &chE, vector< int > &chF, vector< int > &chH, vector< int > &chG)
static uint32_t holdb_cntr(const uint32_t &word)
static int adc_ch(vector< bitset< 32 > > &adc_word, char channel_name)
static vector< int > tracker_X1_chE(vector< int > &vec)
static vector< int > tracker_Y2_chG(vector< int > &vec)
static uint32_t trig_cntr(const uint32_t &word)
static bool trig_psd(const uint32_t &word)
static vector< int > tracker_Y1_chH(vector< int > &vec)
static bool adc_num(const bitset< 32 > &word)
static void endian_swap(uint32_t &x)