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