Algorithm execution.
291 {
292 MsgStream log(
msgSvc(), name() );
293
294 log << MSG::DEBUG << "in execute()" << endmsg;
295
296 int event, run;
297 ifpass = false;
298
299
300
301
302 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
303 if ( !eventHeader )
304 {
305 log << MSG::FATAL << "Could not find Event Header" << endmsg;
306 return ( StatusCode::FAILURE );
307 }
308 run = eventHeader->runNumber();
309 event = eventHeader->eventNumber();
310
311 if ( mTrigRootFlag )
312 {
313
314 m_RunId = run;
315 m_EventId = event;
316 }
317
318
319
320
321 if ( writeFile == 1 && event == 0 )
322 {
323 readin.open( input.c_str(), ios_base::in );
324 if ( readin ) cout << "Input File is ok " << input << endl;
325 readout.open( output.c_str(), ios_base::out );
326 if ( readout ) cout << "Output File is ok " << output << endl;
327 VERSIONNUM version;
328 readin >> version;
329 readout << version;
330 }
331
332
333
334
335 multimap<int, uint32_t, less<int>> mdc_hitmap;
336 mdc_hitmap.clear();
337
338
339
340
341 multimap<int, int, less<int>> tof_hitmap;
342 tof_hitmap.clear();
343
344
345
346
347 SmartDataPtr<MdcDigiCol> mdcDigiCol( eventSvc(), "/Event/Digi/MdcDigiCol" );
348 if ( !mdcDigiCol )
349 {
350 log << MSG::FATAL << "Could not find MDC digi" << endmsg;
351 return ( StatusCode::FAILURE );
352 }
353 for ( MdcDigiCol::iterator iter3 = mdcDigiCol->begin(); iter3 != mdcDigiCol->end(); iter3++ )
354 {
355 Identifier id = ( *iter3 )->identify();
358 int tdc = ( *iter3 )->getTimeChannel();
359 if ( tdc < 0x7FFFFFFF && tdc > 0 )
360 {
361 if ( layer <= 19 )
362 {
363 typedef pair<int, uint32_t> vpair;
364 uint32_t mdc_Id = ( layer & 0xFFFF ) << 16;
365 mdc_Id = mdc_Id | ( wire & 0xFFFF );
366 mdc_hitmap.insert( vpair( tdc, mdc_Id ) );
367 }
368 if ( layer >= 36 && layer <= 39 )
369 {
370 typedef pair<int, uint32_t> vpair;
371 uint32_t mdc_Id = ( layer & 0xFFFF ) << 16;
372 mdc_Id = mdc_Id | ( wire & 0xFFFF );
373 mdc_hitmap.insert( vpair( tdc, mdc_Id ) );
374 }
375 }
376 }
377
378
379
380
381 TofDataMap tofDigiMap = m_rawDataProviderSvc->tofDataMapEstime();
382 for ( TofDataMap::iterator iter3 = tofDigiMap.begin(); iter3 != tofDigiMap.end(); iter3++ )
383 {
384 Identifier idd = Identifier( iter3->first );
385 TofData* p_tofDigi = iter3->second;
389 if ( barrel_ec == 1 )
390 {
391 if ( ( ( p_tofDigi->
quality() ) & 0x5 ) != 0x5 )
continue;
392 double tdc1 = p_tofDigi->
tdc1();
393 double tdc2 = p_tofDigi->
tdc2();
394 int tdc;
395 if ( tdc1 > tdc2 ) tdc = (int)tdc1;
396 else tdc = (int)tdc2;
397 typedef pair<int, int> vpair;
398 tdc = tdc;
399 tof_hitmap.insert( vpair( tdc, 10000 * barrel_ec + 1000 * layer + im * 10 ) );
400 }
401 else
402 {
403 int tdc1 = (int)p_tofDigi->
tdc1();
404 typedef pair<int, int> vpair;
405 tdc1 = tdc1;
406 tof_hitmap.insert( vpair( tdc1, 10000 * barrel_ec + 1000 * layer + im * 10 ) );
407 }
408 }
409
410
411
412
413 SmartDataPtr<EmcDigiCol> emcDigiCol( eventSvc(), "/Event/Digi/EmcDigiCol" );
414 if ( !emcDigiCol )
415 {
416 log << MSG::FATAL << "Could not find EMC digi" << endmsg;
417 return ( StatusCode::FAILURE );
418 }
419
420
421
422
423 EmcWaveform blockWave[16];
424
425
426
427
428 multimap<int, uint32_t, less<int>> emc_TC;
429 emc_TC.clear();
430
431
432
433
435
436
437
438
439 double peak_time = 0;
441
442
443
444
445 SmartDataPtr<MucDigiCol> mucDigiCol( eventSvc(), "/Event/Digi/MucDigiCol" );
446 if ( !mucDigiCol )
447 {
448 log << MSG::FATAL << "Could not find MUC digi" << endmsg;
449 return ( StatusCode::FAILURE );
450 }
451 if ( m_mucDigi ) m_mucDigi->getMucDigi( mucDigiCol );
452
453
454
455
456 if ( event % 10000 == 0 ) std::cout << "---> EventNo is " << event << std::endl;
457 nEvent++;
458
459
460
461
462
463
464
465
466 double stime = -1, etime = -1;
467 findSETime( mdc_hitmap, tof_hitmap, emc_TC, stime, etime );
468
469
470 int nclock = 0;
471 if ( stime >= 0 ) { nclock = int( ( etime - stime ) / 24 ) + 1; }
472 else { nclock = 0; }
473
474
475
476
477 int** trgcond = new int*[48];
478 for ( int condId = 0; condId < 48; condId++ ) { trgcond[condId] = new int[nclock]; }
479
480
481 int idle_status = -1;
482
483 for ( int iclock = 0; iclock < nclock; iclock++ )
484 {
485
486
487
489
490
491
492
494
495
496
497
499
500
501
502
503
504
505
506
507
508 StatusCode status = m_pIBGT->setTrigCondition();
509 if ( status != StatusCode::SUCCESS )
510 {
511 log << MSG::FATAL << "Could not set trigger condition index" << endmsg;
512 return StatusCode::FAILURE;
513 }
514
515
516
517
518 for ( int condId = 0; condId < 48; condId++ )
519 { trgcond[condId][iclock] = m_pIBGT->getTrigCond( condId ); }
520 }
521
522
523
524
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545 bool ifClus1 = false;
546 for ( int i = 0; i < nclock; i++ )
547 {
548 if ( trgcond[0][i] > 0 ) ifClus1 = true;
549 }
550
551 if ( ifClus1 == false )
552 {
553 for ( int i = 0; i < nclock; i++ )
554 {
555 for ( int j = 0; j < 16; j++ ) { trgcond[j][i] = 0; }
556 }
557 }
558
559
560
561
562 for ( int i = 0; i < nclock; i++ )
563 {
564 for ( int j = 0; j < 48; j++ )
565 {
566 if ( trgcond[j][i] ) m_pIBGT->setTrigCond( j, 1 );
567 }
568 }
569
570
571
572
573 m_pIBGT->GlobalTrig();
574
575
576
577
578 ifpass = m_pIBGT->getIfpass();
579 if ( ifpass )
580 {
581 passNo++;
582 log << MSG::INFO << "pass event number is " << passNo << endl;
583 }
584
585
586
587
588 if ( writeFile == 2 )
589 {
590 if ( ifpass ) { setFilterPassed( true ); }
591 else { setFilterPassed( false ); }
592 }
593
594 if ( mTrigRootFlag )
595 {
596
597
598
599 for ( int i = 0; i < 48; i++ )
600 {
601 bool edge = false;
602 int NOne = 0;
603 m_condNOne[i] = -9;
604 m_condNZero[i] = -9;
605 for ( int j = 0; j < nclock; j++ )
606 {
607 m_mc_cond[i] += trgcond[i][j];
608 if ( trgcond[i][j] != 0 )
609 {
610 if ( NOne == 0 )
611 {
612 m_condNZero[i] = j;
613 m_trigCondi_MC->Fill( i );
614 }
615 edge = true;
616 NOne++;
617 }
618 else { edge = false; }
619 if ( edge == false && NOne != 0 ) break;
620 }
621 m_condNOne[i] = NOne;
622 }
623 m_cond_id = 48;
624
625
626
627
628 if ( m_runMode == 0 )
629 {
630 SmartDataPtr<TrigData> trigData( eventSvc(), "/Event/Trig/TrigData" );
631 if ( !trigData )
632 {
633 log << MSG::FATAL << "Could not find Trigger Data for physics analysis" << endmsg;
634 return StatusCode::FAILURE;
635 }
636
637 for ( int id = 0; id < 48; id++ )
638 {
639 if ( trigData->getTrigCondition( id ) != 0 ) { m_trigCondi_Data->Fill( id ); }
640 m_data_cond[id] = trigData->getTrigCondition( id );
641 }
642 m_cond_id = 48;
643 }
644 }
645
646
647
648
649 for ( int condId = 0; condId < 48; condId++ ) { delete trgcond[condId]; }
650 delete trgcond;
651
652 if ( mTrigRootFlag )
653 {
654 m_evtId = event;
655 m_tuple3->write();
656
657 m_mc_totE_all = m_pIBGT->getEmcTotE();
658 m_wetotE = m_pIBGT->getEmcWETotE();
659 m_eetotE = m_pIBGT->getEmcEETotE();
660
661 map<int, vector<complex<int>>, greater<int>> mymap;
662 mymap = m_pIBGT->getEmcClusId();
663 log << MSG::INFO << "EMC test: " << endmsg;
664 int emc_btc_id = 0;
665 for ( map<
int, vector<complex<int>>, greater<int>>::iterator
iter = mymap.begin();
667 {
668 if ( (
iter->first ) == 1 )
669 {
670 for (
unsigned int i = 0; i < (
iter->second ).size(); i++ )
671 {
672 log << MSG::INFO <<
"barrel theta is " << (
iter->second[i] ).
real() <<
" phi is "
673 << (
iter->second[i] ).
imag() << endmsg;
674 emc_btc_id++;
675 }
676 }
677 if ( (
iter->first ) == 0 )
678 {
679 for (
unsigned int i = 0; i < (
iter->second ).size(); i++ )
680 log << MSG::INFO <<
"east theta is " << (
iter->second[i] ).real() <<
" phi is "
681 << (
iter->second[i] ).
imag() << endmsg;
682 }
683 if ( (
iter->first ) == 2 )
684 {
685 for (
unsigned int i = 0; i < (
iter->second ).size(); i++ )
686 log << MSG::INFO <<
"west theta is " << (
iter->second[i] ).real() <<
" phi is "
687 << (
iter->second[i] ).
imag() << endmsg;
688 }
689 }
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764 m_tuple1->write();
765
766
767
768
769 vector<int> vstrkId;
770 vector<int> vltrkId;
771 vstrkId = m_pIBGT->getMdcStrkId();
772 vltrkId = m_pIBGT->getMdcLtrkId();
773 log << MSG::INFO << "Mdc test: " << endmsg;
774 for ( unsigned int i = 0; i < vstrkId.size(); i++ )
775 log << MSG::INFO << "short is " << vstrkId[i] << endmsg;
776 for ( unsigned int j = 0; j < vltrkId.size(); j++ )
777 { log << MSG::INFO << "long is " << vltrkId[j] << endmsg; }
778
779 map<int, vector<int>, greater<int>> tofmap;
780 tofmap = m_pIBGT->getTofHitPos();
781 log << MSG::INFO << "TOF test: " << endmsg;
782 for ( map<
int, vector<int>, greater<int>>::iterator
iter = tofmap.begin();
784 {
785 if (
iter->first == 0 )
786 {
787 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
788 { log << MSG::INFO <<
"east tof Id is " <<
iter->second[i] << endmsg; }
789 }
790 if (
iter->first == 1 )
791 {
792 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
793 { log << MSG::INFO <<
" barrel tof Id is " <<
iter->second[i] << endmsg; }
794 }
795 if (
iter->first == 2 )
796 {
797 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
798 { log << MSG::INFO <<
"west tof Id is " <<
iter->second[i] << endmsg; }
799 }
800 }
801
802
803 std::vector<int> vtmp;
804
805 vtmp = m_pIBGT->getMuclayerSeg();
806 m_index2 = 0;
807 for ( std::vector<int>::iterator
iter = vtmp.begin();
iter != vtmp.end();
iter++ )
808 {
809 m_fireLayer[m_index2] = (long)*
iter;
810 m_index2++;
811 if ( m_index2 > m_index2->range().distance() )
812 {
813 break;
814 cerr << "*********** too many index ************" << endl;
815 }
816 }
817
818 long trackb3 = 0, tracke3 = 0, trackb2 = 0, tracke2 = 0, trackb1 = 0, tracke1 = 0;
819 int trackwe = 0, trackee = 0;
820 for ( unsigned int i = 0; i < vtmp.size(); i++ )
821 {
822 if ( 0 <= vtmp[i] && vtmp[i] < 100 )
823 {
824 if ( ( vtmp[i] % 10 ) >= 3 )
825 {
826 tracke3++;
827 trackee++;
828 }
829 }
830 if ( 200 <= vtmp[i] )
831 {
832 if ( ( ( vtmp[i] - 200 ) % 10 ) >= 3 )
833 {
834 tracke3++;
835 trackwe++;
836 }
837 }
838 if ( 100 <= vtmp[i] && vtmp[i] < 200 )
839 {
840 if ( ( ( vtmp[i] - 100 ) % 10 ) >= 3 ) trackb3++;
841 }
842 }
843 m_ntrack3 = trackb3 + tracke3;
844
845 for ( unsigned int i = 0; i < vtmp.size(); i++ )
846 {
847 if ( 0 <= vtmp[i] && vtmp[i] < 100 )
848 {
849 if ( ( vtmp[i] % 10 ) >= 2 ) tracke2++;
850 }
851 if ( 200 <= vtmp[i] )
852 {
853 if ( ( ( vtmp[i] - 200 ) % 10 ) >= 2 ) tracke2++;
854 }
855 if ( 100 <= vtmp[i] && vtmp[i] < 200 )
856 {
857 if ( ( ( vtmp[i] - 100 ) % 10 ) >= 2 ) trackb2++;
858 }
859 }
860 m_ntrack2 = trackb2 + tracke2;
861
862 for ( unsigned int i = 0; i < vtmp.size(); i++ )
863 {
864 if ( 0 <= vtmp[i] && vtmp[i] < 100 )
865 {
866 if ( ( vtmp[i] % 10 ) >= 1 ) tracke1++;
867 }
868 if ( 200 <= vtmp[i] )
869 {
870 if ( ( ( vtmp[i] - 200 ) % 10 ) >= 1 ) tracke1++;
871 }
872 if ( 100 <= vtmp[i] && vtmp[i] < 200 )
873 {
874 if ( ( ( vtmp[i] - 100 ) % 10 ) >= 1 ) trackb1++;
875 }
876 }
877 m_ntrack1 = trackb1 + tracke1;
878
879
880 vtmp = m_pIBGT->getMuchitLayer();
881 m_index3 = 0;
882 for ( std::vector<int>::iterator
iter = vtmp.begin();
iter != vtmp.end();
iter++ )
883 {
884 m_hitLayer[m_index3] = (long)*
iter;
885 m_index3++;
886 if ( m_index3 > m_index3->range().distance() )
887 {
888 break;
889 cerr << "*********** too many index ************" << endl;
890 }
891 }
892
893 vtmp = m_pIBGT->getMuchitSeg();
894 m_index4 = 0;
895 for ( std::vector<int>::iterator
iter = vtmp.begin();
iter != vtmp.end();
iter++ )
896 {
897 m_hitSeg[m_index4] = *(
iter );
898 m_index4++;
899 if ( m_index4 > m_index4->range().distance() )
900 {
901 break;
902 cerr << "*********** too many index ************" << endl;
903 }
904 }
905 }
906
907
908
909
910 if ( ifoutEvtId == 1 )
911 {
912 ofstream eventnum( outEvtId.c_str(), ios_base::app );
913 if ( !ifpass ) eventnum << event << endl;
914 eventnum.close();
915 }
916
917
918
919
920 if ( ifoutEvtId == 2 )
921 {
922 ofstream eventnum( outEvtId.c_str(), ios_base::app );
923 if ( ifpass ) eventnum << event << endl;
924 eventnum.close();
925 }
926
927
928
929
930 if ( writeFile == 1 )
931 {
932 EVENT asciiEvt;
933 readin >> asciiEvt;
935 {
936 if ( ifpass == true ) readout << asciiEvt << endl;
937 }
938 else
939 cout << "********* Event No. from AsciiFile do not equal Event No. from TDS "
941 }
942
943
944
945
946 if ( m_runMode == 1 )
947 {
948 const int* trigcond = m_pIBGT->getTrigCond();
949 const int* trigchan = m_pIBGT->getTrigChan();
950 int window = 0;
951 int timing = 0;
952 bool preScale = false;
953
954 StatusCode sc = StatusCode::SUCCESS;
955 TrigEvent* aTrigEvent = new TrigEvent;
956 sc = eventSvc()->registerObject( "/Event/Trig", aTrigEvent );
957 if ( sc != StatusCode::SUCCESS )
958 { log << MSG::DEBUG << "Could not register TrigEvent, you can ignore." << endmsg; }
959
960 TrigData* aTrigData =
new TrigData( window, timing, trigcond, trigchan, preScale );
961 sc = eventSvc()->registerObject( "/Event/Trig/TrigData", aTrigData );
962 if ( sc != StatusCode::SUCCESS )
963 { log << MSG::ERROR << "Could not register TrigData!!!!!" << endmsg; }
964 }
965
966 return StatusCode::SUCCESS;
967}
std::multimap< unsigned int, TofData * > TofDataMap
double imag(const EvtComplex &c)
void runAclock_emc(int iclock, double stime, std::multimap< int, uint32_t, less< int > > emc_TC, EmcWaveform *blockWave)
void findEmcPeakTime(double &peak_time, EmcWaveform *blockWave)
void runAclock_tof(int iclock, double stime, int &idle_status, std::multimap< int, int, less< int > > tof_hitmap)
void getEmcAnalogSig(EmcDigiCol *emcDigiCol, EmcWaveform(&blockWave)[16], multimap< int, uint32_t, less< int > > &emc_TC)
void findSETime(multimap< int, uint32_t, less< int > > mdc_hitmap, multimap< int, int, less< int > > tof_hitmap, multimap< int, uint32_t, less< int > > emc_TC, double &stime, double &etime)
void stretchTrgCond(int nclock, int **&trgcond)
void runAclock_mdc(int iclock, double stime, multimap< int, uint32_t, less< int > > mdc_hitmap)
static int layer(const Identifier &id)
Values of different levels (failure returns 0).
static int wire(const Identifier &id)
unsigned int quality() const
static int phi_module(const Identifier &id)
static int barrel_ec(const Identifier &id)
Values of different levels (failure returns 0).
static int layer(const Identifier &id)
_EXTERN_ std::string TrigData