26 std::string filename = std::string( getenv(
"TRIGGERROOT" ) );
27 filename += std::string(
"/data/tm/TM_BARREL.pat" );
28 std::ifstream infile( filename.c_str() );
33 infile.getline( line, 255 );
34 if ( line[0] ==
'#' )
continue;
35 std::string mdcId, tofId_l, tofId_h, emcId_l, emcId_h;
36 char* token = strtok( line,
" " );
40 token = strtok( NULL,
" " );
46 token = strtok( NULL,
" " );
52 token = strtok( NULL,
" " );
58 token = strtok( NULL,
" " );
64 token = strtok( NULL,
" " );
67 if ( token != NULL )
continue;
70 int i_tofId_l = atoi( tofId_l.c_str() );
71 int i_tofId_h = atoi( tofId_h.c_str() );
72 int i_emcId_l = atoi( emcId_l.c_str() );
73 int i_emcId_h = atoi( emcId_h.c_str() );
76 std::vector<int> tof_tmp;
77 std::vector<int> emc_tmp;
79 if ( i_tofId_l > i_tofId_h )
81 for (
int i = i_tofId_l; i <= ( i_tofId_h + 88 ); i++ )
83 if ( i >= 88 ) tof_tmp.push_back( i - 88 );
84 else tof_tmp.push_back( i );
89 for (
int i = i_tofId_l; i <= i_tofId_h; i++ ) { tof_tmp.push_back( i ); }
92 if ( i_emcId_l > i_emcId_h )
94 for (
int i = i_emcId_l; i <= ( i_emcId_h + 30 ); i++ )
96 if ( i >= 30 ) emc_tmp.push_back( i - 30 );
97 else emc_tmp.push_back( i );
102 for (
int i = i_emcId_l; i <= i_emcId_h; i++ ) { emc_tmp.push_back( i ); }
104 m_tm_barrel.push_back( tof_tmp );
105 m_tm_barrel.push_back( emc_tmp );
108 else { std::cout <<
"Can not open file: " << filename <<
" in BesTMTrig. " << std::endl; }
110 filename = std::string( getenv(
"TRIGGERROOT" ) );
111 filename += std::string(
"/data/tm/TM_EAST_ENDCAP.pat" );
112 std::ifstream infile1( filename.c_str() );
117 infile1.getline( line, 255 );
118 if ( line[0] ==
'#' )
continue;
119 std::string mdcId, tofId_l, tofId_h, emcId_l, emcId_h;
120 char* token = strtok( line,
" " );
124 token = strtok( NULL,
" " );
130 token = strtok( NULL,
" " );
136 token = strtok( NULL,
" " );
142 token = strtok( NULL,
" " );
148 token = strtok( NULL,
" " );
151 if ( token != NULL )
continue;
154 int i_tofId_l = atoi( tofId_l.c_str() );
155 int i_tofId_h = atoi( tofId_h.c_str() );
156 int i_emcId_l = atoi( emcId_l.c_str() );
157 int i_emcId_h = atoi( emcId_h.c_str() );
160 std::vector<int> tof_tmp;
161 std::vector<int> emc_tmp;
163 if ( i_tofId_l > i_tofId_h )
165 for (
int i = i_tofId_l; i <= ( i_tofId_h + 24 ); i++ )
167 if ( i >= 24 ) tof_tmp.push_back( i - 24 );
168 else tof_tmp.push_back( i );
173 for (
int i = i_tofId_l; i <= i_tofId_h; i++ ) { tof_tmp.push_back( i ); }
176 if ( i_emcId_l > i_emcId_h )
178 for (
int i = i_emcId_l; i <= ( i_emcId_h + 16 ); i++ )
180 if ( i >= 16 ) emc_tmp.push_back( i - 16 );
181 else emc_tmp.push_back( i );
186 for (
int i = i_emcId_l; i <= i_emcId_h; i++ ) { emc_tmp.push_back( i ); }
188 m_tm_ecap.push_back( tof_tmp );
189 m_tm_ecap.push_back( emc_tmp );
192 else { std::cout <<
"Can not open file: " << filename <<
" in BesTMTrig. " << std::endl; }
195 filename = std::string( getenv(
"TRIGGERROOT" ) );
196 filename += std::string(
"/data/tm/TM_WEST_ENDCAP.pat" );
197 std::ifstream infile2( filename.c_str() );
202 infile2.getline( line, 255 );
203 if ( line[0] ==
'#' )
continue;
204 std::string mdcId, tofId_l, tofId_h, emcId_l, emcId_h;
205 char* token = strtok( line,
" " );
209 token = strtok( NULL,
" " );
215 token = strtok( NULL,
" " );
221 token = strtok( NULL,
" " );
227 token = strtok( NULL,
" " );
233 token = strtok( NULL,
" " );
236 if ( token != NULL )
continue;
239 int i_tofId_l = atoi( tofId_l.c_str() );
240 int i_tofId_h = atoi( tofId_h.c_str() );
241 int i_emcId_l = atoi( emcId_l.c_str() );
242 int i_emcId_h = atoi( emcId_h.c_str() );
245 std::vector<int> tof_tmp;
246 std::vector<int> emc_tmp;
248 if ( i_tofId_l > i_tofId_h )
250 for (
int i = i_tofId_l; i <= ( i_tofId_h + 24 ); i++ )
252 if ( i >= 24 ) tof_tmp.push_back( i - 24 );
253 else tof_tmp.push_back( i );
258 for (
int i = i_tofId_l; i <= i_tofId_h; i++ ) { tof_tmp.push_back( i ); }
261 if ( i_emcId_l > i_emcId_h )
263 for (
int i = i_emcId_l; i <= ( i_emcId_h + 16 ); i++ )
265 if ( i >= 16 ) emc_tmp.push_back( i - 16 );
266 else emc_tmp.push_back( i );
271 for (
int i = i_emcId_l; i <= i_emcId_h; i++ ) { emc_tmp.push_back( i ); }
273 m_tm_wcap.push_back( tof_tmp );
274 m_tm_wcap.push_back( emc_tmp );
277 else { std::cout <<
"Can not open file: " << filename <<
" in BesTMTrig. " << std::endl; }
287 std::cout <<
"The size of barrel vector: " << m_tm_barrel.size() << std::endl;
288 std::cout <<
"The size of east endcap vector: " << m_tm_ecap.size() << std::endl;
289 std::cout <<
"The size of west endcap vector: " << m_tm_wcap.size() << std::endl;
290 std::cout <<
"--------------------------- BARREL -----------------------------" << std::endl;
291 for (
unsigned int i = 0; i < m_tm_barrel.size(); i += 2 )
293 std::cout <<
"MdcId is " << i / 2 <<
" TofId size " << m_tm_barrel[i].size() <<
" Id "
294 << m_tm_barrel[i][0] <<
" " << m_tm_barrel[i][m_tm_barrel[i].size() - 1]
296 std::cout <<
"MdcId is " << i / 2 <<
" EmcId size " << m_tm_barrel[i + 1].size() <<
" Id "
297 << m_tm_barrel[i + 1][0] <<
" "
298 << m_tm_barrel[i + 1][m_tm_barrel[i + 1].size() - 1] << std::endl;
300 std::cout <<
"--------------------------- EAST ENDCAP -----------------------------"
302 for (
unsigned int i = 0; i < m_tm_ecap.size(); i += 2 )
304 std::cout <<
"MdcId is " << i / 2 <<
" TofId size " << m_tm_ecap[i].size() <<
" Id "
305 << m_tm_ecap[i][0] <<
" " << m_tm_ecap[i][m_tm_ecap[i].size() - 1] << std::endl;
306 std::cout <<
"MdcId is " << i / 2 <<
" EmcId size " << m_tm_ecap[i + 1].size() <<
" Id "
307 << m_tm_ecap[i + 1][0] <<
" " << m_tm_ecap[i + 1][m_tm_ecap[i + 1].size() - 1]
310 std::cout <<
"--------------------------- WEST ENDCAP -----------------------------"
312 for (
unsigned int i = 0; i < m_tm_wcap.size(); i += 2 )
314 std::cout <<
"MdcId is " << i / 2 <<
" TofId size " << m_tm_wcap[i].size() <<
" Id "
315 << m_tm_wcap[i][0] <<
" " << m_tm_wcap[i][m_tm_wcap[i].size() - 1] << std::endl;
316 std::cout <<
"MdcId is " << i / 2 <<
" EmcId size " << m_tm_wcap[i + 1].size() <<
" Id "
317 << m_tm_wcap[i + 1][0] <<
" " << m_tm_wcap[i + 1][m_tm_wcap[i + 1].size() - 1]
323 ISvcLocator* svcLocator = Gaudi::svcLocator();
324 StatusCode sc = svcLocator->service(
"BesGlobalTrigSvc", m_tmpSvc );
328 std::vector<int> tm_mdcstrkId;
329 std::vector<int> tm_mdcltrkId;
331 std::vector<int> mdcltrkId = m_pIBGT->getMdcLtrkId();
332 for (
unsigned int i = 0; i < mdcstrkId.size(); i++ )
334 int trackId = int( mdcstrkId[i] / 2 );
335 if ( find( tm_mdcstrkId.begin(), tm_mdcstrkId.end(), trackId ) == tm_mdcstrkId.end() )
336 tm_mdcstrkId.push_back( trackId );
338 for (
unsigned int i = 0; i < mdcltrkId.size(); i++ )
340 int trackId = int( mdcltrkId[i] / 2 );
341 if ( find( tm_mdcltrkId.begin(), tm_mdcltrkId.end(), trackId ) == tm_mdcltrkId.end() )
342 tm_mdcltrkId.push_back( trackId );
345 std::map<int, std::vector<int>, greater<int>> tofHit;
346 std::vector<int> tm_btofhitId;
347 std::vector<int> tm_etofhitId;
348 std::vector<int> tm_wtofhitId;
349 tofHit = m_pIBGT->getTofHitPos();
350 for ( std::map<
int, std::vector<int>, greater<int>>::iterator
iter = tofHit.begin();
353 if (
iter->first == 0 )
355 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
356 { tm_etofhitId.push_back(
iter->second[i] ); }
358 if (
iter->first == 1 )
360 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
361 { tm_btofhitId.push_back(
iter->second[i] ); }
363 if (
iter->first == 2 )
365 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
366 { tm_wtofhitId.push_back(
iter->second[i] ); }
370 std::map<int, std::vector<complex<int>>, greater<int>> emcHit;
371 std::vector<int> tm_bemcClusId;
372 std::vector<int> tm_eemcClusId;
373 std::vector<int> tm_wemcClusId;
374 emcHit = m_pIBGT->getEmcClusId();
375 for ( std::map<
int, std::vector<
complex<int>>, greater<int>>::iterator
iter = emcHit.begin();
378 if (
iter->first == 1 )
380 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
384 int crystalId =
iter->second[i].imag();
385 if ( find( tm_bemcClusId.begin(), tm_bemcClusId.end(), crystalId ) ==
386 tm_bemcClusId.end() )
387 tm_bemcClusId.push_back( crystalId );
390 if (
iter->first == 0 )
392 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
396 int crystalId = int( (
iter->second[i].imag() ) / 2 );
397 if ( find( tm_eemcClusId.begin(), tm_eemcClusId.end(), crystalId ) ==
398 tm_eemcClusId.end() )
399 tm_eemcClusId.push_back( crystalId );
402 if (
iter->first == 2 )
404 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
408 int crystalId = int( (
iter->second[i].imag() ) / 2 );
409 if ( find( tm_wemcClusId.begin(), tm_wemcClusId.end(), crystalId ) ==
410 tm_wemcClusId.end() )
411 tm_wemcClusId.push_back( crystalId );
422 int BTOF_EMC_MATCH[64];
423 int ETOF_EMC_MATCH[64];
424 int WTOF_EMC_MATCH[64];
425 for (
int i = 0; i < 64; i++ )
433 BTOF_EMC_MATCH[i] = 0;
434 ETOF_EMC_MATCH[i] = 0;
435 WTOF_EMC_MATCH[i] = 0;
437 for (
unsigned int i = 0; i < tm_mdcltrkId.size(); i++ )
439 int cellId = tm_mdcltrkId[i];
440 for (
unsigned int j = 0; j < ( m_tm_barrel[2 * cellId] ).size(); j++ )
442 if ( find( tm_btofhitId.begin(), tm_btofhitId.end(), m_tm_barrel[2 * cellId][j] ) !=
445 BTOF_MATCH[cellId] = 1;
449 for (
unsigned int j = 0; j < ( m_tm_barrel[2 * cellId + 1] ).size(); j++ )
451 if ( find( tm_bemcClusId.begin(), tm_bemcClusId.end(),
452 m_tm_barrel[2 * cellId + 1][j] ) != tm_bemcClusId.end() )
454 BEMC_MATCH[cellId] = 1;
459 for (
unsigned int i = 0; i < tm_mdcstrkId.size(); i++ )
461 int cellId = tm_mdcstrkId[i];
462 for (
unsigned int j = 0; j < ( m_tm_ecap[2 * cellId] ).size(); j++ )
464 if ( find( tm_etofhitId.begin(), tm_etofhitId.end(), m_tm_ecap[2 * cellId][j] ) !=
467 ETOF_MATCH[cellId] = 1;
471 for (
unsigned int j = 0; j < ( m_tm_ecap[2 * cellId + 1] ).size(); j++ )
473 if ( find( tm_eemcClusId.begin(), tm_eemcClusId.end(), m_tm_ecap[2 * cellId + 1][j] ) !=
474 tm_eemcClusId.end() )
476 EEMC_MATCH[cellId] = 1;
480 for (
unsigned int j = 0; j < ( m_tm_wcap[2 * cellId] ).size(); j++ )
482 if ( find( tm_wtofhitId.begin(), tm_wtofhitId.end(), m_tm_wcap[2 * cellId][j] ) !=
485 WTOF_MATCH[cellId] = 1;
489 for (
unsigned int j = 0; j < ( m_tm_wcap[2 * cellId + 1] ).size(); j++ )
491 if ( find( tm_wemcClusId.begin(), tm_wemcClusId.end(), m_tm_wcap[2 * cellId + 1][j] ) !=
492 tm_wemcClusId.end() )
494 WEMC_MATCH[cellId] = 1;
503 for (
int i = 0; i < 64; i++ )
505 if ( BTOF_MATCH[i] == 1 ) NATrk++;
506 if ( ( BTOF_MATCH[i] == 1 ) && ( BEMC_MATCH[i] == 1 ) )
508 BTOF_EMC_MATCH[i] = 1;
511 if ( ( ETOF_MATCH[i] == 1 ) && ( EEMC_MATCH[i] == 1 ) ) ETOF_EMC_MATCH[i] = 1;
512 if ( ( WTOF_MATCH[i] == 1 ) && ( WEMC_MATCH[i] == 1 ) ) WTOF_EMC_MATCH[i] = 1;
513 if ( m_pIBGT->getEndCapMode() == 0 )
515 if ( ETOF_MATCH[i] == 1 ) NCTrk++;
516 if ( WTOF_MATCH[i] == 1 ) NCTrk++;
520 if ( ETOF_EMC_MATCH[i] == 1 ) NCTrk++;
521 if ( WTOF_EMC_MATCH[i] == 1 ) NCTrk++;
527 bool ATrk_BB =
false;
530 bool BTrk_BB =
false;
533 bool CTrk_BB =
false;
535 if ( NATrk >= 1 ) NATrk1 =
true;
536 if ( NATrk >= 2 ) NATrk2 =
true;
537 if ( NBTrk >= 1 ) NBTrk1 =
true;
538 if ( NBTrk >= 2 ) NBTrk2 =
true;
539 if ( NCTrk >= 1 ) NCTrk1 =
true;
540 if ( NCTrk >= 2 ) NCTrk2 =
true;
542 for (
int i = 0; i < 64; i++ )
544 if ( BTOF_MATCH[i] == 1 )
546 for (
int j = 0; j < 7; j++ )
549 if ( ( i + j + 29 ) > 63 ) {
id = i + j + 29 - 64; }
550 else {
id = i + j + 29; }
551 if ( BTOF_MATCH[
id] == 1 ) ATrk_BB =
true;
554 if ( BTOF_EMC_MATCH[i] == 1 )
556 for (
int j = 0; j < 7; j++ )
559 if ( ( i + j + 29 ) > 63 ) {
id = i + j + 29 - 64; }
560 else {
id = i + j + 29; }
561 if ( BTOF_EMC_MATCH[
id] == 1 ) BTrk_BB =
true;
564 if ( m_pIBGT->getEndCapMode() == 0 )
566 if ( ( ETOF_MATCH[i] == 1 ) || ( WTOF_MATCH[i] == 1 ) )
568 for (
int j = 0; j < 7; j++ )
571 if ( ( i + j + 29 ) > 63 ) {
id = i + j + 29 - 64; }
572 else {
id = i + j + 29; }
573 if ( ( ETOF_MATCH[
id] == 1 ) || ( WTOF_MATCH[
id] == 1 ) ) CTrk_BB =
true;
579 if ( ( ETOF_EMC_MATCH[i] == 1 ) || ( WTOF_EMC_MATCH[i] == 1 ) )
581 for (
int j = 0; j < 7; j++ )
584 if ( ( i + j + 29 ) > 63 ) {
id = i + j + 29 - 64; }
585 else {
id = i + j + 29; }
586 if ( ( ETOF_EMC_MATCH[
id] == 1 ) || ( WTOF_EMC_MATCH[
id] == 1 ) ) CTrk_BB =
true;
592 m_pIBGT->setTMNATrk1( NATrk1 );
593 m_pIBGT->setTMNATrk2( NATrk2 );
594 m_pIBGT->setTMATrkBB( ATrk_BB );
595 m_pIBGT->setTMNBTrk1( NBTrk1 );
596 m_pIBGT->setTMNBTrk2( NBTrk2 );
597 m_pIBGT->setTMBTrkBB( BTrk_BB );
598 m_pIBGT->setTMNCTrk1( NCTrk1 );
599 m_pIBGT->setTMNCTrk2( NCTrk2 );
600 m_pIBGT->setTMCTrkBB( CTrk_BB );