1#include "GaudiKernel/Kernel.h"
2#include "GaudiKernel/IInterface.h"
3#include "GaudiKernel/IIncidentSvc.h"
4#include "GaudiKernel/Incident.h"
5#include "GaudiKernel/IIncidentListener.h"
6#include "GaudiKernel/StatusCode.h"
7#include "GaudiKernel/SvcFactory.h"
8#include "GaudiKernel/MsgStream.h"
9#include "GaudiKernel/IDataProviderSvc.h"
10#include "GaudiKernel/SmartDataPtr.h"
11#include "GaudiKernel/DataSvc.h"
12#include "EventModel/EventHeader.h"
13#include "Identifier/Identifier.h"
14#include "Identifier/TofID.h"
15#include "TofRawEvent/TofDigi.h"
16#include "TofCaliSvc/ITofCaliSvc.h"
17#include "TofQCorrSvc/ITofQCorrSvc.h"
18#include "TofQElecSvc/ITofQElecSvc.h"
19#include "DetVerSvc/IDetVerSvc.h"
20#include "RawDataProviderSvc/TofRawDataProvider.h"
22#include "RawEvent/RawDataUtil.h"
26#include "GaudiKernel/ThreadGaudi.h"
50 for( ;
iter != m_tofDataMap.end();
iter++ ) {
51 delete (*iter).second;
55 m_tofDataMapOnline.clear();
56 m_tofDataVectorOnline.clear();
57 m_tofDataMapEstime.clear();
58 m_tofDataVectorEstime.clear();
59 m_tofDataMapTof.clear();
60 m_tofDataVectorTof.clear();
61 m_tofDataMapEmc.clear();
62 m_tofDataVectorEmc.clear();
74 if( sc_det == StatusCode::SUCCESS ) {
75 log << MSG::INFO <<
"TofRawDataProvider Get Detector Version Service Sucessfully!" << endreq;
78 log << MSG::ERROR <<
"TofRawDataProvider Can NOT Retrieve DetVerSvc instance" << endreq;
79 return StatusCode::FAILURE;
84 if( scc == StatusCode::SUCCESS ) {
85 log << MSG::INFO <<
"TofRec Get Calibration Service Sucessfully!" << endreq;
88 log << MSG::ERROR <<
"TofRec Get Calibration Service Failed !" << endreq;
89 return StatusCode::FAILURE;
94 if (scq == StatusCode::SUCCESS) {
95 log << MSG::INFO <<
"TofRec Get Q Correction Service Sucessfully!" << endreq;
97 log << MSG::ERROR <<
"TofRec Get Q Correction Service Failed !" << endreq;
98 return StatusCode::FAILURE;
103 if (sce == StatusCode::SUCCESS) {
104 log << MSG::INFO <<
"TofRec Get Q Electronics Calibration Service Sucessfully!" << endreq;
106 log << MSG::ERROR <<
"TofRec Get Q Electronics Calibration Service Failed !" << endreq;
107 return StatusCode::FAILURE;
110 return StatusCode::SUCCESS;
116 log << MSG::DEBUG <<
"handle: " << inc.type() << endreq;
117 if ( inc.type() ==
"BeginEvent" ){
118 log << MSG::DEBUG <<
"Begin Event" << endreq;
120 for( ;
iter != m_tofDataMap.end();
iter++ ) {
121 delete (*iter).second;
124 for( ; iterOnline != m_tofDataMapOnline.end(); iterOnline++ ) {
125 delete (*iterOnline).second;
127 m_tofDataMap.clear();
128 m_tofDataMapOnline.clear();
129 m_tofDataVectorOnline.clear();
130 m_tofDataMapEstime.clear();
131 m_tofDataVectorEstime.clear();
132 m_tofDataMapTof.clear();
133 m_tofDataVectorTof.clear();
134 m_tofDataMapEmc.clear();
135 m_tofDataVectorEmc.clear();
147 log << MSG::INFO <<
"TofRawDataProvider::tofDataMapFull()" << endreq;
149 if( !m_tofDataMap.empty() ) {
151 log << MSG::WARNING <<
"TofRawDataProvider::tofDataMapFull: m_tofDataMap is NOT empty!" << endreq;
154 for( ;
iter != m_tofDataMap.end();
iter++ ) {
155 delete (*iter).second;
157 m_tofDataMap.clear();
160 std::string evtDataSvc_name(
"EventDataSvc");
161 if(isGaudiThreaded(
m_name)){
162 evtDataSvc_name += getGaudiThreadIDfromName(
m_name);
166 IDataProviderSvc* eventSvc;
167 StatusCode sc =
m_svcLocator->service( evtDataSvc_name.c_str(),eventSvc,
true );
168 if( !sc.isSuccess() ) {
169 log << MSG::FATAL <<
"TofRawDataProvider::tofDataMapFull: ERROR Could not load EventDataSvc" << endreq;
174 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc,
"/Event/EventHeader");
176 log << MSG::FATAL <<
"TofRawDataProvider could not find Event Header!" << endreq;
179 m_run = eventHeader->runNumber();
180 m_event = eventHeader->eventNumber();
182 bool mc = ( m_run < 0 ) ?
true:
false;
184 qCorr = qCorr && (!mc);
187 misLable = ( !mc && misLable );
191 for(
unsigned int i=0; i<5; i++ ) {
193 if( identmp != 0x2fffffff ) {
194 deadId.push_back( identmp );
197 if( identmp != 0x2fffffff ) {
198 deadId.push_back( identmp );
201 if( identmp != 0x2fffffff ) {
202 deadId.push_back( identmp );
207 SmartDataPtr<TofDigiCol> tofDigiCol(eventSvc,
"/Event/Digi/TofDigiCol");
209 log << MSG::WARNING <<
"TofRawDataProvider::tofDataMapFull: Could not find Tof Digi Data!" << endreq;
216 std::vector<Adc*> chargeVec;
217 std::vector<Tdc*> timeVec;
219 TofDigiCol::iterator
iter = tofDigiCol->begin();
220 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++ ) {
227 if( iden_value == (*iter_dead) ) {
233 if( mc ) {
continue; }
241 log << MSG::ERROR <<
"TofRawDataProvider::tofDataMapFull: Dead Channel Number is not Correct, please check TOF Calibration Constants! " << bore << endreq;
247 unsigned int overflow = (*iter)->getOverflow();
248 if(
TofID::is_scin(iden) && ( ( overflow & 0xfe000000 ) == 0xfe000000 ) )
continue;
258 if( ( iden_value & 0x2fffffe0 ) == 0x2000c800 ) {
259 iden_value = 0x2000c900 + ( iden_value & 0x1f );
263 if( ( iden_value & 0x2fffffe0 ) == 0x2000c820 ) {
264 iden_value = 0x2000c8e0 + ( iden_value & 0x1f );
273 bool multiQ = ( ( overflow & 0x8 ) != 0 );
274 bool multiT = ( ( overflow & 0x4 ) != 0 );
276 unsigned int tdcChannel = (*iter)->getTimeChannel();
277 unsigned int adcChannel = (*iter)->getChargeChannel();
279 adcChannel = ( adcChannel | 0x80000 );
282 if( (adcChannel&0x7fffffff) != 0x7fffffff ) {
290 adcChannel += 0x18000;
297 chargeVec.push_back( adc );
300 if( tdcChannel != 0x7fffffff ) {
306 tdcChannel += 0x18000;
313 timeVec.push_back( tdc );
316 if( multiT || multiQ ) {
317 TofDigiCol::iterator iter_next =
iter + 1;
318 if( iter_next != tofDigiCol->end() ) {
319 unsigned int idenNext_value = ((*iter_next)->identify()).get_value();
320 if( iden_value == idenNext_value )
continue;
327 std::vector<PmtData*> pmtDataVec;
329 std::vector<Tdc*>::iterator iter_t = timeVec.begin();
330 for( ; iter_t != timeVec.end(); iter_t++ ) {
331 int tclock = (*iter_t)->clock();
335 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
336 for( ; iter_q != chargeVec.end(); iter_q++ ) {
337 if( (*iter_q)->times() != -1 ) {
continue; }
338 int qclock = (*iter_q)->clock();
339 if(
abs(tclock-qclock)<2 ) {
340 if( ( pmt->
quality() & 0x2 ) != 0 ) {
341 if( (*iter_q)->value() > pmt->
adc() ) {
351 pmtDataVec.push_back( pmt );
354 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
355 for( ; iter_q != chargeVec.end(); iter_q++ ) {
356 if( (*iter_q)->times() != -1 ) {
continue; }
360 pmtDataVec.push_back( pmt );
366 std::vector<Tdc*>::iterator iter_t = timeVec.begin();
367 for( ; iter_t != timeVec.end(); iter_t++ ) {
368 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
369 for( ; iter_q != chargeVec.end(); iter_q++ ) {
370 if( ( (*iter_q)->qtc() - (*iter_t)->value() ) >
totForward && ( (*iter_q)->qtc() - (*iter_t)->value() ) <
totBackward ) {
375 pmtDataVec.push_back( pmt );
378 if( (*iter_t)->times() == -1 ) {
381 pmtDataVec.push_back( pmt );
385 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
386 for( ; iter_q != chargeVec.end(); iter_q++ ) {
387 if( (*iter_q)->times() != -1 ) {
continue; }
391 pmtDataVec.push_back( pmt );
399 unsigned int iden_value_key = (iden_value & 0xfffffffe );
405 if( ( barrel_ec == 0 ) || ( barrel_ec == 2 ) ) {
406 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
407 for( ; iter_pmt != pmtDataVec.end(); iter_pmt++ ) {
411 if( barrel_ec==2 && tofid==42 ) {
413 iden_value_key = iden91;
416 if( barrel_ec==2 && tofid==43 ) {
418 iden_value_key = iden90;
425 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
428 else if( barrel_ec == 1 ) {
429 unsigned int count = m_tofDataMap.count( iden_value_key );
431 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
432 for( ; iter_pmt != pmtDataVec.end(); iter_pmt++ ) {
442 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
446 pair< IterTofDataMap, IterTofDataMap > range = m_tofDataMap.equal_range( iden_value_key );
447 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
448 for( ; iter_pmt != pmtDataVec.end(); iter_pmt++ ) {
451 for(
unsigned int tofDataNumber = 0; tofDataNumber <
count; tofDataNumber++,
iter++ ) {
453 bool matched =
false;
455 if( ( (*iter_pmt)->quality() & 0x1 ) != 0 ) {
456 if( ( ((*iter).second)->quality() & 0x1 ) != 0 ) {
457 double time1 = (*iter_pmt)->tdc();
458 double time2 = ((*iter).second)->tdc2();
462 if( ( ((*iter).second)->quality() & 0x2 ) != 0 ) {
463 double time1 = (*iter_pmt)->tclock();
464 double time2 = (*iter_pmt)->qclock();
465 double time3 = ((*iter).second)->qclock2();
471 if( ( (*iter_pmt)->quality() & 0x2 ) != 0 ) {
472 if( ( ((*iter).second)->quality() & 0x1 ) != 0 ) {
473 if( ( ( ((*iter).second)->quality() & 0x2 ) != 0 ) ) {
474 double time1 = (*iter_pmt)->qclock();
475 double time2 = ((*iter).second)->tclock2();
476 double time3 = ((*iter).second)->qclock2();
481 if( ( ( ((*iter).second)->quality() & 0x2 ) != 0 ) ) {
482 double time1 = (*iter_pmt)->qclock();
483 double time2 = ((*iter).second)->qclock2();
492 if( ( ( (*iter).second)->quality() & 0xc ) == 0 ) {
493 ((*iter).second)->setForward( (*iter_pmt) );
501 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
507 if( ( (*iter_pmt)->quality() & 0x1 ) != 0 ) {
508 if( ( ((*iter).second)->quality() & 0x4 ) != 0 ) {
509 double time1 = (*iter_pmt)->tdc();
510 double time2 = ((*iter).second)->tdc1();
514 if( ( ((*iter).second)->quality() & 0x8 ) != 0 ) {
515 double time1 = (*iter_pmt)->tclock();
516 double time2 = (*iter_pmt)->qclock();
517 double time3 = ((*iter).second)->qclock1();
523 if( ( (*iter_pmt)->quality() & 0x2 ) != 0 ) {
524 if( ( ((*iter).second)->quality() & 0x4 ) != 0 ) {
525 if( ( ( ((*iter).second)->quality() & 0x8 ) != 0 ) ) {
526 double time1 = (*iter_pmt)->qclock();
527 double time2 = ((*iter).second)->tclock1();
528 double time3 = ((*iter).second)->qclock1();
535 if( ( ( ((*iter).second)->quality() & 0x8 ) != 0 ) ) {
536 double time1 = (*iter_pmt)->qclock();
537 double time2 = ((*iter).second)->qclock1();
546 if( ( ( (*iter).second)->quality() & 0x3 ) == 0 ) {
547 ((*iter).second)->setBackward( (*iter_pmt) );
552 tof->
setForward( ((*iter).second)->forward() );
555 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
571 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
585 unsigned int count = m_tofDataMap.count( iden_value_key );
587 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
588 for( ; iter_pmt != pmtDataVec.end(); iter_pmt++ ) {
598 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
602 pair< IterTofDataMap, IterTofDataMap > range = m_tofDataMap.equal_range( iden_value_key );
603 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
604 for( ; iter_pmt != pmtDataVec.end(); iter_pmt++ ) {
607 for(
unsigned int tofDataNumber = 0; tofDataNumber <
count; tofDataNumber++,
iter++ ) {
608 bool matched =
false;
610 if( ( (*iter_pmt)->quality() & 0x1 ) != 0 ) {
611 if( ( ((*iter).second)->quality() & 0x1 ) != 0 ) {
612 double time1 = (*iter_pmt)->tdc();
613 double time2 = ((*iter).second)->tdc2();
651 if( ( ( (*iter).second)->quality() & 0xc ) == 0 ) {
652 ((*iter).second)->setForward( (*iter_pmt) );
660 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
665 if( ( (*iter_pmt)->quality() & 0x1 ) != 0 ) {
666 if( ( ((*iter).second)->quality() & 0x4 ) != 0 ) {
667 double time1 = (*iter_pmt)->tdc();
668 double time2 = ((*iter).second)->tdc1();
706 if( ( ( (*iter).second)->quality() & 0x3 ) == 0 ) {
707 ((*iter).second)->setBackward( (*iter_pmt) );
712 tof->
setForward( ((*iter).second)->forward() );
715 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
731 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
750 log << MSG::INFO <<
"TofRawDataProvider::tofDataMapOnlineMode()" << endreq;
752 if( ! m_tofDataMapOnline.empty() ) {
755 for( ;
iter != m_tofDataMapOnline.end();
iter++ ) {
756 delete (*iter).second;
758 m_tofDataMapOnline.clear();
760 else return m_tofDataMapOnline;
763 std::string evtDataSvc_name(
"EventDataSvc");
764 if(isGaudiThreaded(
m_name)){
765 evtDataSvc_name += getGaudiThreadIDfromName(
m_name);
769 IDataProviderSvc* eventSvc;
770 StatusCode sc =
m_svcLocator->service( evtDataSvc_name.c_str(), eventSvc,
true );
771 if( !sc.isSuccess() ) {
772 log << MSG::FATAL <<
"TofRawDataProvider::tofDataMapOnlineMode(): ERROR Could not load EventDataSvc" << endreq;
773 return m_tofDataMapOnline;
777 SmartDataPtr<TofDigiCol> tofDigiCol(eventSvc,
"/Event/Digi/TofDigiCol");
779 log << MSG::WARNING <<
"TofRawDataProvider::tofDataMapOnlineMode(): Could not find Tof Digi Data!" << endreq;
780 return m_tofDataMapOnline;
783 TofDigiCol::iterator
iter = tofDigiCol->begin();
784 for( ;
iter != tofDigiCol->end();
iter++ ) {
785 unsigned int overflow = (*iter)->getOverflow();
786 if( ( overflow & 0xfe000000 ) == 0xfe000000 )
continue;
790 bool noT = ( ( overflow & 0x10 ) != 0 );
796 unsigned int iden_value = iden.
get_value();
801 unsigned int tdcChannel = (*iter)->getTimeChannel();
802 if( tdcChannel == 0x7fffffff )
continue;
809 unsigned int iden_value_key = ( iden_value & 0xfffffffe );
810 if( barrel_ec == 0 || barrel_ec == 2 ) {
814 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
816 else if( barrel_ec == 1 || barrel_ec == 3 ) {
817 unsigned int count = m_tofDataMapOnline.count( iden_value_key );
828 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
832 pair< IterTofDataMap, IterTofDataMap > range = m_tofDataMapOnline.equal_range( iden_value_key );
834 for(
unsigned int i=0; i<
count; i++,
iter++ ) {
835 if( ( end == 0 ) && ( ( ( (*iter).second)->quality() & 0x1 ) != 0 ) ) {
836 double time1 = pmt->
tdc();
837 double time2 = ((*iter).second)->tdc2();
840 if( ( ( (*iter).second)->quality() & 0x4 ) == 0 ) {
841 ((*iter).second)->setForward( pmt );
848 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
852 else if( ( end == 1 ) && ( ( ((*iter).second)->quality() & 0x4 ) != 0 ) ) {
853 double time1 = ((*iter).second)->tdc1();
854 double time2 = pmt->
tdc();
858 if( ( ( (*iter).second)->quality() & 0x1 ) == 0 ) {
859 ((*iter).second)->setBackward( pmt );
864 tof->
setForward( ((*iter).second)->forward() );
866 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
880 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
886 return m_tofDataMapOnline;
894 log << MSG::INFO <<
"TofRawDataProvider::tofDataVectorOnlineMode()" << endreq;
896 if( m_tofDataVectorOnline.size() != 0 ) {
897 if(!control)
return m_tofDataVectorOnline;
898 else m_tofDataVectorOnline.clear();
902 for( ;
iter != tofRawDataMap.end();
iter++ ) {
903 m_tofDataVectorOnline.push_back(
iter->second );
906 return m_tofDataVectorOnline;
918 if( !m_tofDataMapEstime.empty() ) {
919 m_tofDataMapEstime.clear();
923 for( ;
iter != m_tofDataMap.end();
iter++ ) {
924 if( ( ( ((*iter).second)->quality() & 0x5 ) != 0 ) && ((*iter).second)->tmatched() ) {
925 m_tofDataMapEstime.insert( make_pair( (*iter).first, (*iter).second ) );
929 iter = m_tofDataMapEstime.begin();
930 while(
iter != m_tofDataMapEstime.end() ) {
931 unsigned int iden_value = (*iter).first;
932 unsigned int count = m_tofDataMapEstime.count( iden_value );
933 for(
unsigned int i=0; i !=
count; i++,
iter++ ) {
934 ((*iter).second)->setTimes(
count );
938 return m_tofDataMapEstime;
943 if( m_tofDataVectorEstime.size() != 0 )
return m_tofDataVectorEstime;
948 m_tofDataVectorEstime.push_back(
iter->second );
950 return m_tofDataVectorEstime;
962 if( !m_tofDataMapTof.empty() ) {
963 m_tofDataMapTof.clear();
967 for( ;
iter != m_tofDataMap.end();
iter++ ) {
968 if( ( ( ((*iter).second)->quality() & 0xc ) == 0xc ) || ( ( ((*iter).second)->quality() & 0x3 ) == 0x3 ) ) {
969 if( estime > 1.0e-6 ) {
970 double tdc1 = ((*iter).second)->tdc1();
971 double tdc2 = ((*iter).second)->tdc2();
975 double offset = -264.0;
976 forward = ( ( ( estime - tdc1 ) < (
timeBackward - offset ) ) && ( ( tdc1 - estime ) < (
timeForward + offset ) ) );
977 backward = ( ( ( estime - tdc2 ) < (
timeBackward + offset ) ) && ( ( tdc2 - estime ) < (
timeForward + offset ) ) );
979 if( !forward && !backward )
continue;
981 m_tofDataMapTof.insert( make_pair( (*iter).first, (*iter).second ) );
985 iter = m_tofDataMapTof.begin();
986 while(
iter != m_tofDataMapTof.end() ) {
987 unsigned int iden_value = (*iter).first;
988 unsigned int count = m_tofDataMapTof.count( iden_value );
989 for(
unsigned int i=0; i !=
count; i++,
iter++ ) {
990 ((*iter).second)->setTimes(
count );
994 return m_tofDataMapTof;
999 if( m_tofDataVectorTof.size() != 0 ) {
1000 m_tofDataVectorTof.clear();
1006 m_tofDataVectorTof.push_back(
iter->second );
1008 return m_tofDataVectorTof;
1015 if( !m_hasFilled ) {
1020 if( !m_tofDataMapEmc.empty() ) {
1021 m_tofDataMapEmc.clear();
1025 for( ;
iter != m_tofDataMap.end();
iter++ ) {
1026 if( ( ((*iter).second)->quality() & 0xa ) != 0 ) {
1028 if( estime > 1.0e-6 ) {
1029 int t0clock =
static_cast<int>(estime/24.0);
1030 int clock1 = ((*iter).second)->qclock1();
1031 int clock2 = ((*iter).second)->qclock2();
1035 double offset = -11.0;
1039 if( !forward && !backward )
continue;
1042 m_tofDataMapEmc.insert( make_pair( (*iter).first, (*iter).second ) );
1046 iter = m_tofDataMapEmc.begin();
1047 while(
iter != m_tofDataMapEmc.end() ) {
1048 unsigned int iden_value = (*iter).first;
1049 unsigned int count = m_tofDataMapEmc.count( iden_value );
1050 for(
unsigned int i=0; i !=
count; i++,
iter++ ) {
1051 ((*iter).second)->setTimes(
count );
1055 return m_tofDataMapEmc;
1060 if( m_tofDataVectorEmc.size() != 0 ) {
1061 m_tofDataVectorEmc.clear();
1067 m_tofDataVectorEmc.push_back(
iter->second );
1069 return m_tofDataVectorEmc;
std::multimap< unsigned int, TofData * > TofDataMap
std::vector< TofData * > TofDataVector
std::multimap< unsignedint, TofData * >::iterator IterTofDataMap
DOUBLE_PRECISION count[2]
const double tClockBackward
const double tClockForward
const double timeBackward
const double timeDiffMRPC
ITofQElecSvc * tofQElecSvc
ITofQCorrSvc * tofQCorrSvc
ITofQElecSvc * tofQElecSvc
ITofQCorrSvc * tofQCorrSvc
void setValue(Identifier identify, int value)
virtual const int BrWest(unsigned int No)=0
virtual const int QElec()=0
virtual const int BrEast(unsigned int No)=0
virtual const int QCorr()=0
virtual const int MisLable()=0
virtual const int Endcap(unsigned int No)=0
value_type get_value() const
void setIdentify(unsigned int iden)
unsigned int quality() const
ISvcLocator * m_svcLocator
StatusCode initialize(ISvcLocator *svcLoc=0, IMessageSvc *pMsg=0)
void setForward(PmtData *pmt)
void setTMatched(bool tmatched)
void setBackward(PmtData *pmt)
void setIdentify(Identifier identify)
static Identifier cell_id(int barrel_ec, int layer, int phi_module, int end)
For a single crystal.
static bool is_scin(const Identifier &id)
static int end(const Identifier &id)
static bool is_barrel(const Identifier &id)
Test for barrel.
static bool is_mrpc(const Identifier &id)
static int phi_module(const Identifier &id)
static int barrel_ec(const Identifier &id)
Values of different levels (failure returns 0)
static value_type getIntID(int barrel_ec, int layer, int phi_module, int end)
TofDataMap & tofDataMapTof(double estime=0.0)
void handle(const Incident &)
TofDataVector & tofDataVectorTof(double estime=0.0)
TofDataMap & tofDataMapOnlineMode(uint32_t control=1)
TofDataMap & tofDataMapEstime()
TofDataVector & tofDataVectorEmc(double estime=0.0)
TofDataVector & tofDataVectorEstime()
TofDataVector & tofDataVectorOnlineMode(uint32_t control=1)
StatusCode initialize(bool mode=false, ISvcLocator *svcLoc=0, IMessageSvc *pMsg=0)
TofDataMap & tofDataMapEmc(double estime=0.0)
void setNumber(int number)