72 MsgStream log(
msgSvc(), name() );
73 log << MSG::INFO <<
"in initialize()" << endmsg;
78 ISvcLocator* svcLocator = Gaudi::svcLocator();
79 StatusCode sc = svcLocator->service(
"BesGlobalTrigSvc", m_tmpSvc );
81 if ( sc != StatusCode::SUCCESS )
82 { log << MSG::DEBUG <<
"Unable to open trigger service" << endmsg; }
90 static const bool CREATEIFNOTTHERE(
true );
91 sc = service(
"RawDataProviderSvc", m_rawDataProviderSvc, CREATEIFNOTTHERE );
92 if ( !sc.isSuccess() )
94 log << MSG::ERROR <<
"Could not load RawDataProviderSvc!" << m_rawDataProviderSvc
103 sc = svcLocator->service(
"RealizationSvc", tmpReal );
104 if ( !sc.isSuccess() )
105 { cout <<
"FATAL: Could not initialize Realization Service" << endl; }
106 else { m_RealizationSvc =
dynamic_cast<RealizationSvc*
>( tmpReal ); }
111 sc = svcLocator->service(
"EmcCalibConstSvc", emcCalibConstSvc );
112 if ( sc != StatusCode::SUCCESS )
113 { cout <<
"EmcRecDigit2Hit Error: Can't get EmcCalibConstSvc." << endl; }
120 NTuplePtr nt(
ntupleSvc(),
"FILE302/trig1" );
121 if ( nt ) m_tuple = nt;
124 m_tuple =
ntupleSvc()->book(
"FILE302/trig1", CLID_ColumnWiseTuple,
"TrigL1" );
127 sc = m_tuple->addItem(
"x", m_wire_x );
128 sc = m_tuple->addItem(
"y", m_wire_y );
129 sc = m_tuple->addItem(
"evtId", m_wire_evtId );
130 sc = m_tuple->addItem(
"delta_t", m_delta_tdc );
134 log << MSG::ERROR <<
"Cannot book N-tuple:" << long( m_tuple ) << endmsg;
135 return StatusCode::FAILURE;
139 NTuplePtr nt1(
ntupleSvc(),
"FILE302/trig2" );
140 if ( nt1 ) m_tuple1 = nt1;
143 m_tuple1 =
ntupleSvc()->book(
"FILE302/trig2", CLID_ColumnWiseTuple,
"TrigL1" );
146 sc = m_tuple1->addItem(
"RunId", m_RunId );
147 sc = m_tuple1->addItem(
"EventId", m_EventId );
148 sc = m_tuple1->addItem(
"mc_totE_all", m_mc_totE_all );
149 sc = m_tuple1->addItem(
"data_totE_all", m_data_totE_all );
150 sc = m_tuple1->addItem(
"mc_wetotE", m_wetotE );
151 sc = m_tuple1->addItem(
"data_wetotE", m_data_wetotE );
152 sc = m_tuple1->addItem(
"mc_eetotE", m_eetotE );
153 sc = m_tuple1->addItem(
"data_eetotE", m_data_eetotE );
154 sc = m_tuple1->addItem(
"index_btc", m_index_btc, 0, 330 );
155 sc = m_tuple1->addIndexedItem(
"btc_e", m_index_btc, m_btc_e );
156 sc = m_tuple1->addIndexedItem(
"data_btc", m_index_btc, m_data_btc );
157 sc = m_tuple1->addItem(
"cond_id", m_cond_id, 0, 48 );
158 sc = m_tuple1->addIndexedItem(
"mc_cond", m_cond_id, m_mc_cond );
159 sc = m_tuple1->addIndexedItem(
"data_cond", m_cond_id, m_data_cond );
160 sc = m_tuple1->addItem(
"block_id", m_block_id, 0, 12 );
161 sc = m_tuple1->addIndexedItem(
"mc_blockE", m_block_id, m_mc_blockE );
162 sc = m_tuple1->addIndexedItem(
"data_blockE", m_block_id, m_data_blockE );
163 sc = m_tuple1->addIndexedItem(
"R_blockE", m_block_id, m_R_blockE );
167 log << MSG::ERROR <<
"Cannot book N-tuple1:" << long( m_tuple1 ) << endmsg;
168 return StatusCode::FAILURE;
172 NTuplePtr nt2(
ntupleSvc(),
"FILE302/muc" );
173 if ( nt2 ) m_tuple2 = nt2;
176 m_tuple2 =
ntupleSvc()->book(
"FILE302/muc", CLID_ColumnWiseTuple,
"TrigL1" );
179 sc = m_tuple2->addItem(
"indexlayerSeg", m_index2, 0, 5000 );
180 sc = m_tuple2->addIndexedItem(
"nlayerSeg", m_index2, m_fireLayer, 0, 5000 );
181 sc = m_tuple2->addItem(
"indexhitLayer", m_index3, 0, 5000 );
182 sc = m_tuple2->addIndexedItem(
"nhitLayer", m_index3, m_hitLayer, 0, 5000 );
183 sc = m_tuple2->addItem(
"indexhitSeg", m_index4, 0, 5000 );
184 sc = m_tuple2->addIndexedItem(
"nhitSeg", m_index4, m_hitSeg, 0, 5000 );
185 sc = m_tuple2->addItem(
"indexpara", m_index5, 0, 5000 );
186 sc = m_tuple2->addIndexedItem(
"costheta", m_index5, m_costheta, 0, 5000 );
187 sc = m_tuple2->addIndexedItem(
"phi", m_index5, m_phi, 0, 5000 );
188 sc = m_tuple2->addIndexedItem(
"p", m_index5, m_p, 0, 5000 );
189 sc = m_tuple2->addIndexedItem(
"pdgcode", m_index5, m_pdgcode, 0, 5000 );
190 sc = m_tuple2->addItem(
"indexhitphi", m_index6, 0, 5000 );
191 sc = m_tuple2->addIndexedItem(
"hitphi", m_index6, m_hitphi, 0, 5000 );
193 sc = m_tuple2->addItem(
"nlayerEE", m_nlayerEE );
194 sc = m_tuple2->addItem(
"nlayerBR", m_nlayerBR );
195 sc = m_tuple2->addItem(
"nlayerWE", m_nlayerWE );
196 sc = m_tuple2->addItem(
"nlayerTotal", m_nlayerTotal );
197 sc = m_tuple2->addItem(
"nhitEE", m_nhitEE );
198 sc = m_tuple2->addItem(
"nhitBR", m_nhitBR );
199 sc = m_tuple2->addItem(
"nhitWE", m_nhitWE );
200 sc = m_tuple2->addItem(
"nhitTotal", m_nhitTotal );
202 sc = m_tuple2->addItem(
"mumcostheta", m_mumcostheta );
203 sc = m_tuple2->addItem(
"mumphi", m_mumphi );
205 sc = m_tuple2->addItem(
"trackfindall", m_trackfindall );
206 sc = m_tuple2->addItem(
"trackfind3l", m_trackfind3l );
207 sc = m_tuple2->addItem(
"trackb", m_trackb );
208 sc = m_tuple2->addItem(
"tracke", m_tracke );
209 sc = m_tuple2->addItem(
"ntrack1", m_ntrack1 );
210 sc = m_tuple2->addItem(
"ntrack2", m_ntrack2 );
211 sc = m_tuple2->addItem(
"ntrack3", m_ntrack3 );
213 sc = m_tuple2->addItem(
"ngoodevent", m_ngoodevent );
214 sc = m_tuple2->addItem(
"ngoodtrack", m_ngoodtrack );
218 log << MSG::ERROR <<
"Cannot book N-tuple2:" << long( m_tuple2 ) << endmsg;
219 return StatusCode::FAILURE;
223 NTuplePtr nt3(
ntupleSvc(),
"FILE302/trig3" );
224 if ( nt3 ) m_tuple3 = nt3;
227 m_tuple3 =
ntupleSvc()->book(
"FILE302/trig3", CLID_ColumnWiseTuple,
"TrigL1" );
230 sc = m_tuple3->addItem(
"evtId", m_evtId );
231 for (
int index = 0; index < 48; index++ )
233 std::ostringstream osname1;
234 osname1 <<
"cond" << index <<
"_1";
235 std::string name1 = osname1.str();
237 std::ostringstream osname2;
238 osname2 <<
"cond" << index <<
"_0";
239 std::string name2 = osname2.str();
240 m_tuple3->addItem( name1.c_str(), m_condNOne[index] );
241 m_tuple3->addItem( name2.c_str(), m_condNZero[index] );
246 log << MSG::ERROR <<
"Cannot book N-tuple3:" << long( m_tuple3 ) << endmsg;
247 return StatusCode::FAILURE;
272 sc = service(
"THistSvc", m_thistsvc );
273 if ( sc.isFailure() )
275 log << MSG::INFO <<
"Unable to retrieve pointer to THistSvc" << endmsg;
278 m_trigCondi_MC =
new TH1F(
"trgCond_MC",
"trgCond_MC", 48, 0, 48 );
279 sc = m_thistsvc->regHist(
"/TRG/trgCond_MC", m_trigCondi_MC );
280 m_trigCondi_Data =
new TH1F(
"trgCond_Data",
"trgCond_Data", 48, 0, 48 );
281 sc = m_thistsvc->regHist(
"/TRG/trgCond_Data", m_trigCondi_Data );
289 return StatusCode::SUCCESS;
292 MsgStream log(
msgSvc(), name() );
294 log << MSG::DEBUG <<
"in execute()" << endmsg;
302 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(),
"/Event/EventHeader" );
305 log << MSG::FATAL <<
"Could not find Event Header" << endmsg;
306 return ( StatusCode::FAILURE );
308 run = eventHeader->runNumber();
309 event = eventHeader->eventNumber();
321 if ( writeFile == 1 && event == 0 )
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;
335 multimap<int, uint32_t, less<int>> mdc_hitmap;
341 multimap<int, int, less<int>> tof_hitmap;
347 SmartDataPtr<MdcDigiCol> mdcDigiCol( eventSvc(),
"/Event/Digi/MdcDigiCol" );
350 log << MSG::FATAL <<
"Could not find MDC digi" << endmsg;
351 return ( StatusCode::FAILURE );
353 for ( MdcDigiCol::iterator iter3 = mdcDigiCol->begin(); iter3 != mdcDigiCol->end(); iter3++ )
358 int tdc = ( *iter3 )->getTimeChannel();
359 if ( tdc < 0x7FFFFFFF && tdc > 0 )
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 ) );
368 if ( layer >= 36 && layer <= 39 )
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 ) );
381 TofDataMap tofDigiMap = m_rawDataProviderSvc->tofDataMapEstime();
382 for ( TofDataMap::iterator iter3 = tofDigiMap.begin(); iter3 != tofDigiMap.end(); iter3++ )
385 TofData* p_tofDigi = iter3->second;
389 if ( barrel_ec == 1 )
391 if ( ( ( p_tofDigi->
quality() ) & 0x5 ) != 0x5 )
continue;
392 double tdc1 = p_tofDigi->
tdc1();
393 double tdc2 = p_tofDigi->
tdc2();
395 if ( tdc1 > tdc2 ) tdc = (int)tdc1;
396 else tdc = (int)tdc2;
397 typedef pair<int, int> vpair;
399 tof_hitmap.insert( vpair( tdc, 10000 * barrel_ec + 1000 * layer + im * 10 ) );
403 int tdc1 = (int)p_tofDigi->
tdc1();
404 typedef pair<int, int> vpair;
406 tof_hitmap.insert( vpair( tdc1, 10000 * barrel_ec + 1000 * layer + im * 10 ) );
413 SmartDataPtr<EmcDigiCol> emcDigiCol( eventSvc(),
"/Event/Digi/EmcDigiCol" );
416 log << MSG::FATAL <<
"Could not find EMC digi" << endmsg;
417 return ( StatusCode::FAILURE );
428 multimap<int, uint32_t, less<int>> emc_TC;
439 double peak_time = 0;
445 SmartDataPtr<MucDigiCol> mucDigiCol( eventSvc(),
"/Event/Digi/MucDigiCol" );
448 log << MSG::FATAL <<
"Could not find MUC digi" << endmsg;
449 return ( StatusCode::FAILURE );
451 if ( m_mucDigi ) m_mucDigi->getMucDigi( mucDigiCol );
456 if ( event % 10000 == 0 ) std::cout <<
"---> EventNo is " <<
event << std::endl;
466 double stime = -1, etime = -1;
467 findSETime( mdc_hitmap, tof_hitmap, emc_TC, stime, etime );
471 if ( stime >= 0 ) { nclock = int( ( etime - stime ) / 24 ) + 1; }
477 int** trgcond =
new int*[48];
478 for (
int condId = 0; condId < 48; condId++ ) { trgcond[condId] =
new int[nclock]; }
481 int idle_status = -1;
483 for (
int iclock = 0; iclock < nclock; iclock++ )
508 StatusCode status = m_pIBGT->setTrigCondition();
509 if ( status != StatusCode::SUCCESS )
511 log << MSG::FATAL <<
"Could not set trigger condition index" << endmsg;
512 return StatusCode::FAILURE;
518 for (
int condId = 0; condId < 48; condId++ )
519 { trgcond[condId][iclock] = m_pIBGT->getTrigCond( condId ); }
545 bool ifClus1 =
false;
546 for (
int i = 0; i < nclock; i++ )
548 if ( trgcond[0][i] > 0 ) ifClus1 =
true;
551 if ( ifClus1 ==
false )
553 for (
int i = 0; i < nclock; i++ )
555 for (
int j = 0; j < 16; j++ ) { trgcond[j][i] = 0; }
562 for (
int i = 0; i < nclock; i++ )
564 for (
int j = 0; j < 48; j++ )
566 if ( trgcond[j][i] ) m_pIBGT->setTrigCond( j, 1 );
573 m_pIBGT->GlobalTrig();
578 ifpass = m_pIBGT->getIfpass();
582 log << MSG::INFO <<
"pass event number is " << passNo << endl;
588 if ( writeFile == 2 )
590 if ( ifpass ) { setFilterPassed(
true ); }
591 else { setFilterPassed(
false ); }
599 for (
int i = 0; i < 48; i++ )
605 for (
int j = 0; j < nclock; j++ )
607 m_mc_cond[i] += trgcond[i][j];
608 if ( trgcond[i][j] != 0 )
613 m_trigCondi_MC->Fill( i );
618 else { edge =
false; }
619 if ( edge ==
false && NOne != 0 )
break;
621 m_condNOne[i] = NOne;
628 if ( m_runMode == 0 )
630 SmartDataPtr<TrigData> trigData( eventSvc(),
"/Event/Trig/TrigData" );
633 log << MSG::FATAL <<
"Could not find Trigger Data for physics analysis" << endmsg;
634 return StatusCode::FAILURE;
637 for (
int id = 0;
id < 48;
id++ )
639 if ( trigData->getTrigCondition(
id ) != 0 ) { m_trigCondi_Data->Fill(
id ); }
640 m_data_cond[id] = trigData->getTrigCondition(
id );
649 for (
int condId = 0; condId < 48; condId++ ) {
delete trgcond[condId]; }
657 m_mc_totE_all = m_pIBGT->getEmcTotE();
658 m_wetotE = m_pIBGT->getEmcWETotE();
659 m_eetotE = m_pIBGT->getEmcEETotE();
661 map<int, vector<complex<int>>, greater<int>> mymap;
662 mymap = m_pIBGT->getEmcClusId();
663 log << MSG::INFO <<
"EMC test: " << endmsg;
665 for ( map<
int, vector<
complex<int>>, greater<int>>::iterator
iter = mymap.begin();
668 if ( (
iter->first ) == 1 )
670 for (
unsigned int i = 0; i < (
iter->second ).size(); i++ )
672 log << MSG::INFO <<
"barrel theta is " << (
iter->second[i] ).
real() <<
" phi is "
673 << (
iter->second[i] ).
imag() << endmsg;
677 if ( (
iter->first ) == 0 )
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;
683 if ( (
iter->first ) == 2 )
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;
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; }
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();
785 if (
iter->first == 0 )
787 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
788 { log << MSG::INFO <<
"east tof Id is " <<
iter->second[i] << endmsg; }
790 if (
iter->first == 1 )
792 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
793 { log << MSG::INFO <<
" barrel tof Id is " <<
iter->second[i] << endmsg; }
795 if (
iter->first == 2 )
797 for (
unsigned int i = 0; i <
iter->second.size(); i++ )
798 { log << MSG::INFO <<
"west tof Id is " <<
iter->second[i] << endmsg; }
803 std::vector<int> vtmp;
805 vtmp = m_pIBGT->getMuclayerSeg();
807 for ( std::vector<int>::iterator
iter = vtmp.begin();
iter != vtmp.end();
iter++ )
809 m_fireLayer[m_index2] = (long)*
iter;
811 if ( m_index2 > m_index2->range().distance() )
814 cerr <<
"*********** too many index ************" << endl;
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++ )
822 if ( 0 <= vtmp[i] && vtmp[i] < 100 )
824 if ( ( vtmp[i] % 10 ) >= 3 )
830 if ( 200 <= vtmp[i] )
832 if ( ( ( vtmp[i] - 200 ) % 10 ) >= 3 )
838 if ( 100 <= vtmp[i] && vtmp[i] < 200 )
840 if ( ( ( vtmp[i] - 100 ) % 10 ) >= 3 ) trackb3++;
843 m_ntrack3 = trackb3 + tracke3;
845 for (
unsigned int i = 0; i < vtmp.size(); i++ )
847 if ( 0 <= vtmp[i] && vtmp[i] < 100 )
849 if ( ( vtmp[i] % 10 ) >= 2 ) tracke2++;
851 if ( 200 <= vtmp[i] )
853 if ( ( ( vtmp[i] - 200 ) % 10 ) >= 2 ) tracke2++;
855 if ( 100 <= vtmp[i] && vtmp[i] < 200 )
857 if ( ( ( vtmp[i] - 100 ) % 10 ) >= 2 ) trackb2++;
860 m_ntrack2 = trackb2 + tracke2;
862 for (
unsigned int i = 0; i < vtmp.size(); i++ )
864 if ( 0 <= vtmp[i] && vtmp[i] < 100 )
866 if ( ( vtmp[i] % 10 ) >= 1 ) tracke1++;
868 if ( 200 <= vtmp[i] )
870 if ( ( ( vtmp[i] - 200 ) % 10 ) >= 1 ) tracke1++;
872 if ( 100 <= vtmp[i] && vtmp[i] < 200 )
874 if ( ( ( vtmp[i] - 100 ) % 10 ) >= 1 ) trackb1++;
877 m_ntrack1 = trackb1 + tracke1;
880 vtmp = m_pIBGT->getMuchitLayer();
882 for ( std::vector<int>::iterator
iter = vtmp.begin();
iter != vtmp.end();
iter++ )
884 m_hitLayer[m_index3] = (long)*
iter;
886 if ( m_index3 > m_index3->range().distance() )
889 cerr <<
"*********** too many index ************" << endl;
893 vtmp = m_pIBGT->getMuchitSeg();
895 for ( std::vector<int>::iterator
iter = vtmp.begin();
iter != vtmp.end();
iter++ )
897 m_hitSeg[m_index4] = *(
iter );
899 if ( m_index4 > m_index4->range().distance() )
902 cerr <<
"*********** too many index ************" << endl;
910 if ( ifoutEvtId == 1 )
912 ofstream eventnum( outEvtId.c_str(), ios_base::app );
913 if ( !ifpass ) eventnum <<
event << endl;
920 if ( ifoutEvtId == 2 )
922 ofstream eventnum( outEvtId.c_str(), ios_base::app );
923 if ( ifpass ) eventnum <<
event << endl;
930 if ( writeFile == 1 )
936 if ( ifpass ==
true ) readout << asciiEvt << endl;
939 cout <<
"********* Event No. from AsciiFile do not equal Event No. from TDS "
946 if ( m_runMode == 1 )
948 const int* trigcond = m_pIBGT->getTrigCond();
949 const int* trigchan = m_pIBGT->getTrigChan();
952 bool preScale =
false;
954 StatusCode sc = StatusCode::SUCCESS;
956 sc = eventSvc()->registerObject(
"/Event/Trig", aTrigEvent );
957 if ( sc != StatusCode::SUCCESS )
958 { log << MSG::DEBUG <<
"Could not register TrigEvent, you can ignore." << endmsg; }
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; }
966 return StatusCode::SUCCESS;
984 multimap<
int,
int, less<int>> tof_hitmap,
985 multimap<
int, uint32_t, less<int>> emc_TC,
double& stime,
987 std::multimap<int, uint32_t, less<int>>::iterator mdc_iter = mdc_hitmap.begin();
988 double smdctime = -1, emdctime = -1;
989 if ( mdc_hitmap.size() != 0 )
991 smdctime = ( mdc_iter->first ) * 0.09375;
992 mdc_iter = mdc_hitmap.end();
994 emdctime = ( mdc_iter->first ) * 0.09375;
997 std::multimap<int, int, less<int>>::iterator tof_iter = tof_hitmap.begin();
998 double stoftime = -1, etoftime = -1;
999 if ( tof_hitmap.size() != 0 )
1001 stoftime = ( tof_iter->first );
1002 tof_iter = tof_hitmap.end();
1004 etoftime = ( tof_iter->first );
1007 std::multimap<int, uint32_t, less<int>>::iterator emc_iter = emc_TC.begin();
1008 double semctime = -1, eemctime = -1;
1009 if ( emc_TC.size() != 0 )
1011 semctime = ( emc_iter->first );
1012 emc_iter = emc_TC.end();
1014 eemctime = ( emc_iter->first );
1017 stime = -1, etime = -1;
1018 if ( smdctime >= 0 && stoftime >= 0 )
1020 if ( smdctime > stoftime ) stime = stoftime;
1021 else stime = smdctime;
1023 if ( ( emdctime + 800 ) > ( etoftime + 24 ) ) etime = emdctime + 800;
1024 else etime = etoftime + 24;
1026 else if ( smdctime < 0 && stoftime >= 0 )
1029 etime = etoftime + 24;
1031 else if ( smdctime >= 0 && stoftime < 0 )
1034 etime = emdctime + 800;
1042 if ( semctime >= 0 && stime >= 0 )
1044 if ( semctime > stime ) stime = stime;
1045 else stime = semctime;
1047 if ( ( eemctime + 16 * 24 ) > etime ) etime = eemctime + 16 * 24;
1050 else if ( semctime < 0 && stime >= 0 )
1055 else if ( semctime >= 0 && stime < 0 )
1058 etime = eemctime + 16 * 24;
1249 multimap<
int, uint32_t, less<int>>& emc_TC ) {
1254 for (
int i = 0; i < 11; i++ )
1256 for (
int j = 0; j < 30; j++ ) { bwave[i][j].
makeWaveformTrg( 0, 0 ); }
1258 for (
int i = 0; i < 32; i++ )
1260 if ( i < 16 ) blockWave[i].makeWaveformTrg( 0, 0 );
1265 for ( EmcDigiCol::iterator iter3 = emcDigiCol->begin(); iter3 != emcDigiCol->end(); iter3++ )
1272 int index = emcCalibConstSvc->getIndex( module, theta, phi );
1273 double trgGain = m_RealizationSvc->getTrgGain( index );
1274 double adc = (double)( *iter3 )->getChargeChannel();
1275 double mv = RandGauss::shoot( 978., 14. );
1277 if ( ( *iter3 )->getMeasure() == 0 ) adc = adc * 2 * mv * 2 / 65535. * ( trgGain );
1278 else if ( ( *iter3 )->getMeasure() == 1 ) adc = adc * 16 * mv * 2 / 65535 * ( trgGain );
1279 else adc = adc * 64 * mv * 2 / 65535 * ( trgGain );
1281 unsigned int tdc = ( *iter3 )->getTimeChannel();
1282 int theTC = m_emcDigi->getTCThetaId( module, theta, phi );
1283 int phiTC = m_emcDigi->getTCPhiId( module, theta, phi );
1288 eewave[phiTC] += wave1;
1293 bwave[theTC][phiTC] += wave1;
1298 wewave[phiTC] += wave1;
1303 for (
int i = 0; i < 11; i++ )
1305 for (
int j = 0; j < 30; j++ )
1307 int time_low = bwave[i][j].
frontEdgeTrg( m_pIBGT->getL1TC_GATE() );
1308 int time_high = bwave[i][j].
frontEdgeTrg( m_pIBGT->getL1TC_THRESH() );
1311 if ( time_high >= 0 )
1313 if ( time_low * 50 + 1500 > time_high * 50 )
time = time_low * 50 + 1500;
1314 else time = time_high * 50;
1315 uint32_t TCID = ( 1 & 0xFF ) << 16;
1316 TCID = TCID | ( ( i & 0xFF ) << 8 );
1317 TCID = TCID | ( j & 0xFF );
1318 typedef pair<int, uint32_t> vpair;
1319 emc_TC.insert( vpair(
time, TCID ) );
1322 if ( time_low >= 0 )
1324 int blockId = m_emcDigi->getBLKId( i, j );
1325 blockWave[blockId + 2] += bwave[i][j];
1330 for (
int i = 0; i < 32; i++ )
1333 int time_low1 = eewave[i].
frontEdgeTrg( m_pIBGT->getL1TC_GATE() );
1334 int time_high1 = eewave[i].
frontEdgeTrg( m_pIBGT->getL1TC_THRESH() );
1336 if ( time_high1 >= 0 )
1338 if ( time_low1 * 50 + 1500 > time_high1 * 50 ) time1 = time_low1 * 50 + 1500;
1339 else time1 = time_high1 * 50;
1340 uint32_t TCID1 = ( 0 & 0xFF ) << 16;
1341 TCID1 = TCID1 | ( ( 0 & 0xFF ) << 8 );
1342 TCID1 = TCID1 | ( i & 0xFF );
1343 typedef pair<int, uint32_t> vpair;
1344 emc_TC.insert( vpair( time1, TCID1 ) );
1346 if ( time_low1 >= 0 )
1348 if ( i < 16 ) blockWave[0] += eewave[i];
1349 else blockWave[1] += eewave[i];
1352 int time_low2 = wewave[i].
frontEdgeTrg( m_pIBGT->getL1TC_GATE() );
1353 int time_high2 = wewave[i].
frontEdgeTrg( m_pIBGT->getL1TC_THRESH() );
1355 if ( time_high2 >= 0 )
1357 if ( time_low2 * 50 + 1500 > time_high2 * 50 ) time2 = time_low2 * 50 + 1500;
1358 else time2 = time_high2 * 50;
1359 uint32_t TCID2 = ( 2 & 0xFF ) << 16;
1360 TCID2 = TCID2 | ( ( 0 & 0xFF ) << 8 );
1361 TCID2 = TCID2 | ( i & 0xFF );
1362 typedef pair<int, uint32_t> vpair;
1363 emc_TC.insert( vpair( time2, TCID2 ) );
1365 if ( time_low2 >= 0 )
1367 if ( i < 16 ) blockWave[14] += wewave[i];
1368 else blockWave[15] += wewave[i];
1398 for (
int icond = 0; icond < 48; icond++ )
1401 bool retrig =
false;
1402 for (
int iclock = 0; iclock < nclock; iclock++ )
1406 if ( icond < 7 || icond == 12 || icond == 13 )
1408 if ( sclock != -1 && iclock - sclock == emc_clus ) sclock = -1;
1409 if ( sclock == -1 && trgcond[icond][iclock] > 0 )
1411 if ( iclock == 0 ) sclock = iclock;
1414 if ( trgcond[icond][iclock] * trgcond[icond][iclock - 1] == 0 ) sclock = iclock;
1417 if ( sclock != -1 && iclock - sclock < emc_clus ) trgcond[icond][iclock] = 1;
1421 if ( sclock != -1 && iclock - sclock == emc_ener ) sclock = -1;
1422 if ( sclock == -1 && trgcond[icond][iclock] > 0 )
1424 if ( iclock == 0 ) sclock = iclock;
1427 if ( trgcond[icond][iclock] * trgcond[icond][iclock - 1] == 0 ) sclock = iclock;
1430 if ( sclock != -1 && iclock - sclock < emc_ener && trgcond[icond][iclock] == 0 )
1432 if ( retrig ==
true )
1434 if ( trgcond[icond][iclock] > 0 )
1440 if ( sclock != -1 && iclock - sclock < emc_ener ) trgcond[icond][iclock] = 1;
1443 else if ( icond >= 16 && icond < 23 )
1445 if ( sclock != -1 && iclock - sclock == tof ) sclock = -1;
1446 if ( sclock == -1 && trgcond[icond][iclock] > 0 )
1448 if ( iclock == 0 ) sclock = iclock;
1451 if ( trgcond[icond][iclock] * trgcond[icond][iclock - 1] == 0 ) sclock = iclock;
1454 if ( sclock != -1 && iclock - sclock < tof ) trgcond[icond][iclock] = 1;
1456 else if ( icond >= 38 )
1458 if ( icond == 39 || icond == 43 )
1460 if ( sclock != -1 && iclock - sclock == mdc_n ) sclock = -1;
1461 if ( sclock == -1 && trgcond[icond][iclock] > 0 )
1463 if ( iclock == 0 ) sclock = iclock;
1466 if ( trgcond[icond][iclock] * trgcond[icond][iclock - 1] == 0 ) sclock = iclock;
1469 if ( sclock != -1 && iclock - sclock < mdc_n ) trgcond[icond][iclock] = 1;
1473 if ( sclock != -1 && iclock - sclock ==
mdc ) sclock = -1;
1474 if ( sclock == -1 && trgcond[icond][iclock] > 0 )
1476 if ( iclock == 0 ) sclock = iclock;
1479 if ( trgcond[icond][iclock] * trgcond[icond][iclock - 1] == 0 ) sclock = iclock;
1482 if ( sclock != -1 && iclock - sclock <
mdc ) trgcond[icond][iclock] = 1;
1497 int delay[48] = { 24, 24, 24, 24, 24, 24, 24, 7, 7, 7, 7, 7, 24, 24, 7, 7,
1498 0, 0, 0, 0, 0, 0, 0, 83, 83, 83, 6, 6, 6, 83, 83, 83,
1499 97, 97, 97, 97, 97, 97, 0, 0, 0, 0, 0, 0, 0, 0, 122, 122 };
1501 for (
int icond = 0; icond < 48; icond++ )
1503 for (
int iclock = nclock - 1; iclock >= 0; iclock-- )
1505 if ( iclock < delay[icond] ) trgcond[icond][iclock] = 0;
1506 else { trgcond[icond][iclock] = trgcond[icond][iclock - delay[icond]]; }
1513 int delay[48] = { 1, 1, 1, 1, 1, 1, 1, 18, 18, 18, 18, 18, 1, 1, 18, 18,
1514 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
1515 14, 14, 14, 14, 14, 14, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 };
1517 for (
int icond = 0; icond < 48; icond++ )
1519 for (
int iclock = nclock - 1; iclock >= 0; iclock-- )
1521 if ( iclock < delay[icond] ) trgcond[icond][iclock] = 0;
1522 else trgcond[icond][iclock] = trgcond[icond][iclock - delay[icond]];