BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
TrigMdc.cxx
Go to the documentation of this file.
1#include "TrigEvent/TrigMdc.h"
2#include <fstream>
3#include <iostream>
4#include <stdlib.h>
5using namespace std;
6
7TrigMdc::TrigMdc( const char* name ) : m_name( name ) {
8 // hit
9 m_mdchit_one = new int*[24];
10 for ( int i = 0; i < 24; i++ ) m_mdchit_one[i] = new int[256];
11 m_mdchit_sone = new int*[24];
12 for ( int i = 0; i < 24; i++ ) m_mdchit_sone[i] = new int[256];
13 m_mdchit_pre = new int*[24];
14 for ( int i = 0; i < 24; i++ ) m_mdchit_pre[i] = new int[256];
15 m_mdchit_aft = new int*[24];
16 for ( int i = 0; i < 24; i++ ) m_mdchit_aft[i] = new int[256];
17 m_mdchit_win = new uint32_t*[24];
18 for ( int i = 0; i < 24; i++ ) m_mdchit_win[i] = new uint32_t[256];
19 // tsf
20 m_mdctsf_one = new int*[6];
21 for ( int i = 0; i < 6; i++ ) m_mdctsf_one[i] = new int[256];
22 m_mdctsf_sone = new int*[6];
23 for ( int i = 0; i < 6; i++ ) m_mdctsf_sone[i] = new int[256];
24 m_mdctsf_pre = new int*[6];
25 for ( int i = 0; i < 6; i++ ) m_mdctsf_pre[i] = new int[256];
26 m_mdctsf_aft = new int*[6];
27 for ( int i = 0; i < 6; i++ ) m_mdctsf_aft[i] = new int[256];
28 m_mdctsf_win = new uint32_t*[6];
29 for ( int i = 0; i < 6; i++ ) m_mdctsf_win[i] = new uint32_t[256];
30 // ltrk
31 m_mdcltrk_one = new int[128];
32 m_mdcltrk_sone = new int[128];
33 m_mdcltrk_pre = new int[128];
34 m_mdcltrk_aft = new int[128];
35 m_mdcltrk_win = new uint32_t[128];
36 // strk
37 m_mdcstrk_one = new int[128];
38 m_mdcstrk_sone = new int[128];
39 m_mdcstrk_pre = new int[128];
40 m_mdcstrk_aft = new int[128];
41 m_mdcstrk_win = new uint32_t[128];
42 // ltrk in ltrk counter
43 m_mdcltrkc_one = new int[132];
44 m_mdcltrkc_sone = new int[132];
45 // strk in strk counter
46 m_mdcstrkc_one = new int[132];
47 m_mdcstrkc_sone = new int[132];
48 // trigger condition
49 m_mdcTrigCondi = new int[10];
50
51 filename = getenv( "TRIGEVENTROOT" );
52 filename += "/dat/trig_mdc.txt";
53 ifstream inputfile;
54 inputfile.open( filename.c_str() );
55 string data[6];
56 std::vector<uint32_t> vtmp;
57 uint32_t mark = 226;
58 for ( uint32_t i = 0; i < 6; i++ ) inputfile >> data[i];
59 for ( uint32_t j = 0; j < 4680; j++ )
60 {
61 for ( uint32_t k = 0; k < 6; k++ ) inputfile >> data[k];
62 if ( ( uint32_t( atoi( data[0].c_str() ) ) != mark ) || j == 4679 )
63 {
64 if ( j == 4679 )
65 {
66 for ( int m = 1; m < 6; m++ ) vtmp.push_back( atoi( data[m].c_str() ) );
67 }
68 typedef pair<uint32_t, vector<uint32_t>> vpair;
69 m_datamap.insert( vpair( mark, vtmp ) );
70 mark = atoi( data[0].c_str() );
71 vtmp.clear();
72 }
73 if ( ( uint32_t( atoi( data[0].c_str() ) ) == mark ) && j != 4679 )
74 {
75 for ( int l = 1; l < 6; l++ ) vtmp.push_back( atoi( data[l].c_str() ) );
76 }
77 }
78}
79
81 delete m_mdchit_one;
82 delete m_mdctsf_one;
83 delete m_mdchit_sone;
84 delete m_mdctsf_sone;
85
86 delete m_mdchit_pre;
87 // delete m_mdchit_aft;
88
89 delete m_mdcltrk_one;
90 delete m_mdcstrk_one;
91 delete m_mdcltrkc_one;
92 delete m_mdcstrkc_one;
93
94 delete m_mdcltrk_sone;
95 delete m_mdcstrk_sone;
96 delete m_mdcltrkc_sone;
97 delete m_mdcstrkc_sone;
98
99 delete m_mdcTrigCondi;
100}
101
103 // initialize
104 for ( int i = 0; i < 24; i++ )
105 for ( int j = 0; j < 256; j++ )
106 {
107 m_mdchit_one[i][j] = 0;
108 m_mdchit_sone[i][j] = 0;
109 m_mdchit_pre[i][j] = 0;
110 m_mdchit_aft[i][j] = 0;
111 m_mdchit_win[i][j] = 0;
112 if ( i < 6 )
113 {
114 m_mdctsf_one[i][j] = 0;
115 m_mdctsf_sone[i][j] = 0;
116 m_mdctsf_pre[i][j] = 0;
117 m_mdctsf_aft[i][j] = 0;
118 m_mdctsf_win[i][j] = 0;
119 }
120 }
121 for ( int k = 0; k < 132; k++ )
122 {
123 if ( k < 10 ) m_mdcTrigCondi[k] = 0;
124 m_mdcltrkc_one[k] = 0;
125 m_mdcstrkc_one[k] = 0;
126 m_mdcltrkc_sone[k] = 0;
127 m_mdcstrkc_sone[k] = 0;
128 if ( k < 128 )
129 {
130 m_mdcltrk_one[k] = 0;
131 m_mdcltrk_sone[k] = 0;
132 m_mdcltrk_pre[k] = 0;
133 m_mdcltrk_aft[k] = 0;
134 m_mdcltrk_win[k] = 0;
135
136 m_mdcstrk_one[k] = 0;
137 m_mdcstrk_sone[k] = 0;
138 m_mdcstrk_pre[k] = 0;
139 m_mdcstrk_aft[k] = 0;
140 m_mdcstrk_win[k] = 0;
141 }
142 }
143}
144
145void TrigMdc::setMdcTrigData( uint32_t boardId, uint32_t window, uint32_t datasize,
146 const uint32_t* data ) {
147 if ( datasize % window != 0 )
148 cerr << "ERROR: The data size is not completed in time windows" << endl;
149 uint32_t periods = datasize / window;
150 std::map<uint32_t, std::vector<uint32_t>>::iterator iter = m_datamap.begin();
151 for ( ; iter != m_datamap.end(); iter++ )
152 {
153 if ( iter->first != boardId ) continue;
154 std::vector<uint32_t>::iterator iter1 = iter->second.begin();
155 for ( ; iter1 != iter->second.end(); iter1 += 5 )
156 {
157 uint32_t byteId = *( iter1 + 0 ) - 1;
158 uint32_t bitId = *( iter1 + 1 );
159 int layerId = *( iter1 + 2 ) - 1;
160 int wireId = *( iter1 + 3 ) - 1;
161 uint32_t data_type = *( iter1 + 4 );
162 int seriesOne = -100;
163 bool firstSOne = true; // this is a flag of first continue "1" signals
164 bool flag_firstone( true ), flag_lastone( true ); // whether to book up or down
165 for ( uint32_t i = 0; i < window; i++ )
166 {
167 if ( layerId < 0 || wireId < 0 ) continue;
168 if ( ( iter->first ) >= 226 && ( iter->first ) <= 233 )
169 { // TKF1-8 information
170 if ( data_type == 1 )
171 { // hit
172 if ( ( data[byteId + i * periods] >> bitId ) & 1 )
173 {
174 if ( layerId >= 36 && layerId <= 39 )
175 {
176 if ( flag_firstone && ( i - seriesOne != 1 ) && ( i != 0 ) )
177 {
178 m_mdchit_pre[layerId - 16][wireId] = i + 1;
179 flag_firstone = false;
180 }
181 if ( ( ( i - seriesOne ) != 1 ) &&
182 ( m_mdchit_aft[layerId - 16][wireId] != 0 ) )
183 flag_lastone = false;
184 if ( ( flag_firstone == false ) && ( ( i - seriesOne ) == 1 ) && flag_lastone )
185 m_mdchit_aft[layerId - 16][wireId] = i + 1;
186 if ( ( ( i - seriesOne ) == 1 ) && firstSOne )
187 m_mdchit_sone[layerId - 16][wireId] += 1;
188 if ( m_mdchit_sone[layerId - 16][wireId] != 0 && ( i - seriesOne ) != 1 )
189 firstSOne = false;
190 seriesOne = i;
191 m_mdchit_one[layerId - 16][wireId] += 1;
192 m_mdchit_win[layerId - 16][wireId] += 1 << i;
193 }
194 else
195 {
196 if ( flag_firstone && ( i - seriesOne != 1 ) && ( i != 0 ) )
197 {
198 m_mdchit_pre[layerId][wireId] = i + 1;
199 flag_firstone = false;
200 }
201 if ( ( ( i - seriesOne ) != 1 ) && ( m_mdchit_aft[layerId][wireId] != 0 ) )
202 flag_lastone = false;
203 if ( ( flag_firstone == false ) && ( ( i - seriesOne ) == 1 ) && flag_lastone )
204 m_mdchit_aft[layerId][wireId] = i + 1;
205 if ( ( ( i - seriesOne ) == 1 ) && firstSOne )
206 m_mdchit_sone[layerId][wireId] += 1;
207 if ( m_mdchit_sone[layerId][wireId] != 0 && ( i - seriesOne ) != 1 )
208 firstSOne = false;
209 seriesOne = i;
210 m_mdchit_one[layerId][wireId] += 1;
211 m_mdchit_win[layerId][wireId] += 1 << i;
212 }
213 }
214 }
215 if ( data_type == 0 )
216 { // TSF
217 if ( ( data[byteId + i * periods] >> bitId ) & 1 )
218 {
219 if ( layerId == 10 )
220 {
221 if ( flag_firstone && ( i - seriesOne != 1 ) && ( i != 0 ) )
222 {
223 m_mdctsf_pre[2][wireId] = i + 1;
224 flag_firstone = false;
225 }
226 if ( ( ( i - seriesOne ) != 1 ) && ( m_mdctsf_aft[2][wireId] != 0 ) )
227 flag_lastone = false;
228 if ( ( flag_firstone == false ) && ( ( i - seriesOne ) == 1 ) && flag_lastone )
229 m_mdctsf_aft[2][wireId] = i + 1;
230
231 if ( ( i - seriesOne ) == 1 && firstSOne ) m_mdctsf_sone[2][wireId] += 1;
232 if ( m_mdctsf_sone[2][wireId] != 0 && ( i - seriesOne ) != 1 )
233 firstSOne = false;
234 seriesOne = i;
235 m_mdctsf_one[2][wireId] += 1;
236 m_mdctsf_win[2][wireId] += 1 << i;
237 }
238 if ( layerId == 14 )
239 {
240 if ( flag_firstone && ( i - seriesOne != 1 ) && ( i != 0 ) )
241 {
242 m_mdctsf_pre[3][wireId] = i + 1;
243 flag_firstone = false;
244 }
245 if ( ( ( i - seriesOne ) != 1 ) && ( m_mdctsf_aft[3][wireId] != 0 ) )
246 flag_lastone = false;
247 if ( ( flag_firstone == false ) && ( ( i - seriesOne ) == 1 ) && flag_lastone )
248 m_mdctsf_aft[3][wireId] = i + 1;
249
250 if ( ( i - seriesOne ) == 1 && firstSOne ) m_mdctsf_sone[3][wireId] += 1;
251 if ( m_mdctsf_sone[3][wireId] != 0 && ( i - seriesOne ) != 1 )
252 firstSOne = false;
253 seriesOne = i;
254 m_mdctsf_one[3][wireId] += 1;
255 m_mdctsf_win[3][wireId] += 1 << i;
256 }
257 if ( layerId == 17 )
258 {
259 if ( flag_firstone && ( i - seriesOne != 1 ) && ( i != 0 ) )
260 {
261 m_mdctsf_pre[4][wireId] = i + 1;
262 flag_firstone = false;
263 }
264 if ( ( ( i - seriesOne ) != 1 ) && ( m_mdctsf_aft[4][wireId] != 0 ) )
265 flag_lastone = false;
266 if ( ( flag_firstone == false ) && ( ( i - seriesOne ) == 1 ) && flag_lastone )
267 m_mdctsf_aft[4][wireId] = i + 1;
268
269 if ( ( i - seriesOne ) == 1 && firstSOne ) m_mdctsf_sone[4][wireId] += 1;
270 if ( m_mdctsf_sone[4][wireId] != 0 && ( i - seriesOne ) != 1 )
271 firstSOne = false;
272 seriesOne = i;
273 m_mdctsf_one[4][wireId] += 1;
274 m_mdctsf_win[4][wireId] += 1 << i;
275 }
276 if ( layerId == 37 )
277 {
278 if ( flag_firstone && ( i - seriesOne != 1 ) && ( i != 0 ) )
279 {
280 m_mdctsf_pre[5][wireId] = i + 1;
281 flag_firstone = false;
282 }
283 if ( ( ( i - seriesOne ) != 1 ) && ( m_mdctsf_aft[5][wireId] != 0 ) )
284 flag_lastone = false;
285 if ( ( flag_firstone == false ) && ( ( i - seriesOne ) == 1 ) && flag_lastone )
286 m_mdctsf_aft[5][wireId] = i + 1;
287
288 if ( ( i - seriesOne ) == 1 && firstSOne ) m_mdctsf_sone[5][wireId] += 1;
289 if ( m_mdctsf_sone[5][wireId] != 0 && ( i - seriesOne ) != 1 )
290 firstSOne = false;
291 seriesOne = i;
292 m_mdctsf_one[5][wireId] += 1;
293 m_mdctsf_win[5][wireId] += 1 << i;
294 }
295 }
296 }
297 if ( data_type == 2 )
298 { // LTK
299 if ( ( data[byteId + i * periods] >> bitId ) & 1 )
300 {
301 if ( flag_firstone && ( i - seriesOne != 1 ) && ( i != 0 ) )
302 {
303 m_mdcltrk_pre[wireId] = i + 1;
304 flag_firstone = false;
305 }
306 if ( ( ( i - seriesOne ) != 1 ) && ( m_mdcltrk_aft[wireId] != 0 ) )
307 flag_lastone = false;
308 if ( ( flag_firstone == false ) && ( ( i - seriesOne ) == 1 ) && flag_lastone )
309 m_mdcltrk_aft[wireId] = i + 1;
310
311 if ( ( i - seriesOne ) == 1 && firstSOne ) m_mdcltrk_sone[wireId] += 1;
312 if ( m_mdcltrk_sone[wireId] != 0 && ( i - seriesOne ) != 1 ) firstSOne = false;
313 seriesOne = i;
314 m_mdcltrk_one[wireId] += 1;
315 m_mdcltrk_win[wireId] += 1 << i;
316 }
317 }
318 if ( data_type == 3 )
319 { // STK
320 if ( ( data[byteId + i * periods] >> bitId ) & 1 )
321 {
322 if ( flag_firstone && ( i - seriesOne != 1 ) && ( i != 0 ) )
323 {
324 m_mdcstrk_pre[wireId] = i + 1;
325 flag_firstone = false;
326 }
327 if ( ( ( i - seriesOne ) != 1 ) && ( m_mdcstrk_aft[wireId] != 0 ) )
328 flag_lastone = false;
329 if ( ( flag_firstone == false ) && ( ( i - seriesOne ) == 1 ) && flag_lastone )
330 m_mdcstrk_aft[wireId] = i + 1;
331
332 if ( ( i - seriesOne ) == 1 && firstSOne ) m_mdcstrk_sone[wireId] += 1;
333 if ( m_mdcstrk_sone[wireId] != 0 && ( i - seriesOne ) != 1 ) firstSOne = false;
334 seriesOne = i;
335 m_mdcstrk_one[wireId] += 1;
336 m_mdcstrk_win[wireId] += 1 << i;
337 }
338 }
339 } // end of TKF1-8
340
341 if ( ( iter->first ) == 234 )
342 { // ITKF information
343 if ( data_type == 0 )
344 {
345 if ( ( data[byteId + i * periods] >> bitId ) & 1 )
346 {
347 if ( layerId == 2 )
348 {
349 if ( ( i - seriesOne ) == 1 && firstSOne ) m_mdctsf_sone[0][wireId] += 1;
350 if ( m_mdctsf_sone[0][wireId] != 0 && ( i - seriesOne ) != 1 )
351 firstSOne = false;
352 seriesOne = i;
353 m_mdctsf_one[0][wireId] += 1;
354 }
355 if ( layerId == 6 )
356 {
357 if ( ( i - seriesOne ) == 1 && firstSOne ) m_mdctsf_sone[1][wireId] += 1;
358 if ( m_mdctsf_sone[1][wireId] != 0 && ( i - seriesOne ) != 1 )
359 firstSOne = false;
360 seriesOne = i;
361 m_mdctsf_one[1][wireId] += 1;
362 }
363 }
364 }
365 if ( data_type == 1 )
366 {
367 if ( ( data[byteId + i * periods] >> bitId ) & 1 )
368 {
369 if ( ( i - seriesOne ) == 1 && firstSOne ) m_mdchit_sone[layerId][wireId] += 1;
370 if ( m_mdchit_sone[layerId][wireId] != 0 && ( i - seriesOne ) != 1 )
371 firstSOne = false;
372 seriesOne = i;
373 m_mdchit_one[layerId][wireId] += 1;
374 }
375 }
376 if ( data_type == 4 )
377 {
378 if ( ( data[byteId + i * periods] >> bitId ) & 1 ) { m_mdcTrigCondi[wireId] = 1; }
379 }
380 } // end of ITKF
381
382 if ( ( iter->first ) == 235 || ( iter->first ) == 236 )
383 { // LTKC or STKC information
384 if ( data_type == 2 )
385 {
386 if ( ( data[byteId + i * periods] >> bitId ) & 1 )
387 {
388 if ( ( i - seriesOne ) == 1 && firstSOne ) m_mdcltrkc_sone[wireId] += 1;
389 if ( m_mdcltrkc_sone[wireId] != 0 && ( i - seriesOne ) != 1 ) firstSOne = false;
390 seriesOne = i;
391 m_mdcltrkc_one[wireId] += 1;
392 if ( wireId >= 128 ) m_mdcTrigCondi[wireId - 126] = 1;
393 }
394 }
395 if ( data_type == 3 )
396 {
397 if ( ( data[byteId + i * periods] >> bitId ) & 1 )
398 {
399 if ( ( i - seriesOne ) == 1 && firstSOne ) m_mdcstrkc_sone[wireId] += 1;
400 if ( m_mdcstrkc_sone[wireId] != 0 && ( i - seriesOne ) != 1 ) firstSOne = false;
401 seriesOne = i;
402 m_mdcstrkc_one[wireId] += 1;
403 if ( wireId >= 128 ) m_mdcTrigCondi[wireId - 122] = 1;
404 }
405 }
406 } // end of LTKC or STKC
407
408 } // loop in windows
409 }
410 }
411}
412
414 cout << "The number of board is " << m_datamap.size() << endl;
415 std::map<uint32_t, std::vector<uint32_t>>::iterator iter = m_datamap.begin();
416 if ( iter->first == 0xe2 )
417 cout << "The data size of E2 board is " << iter->second.size() << endl;
418
419 for ( int i = 0; i < 24; i++ )
420 for ( int j = 0; j < 256; j++ )
421 {
422 m_mdchit_one[i][j] = 0;
423 m_mdchit_sone[i][j] = 0;
424 cout << "MDC hits: " << i << " " << j << " " << m_mdchit_one[i][j] << endl;
425 cout << "MDC hits: " << i << " " << j << " " << m_mdchit_sone[i][j] << endl;
426 if ( i < 6 )
427 {
428 m_mdctsf_one[i][j] = 0;
429 m_mdctsf_sone[i][j] = 0;
430 cout << "MDC tsf: " << i << " " << j << " " << m_mdctsf_one[i][j] << endl;
431 cout << "MDC tsf: " << i << " " << j << " " << m_mdctsf_sone[i][j] << endl;
432 }
433 }
434 for ( int k = 0; k < 132; k++ )
435 {
436 m_mdcltrkc_one[k] = 0;
437 m_mdcstrkc_one[k] = 0;
438 m_mdcltrkc_sone[k] = 0;
439 m_mdcstrkc_sone[k] = 0;
440 cout << "MDC ltrkc: " << k << " " << m_mdcltrkc_one[k] << endl;
441 cout << "MDC strkc: " << k << " " << m_mdcstrkc_one[k] << endl;
442 cout << "MDC ltrkc: " << k << " " << m_mdcltrkc_sone[k] << endl;
443 cout << "MDC strkc: " << k << " " << m_mdcstrkc_sone[k] << endl;
444 if ( k < 128 )
445 {
446 m_mdcltrk_one[k] = 0;
447 m_mdcstrk_one[k] = 0;
448 m_mdcltrk_sone[k] = 0;
449 m_mdcstrk_sone[k] = 0;
450 cout << "MDC ltrk: " << k << " " << m_mdcltrk_one[k] << endl;
451 cout << "MDC strk: " << k << " " << m_mdcstrk_one[k] << endl;
452 cout << "MDC ltrk: " << k << " " << m_mdcltrk_sone[k] << endl;
453 cout << "MDC strk: " << k << " " << m_mdcstrk_sone[k] << endl;
454 }
455 }
456}
TTree * data
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
virtual ~TrigMdc()
Definition TrigMdc.cxx:80
TrigMdc(const char *name)
Definition TrigMdc.cxx:7
void initialize()
Definition TrigMdc.cxx:102
void print()
Definition TrigMdc.cxx:413
void setMdcTrigData(uint32_t boardId, uint32_t window, uint32_t datasize, const uint32_t *data)
Definition TrigMdc.cxx:145