322 {
323 ISvcLocator* svcLocator = Gaudi::svcLocator();
324 StatusCode sc = svcLocator->service( "BesGlobalTrigSvc", m_tmpSvc );
325 m_pIBGT = dynamic_cast<BesGlobalTrigSvc*>( m_tmpSvc );
326
327
328 std::vector<int> tm_mdcstrkId;
329 std::vector<int> tm_mdcltrkId;
330 std::vector<int> mdcstrkId = m_pIBGT->getMdcStrkId();
331 std::vector<int> mdcltrkId = m_pIBGT->getMdcLtrkId();
332 for ( unsigned int i = 0; i < mdcstrkId.size(); i++ )
333 {
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 );
337 }
338 for ( unsigned int i = 0; i < mdcltrkId.size(); i++ )
339 {
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 );
343 }
344
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();
352 {
353 if (
iter->first == 0 )
354 {
355 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
356 { tm_etofhitId.push_back(
iter->second[i] ); }
357 }
358 if (
iter->first == 1 )
359 {
360 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
361 { tm_btofhitId.push_back(
iter->second[i] ); }
362 }
363 if (
iter->first == 2 )
364 {
365 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
366 { tm_wtofhitId.push_back(
iter->second[i] ); }
367 }
368 }
369
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();
377 {
378 if (
iter->first == 1 )
379 {
380 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
381 {
382
383
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 );
388 }
389 }
390 if (
iter->first == 0 )
391 {
392 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
393 {
394
395
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 );
400 }
401 }
402 if (
iter->first == 2 )
403 {
404 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
405 {
406
407
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 );
412 }
413 }
414 }
415
416 int BTOF_MATCH[64];
417 int ETOF_MATCH[64];
418 int WTOF_MATCH[64];
419 int BEMC_MATCH[64];
420 int EEMC_MATCH[64];
421 int WEMC_MATCH[64];
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++ )
426 {
427 BTOF_MATCH[i] = 0;
428 ETOF_MATCH[i] = 0;
429 WTOF_MATCH[i] = 0;
430 BEMC_MATCH[i] = 0;
431 EEMC_MATCH[i] = 0;
432 WEMC_MATCH[i] = 0;
433 BTOF_EMC_MATCH[i] = 0;
434 ETOF_EMC_MATCH[i] = 0;
435 WTOF_EMC_MATCH[i] = 0;
436 }
437 for ( unsigned int i = 0; i < tm_mdcltrkId.size(); i++ )
438 {
439 int cellId = tm_mdcltrkId[i];
440 for ( unsigned int j = 0; j < ( m_tm_barrel[2 * cellId] ).size(); j++ )
441 {
442 if ( find( tm_btofhitId.begin(), tm_btofhitId.end(), m_tm_barrel[2 * cellId][j] ) !=
443 tm_btofhitId.end() )
444 {
445 BTOF_MATCH[cellId] = 1;
446 break;
447 }
448 }
449 for ( unsigned int j = 0; j < ( m_tm_barrel[2 * cellId + 1] ).size(); j++ )
450 {
451 if ( find( tm_bemcClusId.begin(), tm_bemcClusId.end(),
452 m_tm_barrel[2 * cellId + 1][j] ) != tm_bemcClusId.end() )
453 {
454 BEMC_MATCH[cellId] = 1;
455 break;
456 }
457 }
458 }
459 for ( unsigned int i = 0; i < tm_mdcstrkId.size(); i++ )
460 {
461 int cellId = tm_mdcstrkId[i];
462 for ( unsigned int j = 0; j < ( m_tm_ecap[2 * cellId] ).size(); j++ )
463 {
464 if ( find( tm_etofhitId.begin(), tm_etofhitId.end(), m_tm_ecap[2 * cellId][j] ) !=
465 tm_etofhitId.end() )
466 {
467 ETOF_MATCH[cellId] = 1;
468 break;
469 }
470 }
471 for ( unsigned int j = 0; j < ( m_tm_ecap[2 * cellId + 1] ).size(); j++ )
472 {
473 if ( find( tm_eemcClusId.begin(), tm_eemcClusId.end(), m_tm_ecap[2 * cellId + 1][j] ) !=
474 tm_eemcClusId.end() )
475 {
476 EEMC_MATCH[cellId] = 1;
477 break;
478 }
479 }
480 for ( unsigned int j = 0; j < ( m_tm_wcap[2 * cellId] ).size(); j++ )
481 {
482 if ( find( tm_wtofhitId.begin(), tm_wtofhitId.end(), m_tm_wcap[2 * cellId][j] ) !=
483 tm_wtofhitId.end() )
484 {
485 WTOF_MATCH[cellId] = 1;
486 break;
487 }
488 }
489 for ( unsigned int j = 0; j < ( m_tm_wcap[2 * cellId + 1] ).size(); j++ )
490 {
491 if ( find( tm_wemcClusId.begin(), tm_wemcClusId.end(), m_tm_wcap[2 * cellId + 1][j] ) !=
492 tm_wemcClusId.end() )
493 {
494 WEMC_MATCH[cellId] = 1;
495 break;
496 }
497 }
498 }
499
500 int NATrk = 0;
501 int NBTrk = 0;
502 int NCTrk = 0;
503 for ( int i = 0; i < 64; i++ )
504 {
505 if ( BTOF_MATCH[i] == 1 ) NATrk++;
506 if ( ( BTOF_MATCH[i] == 1 ) && ( BEMC_MATCH[i] == 1 ) )
507 {
508 BTOF_EMC_MATCH[i] = 1;
509 NBTrk++;
510 }
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 )
514 {
515 if ( ETOF_MATCH[i] == 1 ) NCTrk++;
516 if ( WTOF_MATCH[i] == 1 ) NCTrk++;
517 }
518 else
519 {
520 if ( ETOF_EMC_MATCH[i] == 1 ) NCTrk++;
521 if ( WTOF_EMC_MATCH[i] == 1 ) NCTrk++;
522 }
523 }
524
525 bool NATrk1 = false;
526 bool NATrk2 = false;
527 bool ATrk_BB = false;
528 bool NBTrk1 = false;
529 bool NBTrk2 = false;
530 bool BTrk_BB = false;
531 bool NCTrk1 = false;
532 bool NCTrk2 = false;
533 bool CTrk_BB = false;
534
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;
541
542 for ( int i = 0; i < 64; i++ )
543 {
544 if ( BTOF_MATCH[i] == 1 )
545 {
546 for ( int j = 0; j < 7; j++ )
547 {
548 int id;
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;
552 }
553 }
554 if ( BTOF_EMC_MATCH[i] == 1 )
555 {
556 for ( int j = 0; j < 7; j++ )
557 {
558 int id;
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;
562 }
563 }
564 if ( m_pIBGT->getEndCapMode() == 0 )
565 {
566 if ( ( ETOF_MATCH[i] == 1 ) || ( WTOF_MATCH[i] == 1 ) )
567 {
568 for ( int j = 0; j < 7; j++ )
569 {
570 int id;
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;
574 }
575 }
576 }
577 else
578 {
579 if ( ( ETOF_EMC_MATCH[i] == 1 ) || ( WTOF_EMC_MATCH[i] == 1 ) )
580 {
581 for ( int j = 0; j < 7; j++ )
582 {
583 int id;
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;
587 }
588 }
589 }
590 }
591
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 );
601}