140 log << MSG::INFO <<
"TofRawDataProvider::tofDataMapFull()" << endmsg;
142 if ( !m_tofDataMap.empty() )
145 log << MSG::WARNING <<
"TofRawDataProvider::tofDataMapFull: m_tofDataMap is NOT empty!"
149 for ( ;
iter != m_tofDataMap.end();
iter++ ) {
delete ( *iter ).second; }
150 m_tofDataMap.clear();
153 std::string evtDataSvc_name(
"EventDataSvc" );
158 IDataProviderSvc* eventSvc;
159 StatusCode sc =
m_svcLocator->service( evtDataSvc_name, eventSvc,
true );
160 if ( !sc.isSuccess() )
163 <<
"TofRawDataProvider::tofDataMapFull: ERROR Could not load "
170 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc,
"/Event/EventHeader" );
173 log << MSG::FATAL <<
"TofRawDataProvider could not find Event Header!" << endmsg;
176 m_run = eventHeader->runNumber();
177 m_event = eventHeader->eventNumber();
179 if (
tofCaliSvc->chooseConstants( m_run, m_event ) == StatusCode::FAILURE ) {
return; }
180 bool mc = ( m_run < 0 ) ?
true :
false;
182 qCorr = qCorr && ( !mc );
184 bool misLable = bool(
tofCaliSvc->MisLable() );
185 misLable = ( !mc && misLable );
189 for (
unsigned int i = 0; i < 5; i++ )
192 if ( identmp != 0x2fffffff ) { deadId.push_back( identmp ); }
194 if ( identmp != 0x2fffffff ) { deadId.push_back( identmp ); }
196 for (
unsigned int i = 0; i < 500; i++ )
199 if ( identmp == 0x2fffffff )
break;
200 else { deadId.push_back( identmp ); }
204 SmartDataPtr<TofDigiCol> tofDigiCol( eventSvc,
"/Event/Digi/TofDigiCol" );
207 log << MSG::WARNING <<
"TofRawDataProvider::tofDataMapFull: Could not find Tof Digi Data!"
215 std::vector<Adc*> chargeVec;
216 std::vector<Tdc*> timeVec;
218 TofDigiCol::iterator
iter = tofDigiCol->begin();
219 for ( ;
iter != tofDigiCol->end();
iter++ )
222 unsigned int iden_value = iden.
get_value();
225 vector<int>::iterator iter_dead = deadId.begin();
226 for ( ; iter_dead != deadId.end(); iter_dead++ )
228 if ( iden_value == ( *iter_dead ) )
236 if ( mc ) {
continue; }
244 bore = string(
"Barrel" );
250 bore = string(
"East Endcap" );
255 bore = string(
"West Endcap" );
260 bore = string(
"ETF(MRPC)" );
275 unsigned int overflow = ( *iter )->getOverflow();
276 if (
TofID::is_scin( iden ) && ( ( overflow & 0xfe000000 ) == 0xfe000000 ) )
continue;
287 if ( ( iden_value & 0x2fffffe0 ) == 0x2000c800 )
289 iden_value = 0x2000c900 + ( iden_value & 0x1f );
293 if ( ( iden_value & 0x2fffffe0 ) == 0x2000c820 )
295 iden_value = 0x2000c8e0 + ( iden_value & 0x1f );
304 bool multiQ = ( ( overflow & 0x8 ) != 0 );
305 bool multiT = ( ( overflow & 0x4 ) != 0 );
307 unsigned int tdcChannel = ( *iter )->getTimeChannel();
308 unsigned int adcChannel = ( *iter )->getChargeChannel();
310 { adcChannel = ( adcChannel | 0x80000 ); }
312 if ( ( adcChannel & 0x7fffffff ) != 0x7fffffff )
322 { adcChannel += 0x18000; }
328 chargeVec.push_back( adc );
331 if ( tdcChannel != 0x7fffffff )
339 { tdcChannel += 0x18000; }
345 timeVec.push_back( tdc );
348 if ( multiT || multiQ )
350 TofDigiCol::iterator iter_next =
iter + 1;
351 if ( iter_next != tofDigiCol->end() )
353 unsigned int idenNext_value = ( ( *iter_next )->identify() ).get_value();
354 if ( iden_value == idenNext_value )
continue;
361 std::vector<PmtData*> pmtDataVec;
364 std::vector<Tdc*>::iterator iter_t = timeVec.begin();
365 for ( ; iter_t != timeVec.end(); iter_t++ )
367 int tclock = ( *iter_t )->clock();
370 pmt->
setTdc( ( *iter_t ) );
371 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
372 for ( ; iter_q != chargeVec.end(); iter_q++ )
374 if ( ( *iter_q )->times() != -1 ) {
continue; }
375 int qclock = ( *iter_q )->clock();
376 if (
abs( tclock - qclock ) < 2 )
378 if ( ( pmt->
quality() & 0x2 ) != 0 )
380 if ( ( *iter_q )->value() > pmt->
adc() )
383 pmt->
setAdc( ( *iter_q ) );
388 pmt->
setAdc( ( *iter_q ) );
392 pmtDataVec.push_back( pmt );
395 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
396 for ( ; iter_q != chargeVec.end(); iter_q++ )
398 if ( ( *iter_q )->times() != -1 ) {
continue; }
401 pmt->
setAdc( ( *iter_q ) );
402 pmtDataVec.push_back( pmt );
408 std::vector<Tdc*>::iterator iter_t = timeVec.begin();
409 for ( ; iter_t != timeVec.end(); iter_t++ )
411 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
412 for ( ; iter_q != chargeVec.end(); iter_q++ )
414 if ( ( ( *iter_q )->qtc() - ( *iter_t )->value() ) >
totForward &&
415 ( ( *iter_q )->qtc() - ( *iter_t )->value() ) <
totBackward )
419 pmt->
setTdc( ( *iter_t ) );
420 pmt->
setAdc( ( *iter_q ) );
421 pmtDataVec.push_back( pmt );
424 if ( ( *iter_t )->times() == -1 )
427 pmt->
setTdc( ( *iter_t ) );
428 pmtDataVec.push_back( pmt );
432 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
433 for ( ; iter_q != chargeVec.end(); iter_q++ )
435 if ( ( *iter_q )->times() != -1 ) {
continue; }
438 pmt->
setAdc( ( *iter_q ) );
439 pmtDataVec.push_back( pmt );
446 unsigned int iden_value_key = ( iden_value & 0xfffffffe );
453 if ( ( barrel_ec == 0 ) || ( barrel_ec == 2 ) )
455 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
456 for ( ; iter_pmt != pmtDataVec.end(); iter_pmt++ )
462 if ( barrel_ec == 2 && tofid == 42 )
465 iden_value_key = iden91;
468 if ( barrel_ec == 2 && tofid == 43 )
471 iden_value_key = iden90;
478 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
481 else if ( barrel_ec == 1 )
483 unsigned int count = m_tofDataMap.count( iden_value_key );
486 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
487 for ( ; iter_pmt != pmtDataVec.end(); iter_pmt++ )
491 if ( end == 0 ) { tof->
setForward( ( *iter_pmt ) ); }
494 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
499 pair<IterTofDataMap, IterTofDataMap> range =
500 m_tofDataMap.equal_range( iden_value_key );
501 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
502 for ( ; iter_pmt != pmtDataVec.end(); iter_pmt++ )
506 for (
unsigned int tofDataNumber = 0; tofDataNumber <
count;
507 tofDataNumber++,
iter++ )
510 bool matched =
false;
513 if ( ( ( *iter_pmt )->quality() & 0x1 ) != 0 )
515 if ( ( ( ( *iter ).second )->quality() & 0x1 ) != 0 )
517 double time1 = ( *iter_pmt )->tdc();
518 double time2 = ( ( *iter ).second )->tdc2();
523 if ( ( ( ( *iter ).second )->quality() & 0x2 ) != 0 )
525 double time1 = ( *iter_pmt )->tclock();
526 double time2 = ( *iter_pmt )->qclock();
527 double time3 = ( ( *iter ).second )->qclock2();
535 if ( ( ( *iter_pmt )->quality() & 0x2 ) != 0 )
537 if ( ( ( ( *iter ).second )->quality() & 0x1 ) != 0 )
539 if ( ( ( ( ( *iter ).second )->quality() & 0x2 ) != 0 ) )
541 double time1 = ( *iter_pmt )->qclock();
542 double time2 = ( ( *iter ).second )->tclock2();
543 double time3 = ( ( *iter ).second )->qclock2();
550 if ( ( ( ( ( *iter ).second )->quality() & 0x2 ) != 0 ) )
552 double time1 = ( *iter_pmt )->qclock();
553 double time2 = ( ( *iter ).second )->qclock2();
563 if ( ( ( ( *iter ).second )->quality() & 0xc ) == 0 )
564 { ( ( *iter ).second )->setForward( ( *iter_pmt ) ); }
570 tof->
setBackward( ( ( *iter ).second )->backward() );
572 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
579 if ( ( ( *iter_pmt )->quality() & 0x1 ) != 0 )
581 if ( ( ( ( *iter ).second )->quality() & 0x4 ) != 0 )
583 double time1 = ( *iter_pmt )->tdc();
584 double time2 = ( ( *iter ).second )->tdc1();
589 if ( ( ( ( *iter ).second )->quality() & 0x8 ) != 0 )
591 double time1 = ( *iter_pmt )->tclock();
592 double time2 = ( *iter_pmt )->qclock();
593 double time3 = ( ( *iter ).second )->qclock1();
601 if ( ( ( *iter_pmt )->quality() & 0x2 ) != 0 )
603 if ( ( ( ( *iter ).second )->quality() & 0x4 ) != 0 )
605 if ( ( ( ( ( *iter ).second )->quality() & 0x8 ) != 0 ) )
607 double time1 = ( *iter_pmt )->qclock();
608 double time2 = ( ( *iter ).second )->tclock1();
609 double time3 = ( ( *iter ).second )->qclock1();
617 if ( ( ( ( ( *iter ).second )->quality() & 0x8 ) != 0 ) )
619 double time1 = ( *iter_pmt )->qclock();
620 double time2 = ( ( *iter ).second )->qclock1();
630 if ( ( ( ( *iter ).second )->quality() & 0x3 ) == 0 )
631 { ( ( *iter ).second )->setBackward( ( *iter_pmt ) ); }
636 tof->
setForward( ( ( *iter ).second )->forward() );
639 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
649 if ( end == 0 ) { tof->
setForward( ( *iter_pmt ) ); }
652 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
667 unsigned int count = m_tofDataMap.count( iden_value_key );
670 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
671 for ( ; iter_pmt != pmtDataVec.end(); iter_pmt++ )
675 if ( end == 0 ) { tof->
setForward( ( *iter_pmt ) ); }
678 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
683 pair<IterTofDataMap, IterTofDataMap> range =
684 m_tofDataMap.equal_range( iden_value_key );
685 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
686 for ( ; iter_pmt != pmtDataVec.end(); iter_pmt++ )
690 for (
unsigned int tofDataNumber = 0; tofDataNumber <
count;
691 tofDataNumber++,
iter++ )
693 bool matched =
false;
696 if ( ( ( *iter_pmt )->quality() & 0x1 ) != 0 )
698 if ( ( ( ( *iter ).second )->quality() & 0x1 ) != 0 )
700 double time1 = ( *iter_pmt )->tdc();
701 double time2 = ( ( *iter ).second )->tdc2();
703 if ( endcap == 0 && tofid == 13 && strip == 5 )
742 if ( ( ( ( *iter ).second )->quality() & 0xc ) == 0 )
743 { ( ( *iter ).second )->setForward( ( *iter_pmt ) ); }
749 tof->
setBackward( ( ( *iter ).second )->backward() );
751 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
757 if ( ( ( *iter_pmt )->quality() & 0x1 ) != 0 )
759 if ( ( ( ( *iter ).second )->quality() & 0x4 ) != 0 )
761 double time1 = ( *iter_pmt )->tdc();
762 double time2 = ( ( *iter ).second )->tdc1();
764 if ( endcap == 0 && tofid == 13 && strip == 5 )
803 if ( ( ( ( *iter ).second )->quality() & 0x3 ) == 0 )
804 { ( ( *iter ).second )->setBackward( ( *iter_pmt ) ); }
809 tof->
setForward( ( ( *iter ).second )->forward() );
812 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
822 if ( end == 0 ) { tof->
setForward( ( *iter_pmt ) ); }
825 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
842 log << MSG::INFO <<
"TofRawDataProvider::tofDataMapOnlineMode()" << endmsg;
844 if ( !m_tofDataMapOnline.empty() )
849 for ( ;
iter != m_tofDataMapOnline.end();
iter++ ) {
delete ( *iter ).second; }
850 m_tofDataMapOnline.clear();
852 else return m_tofDataMapOnline;
855 std::string evtDataSvc_name(
"EventDataSvc" );
860 IDataProviderSvc* eventSvc;
861 StatusCode sc =
m_svcLocator->service( evtDataSvc_name, eventSvc,
true );
862 if ( !sc.isSuccess() )
865 <<
"TofRawDataProvider::tofDataMapOnlineMode(): ERROR Could not load "
868 return m_tofDataMapOnline;
872 SmartDataPtr<TofDigiCol> tofDigiCol( eventSvc,
"/Event/Digi/TofDigiCol" );
876 <<
"TofRawDataProvider::tofDataMapOnlineMode(): Could not find Tof "
879 return m_tofDataMapOnline;
882 TofDigiCol::iterator
iter = tofDigiCol->begin();
883 for ( ;
iter != tofDigiCol->end();
iter++ )
885 unsigned int overflow = ( *iter )->getOverflow();
886 if ( ( overflow & 0xfe000000 ) == 0xfe000000 )
continue;
890 bool noT = ( ( overflow & 0x10 ) != 0 );
896 unsigned int iden_value = iden.
get_value();
901 unsigned int tdcChannel = ( *iter )->getTimeChannel();
902 if ( tdcChannel == 0x7fffffff )
continue;
909 unsigned int iden_value_key = ( iden_value & 0xfffffffe );
910 if ( barrel_ec == 0 || barrel_ec == 2 )
915 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
917 else if ( barrel_ec == 1 || barrel_ec == 3 )
919 unsigned int count = m_tofDataMapOnline.count( iden_value_key );
927 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
932 pair<IterTofDataMap, IterTofDataMap> range =
933 m_tofDataMapOnline.equal_range( iden_value_key );
935 for (
unsigned int i = 0; i <
count; i++,
iter++ )
937 if ( ( end == 0 ) && ( ( ( ( *iter ).second )->quality() & 0x1 ) != 0 ) )
939 double time1 = pmt->
tdc();
940 double time2 = ( ( *iter ).second )->tdc2();
945 if ( ( ( ( *iter ).second )->quality() & 0x4 ) == 0 )
946 { ( ( *iter ).second )->setForward( pmt ); }
952 tof->
setBackward( ( ( *iter ).second )->backward() );
953 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
957 else if ( ( end == 1 ) && ( ( ( ( *iter ).second )->quality() & 0x4 ) != 0 ) )
959 double time1 = ( ( *iter ).second )->tdc1();
960 double time2 = pmt->
tdc();
966 if ( ( ( ( *iter ).second )->quality() & 0x1 ) == 0 )
967 { ( ( *iter ).second )->setBackward( pmt ); }
972 tof->
setForward( ( ( *iter ).second )->forward() );
974 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
985 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
991 return m_tofDataMapOnline;