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();
183 bool mc = ( m_run < 0 ) ?
true:
false;
185 qCorr = qCorr && (!mc);
188 misLable = ( !mc && misLable );
192 for(
unsigned int i=0; i<5; i++ ) {
194 if( identmp != 0x2fffffff ) {
195 deadId.push_back( identmp );
198 if( identmp != 0x2fffffff ) {
199 deadId.push_back( identmp );
202 if( identmp != 0x2fffffff ) {
203 deadId.push_back( identmp );
208 SmartDataPtr<TofDigiCol> tofDigiCol(eventSvc,
"/Event/Digi/TofDigiCol");
210 log << MSG::WARNING <<
"TofRawDataProvider::tofDataMapFull: Could not find Tof Digi Data!" << endreq;
217 std::vector<Adc*> chargeVec;
218 std::vector<Tdc*> timeVec;
220 TofDigiCol::iterator
iter = tofDigiCol->begin();
221 for( ;
iter != tofDigiCol->end();
iter++ ) {
223 unsigned int iden_value = iden.
get_value();
226 vector<int>::iterator iter_dead = deadId.begin();
227 for( ; iter_dead != deadId.end(); iter_dead++ ) {
228 if( iden_value == (*iter_dead) ) {
234 if( mc ) {
continue; }
242 log << MSG::ERROR <<
"TofRawDataProvider::tofDataMapFull: Dead Channel Number is not Correct, please check TOF Calibration Constants! " << bore << endreq;
248 unsigned int overflow = (*iter)->getOverflow();
249 if(
TofID::is_scin(iden) && ( ( overflow & 0xfe000000 ) == 0xfe000000 ) )
continue;
259 if( ( iden_value & 0x2fffffe0 ) == 0x2000c800 ) {
260 iden_value = 0x2000c900 + ( iden_value & 0x1f );
264 if( ( iden_value & 0x2fffffe0 ) == 0x2000c820 ) {
265 iden_value = 0x2000c8e0 + ( iden_value & 0x1f );
274 bool multiQ = ( ( overflow & 0x8 ) != 0 );
275 bool multiT = ( ( overflow & 0x4 ) != 0 );
277 unsigned int tdcChannel = (*iter)->getTimeChannel();
278 unsigned int adcChannel = (*iter)->getChargeChannel();
280 adcChannel = ( adcChannel | 0x80000 );
283 if( (adcChannel&0x7fffffff) != 0x7fffffff ) {
291 adcChannel += 0x18000;
298 chargeVec.push_back( adc );
301 if( tdcChannel != 0x7fffffff ) {
307 tdcChannel += 0x18000;
314 timeVec.push_back( tdc );
317 if( multiT || multiQ ) {
318 TofDigiCol::iterator iter_next =
iter + 1;
319 if( iter_next != tofDigiCol->end() ) {
320 unsigned int idenNext_value = ((*iter_next)->identify()).get_value();
321 if( iden_value == idenNext_value )
continue;
328 std::vector<PmtData*> pmtDataVec;
330 std::vector<Tdc*>::iterator iter_t = timeVec.begin();
331 for( ; iter_t != timeVec.end(); iter_t++ ) {
332 int tclock = (*iter_t)->clock();
336 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
337 for( ; iter_q != chargeVec.end(); iter_q++ ) {
338 if( (*iter_q)->times() != -1 ) {
continue; }
339 int qclock = (*iter_q)->clock();
340 if(
abs(tclock-qclock)<2 ) {
341 if( ( pmt->
quality() & 0x2 ) != 0 ) {
342 if( (*iter_q)->value() > pmt->
adc() ) {
352 pmtDataVec.push_back( pmt );
355 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
356 for( ; iter_q != chargeVec.end(); iter_q++ ) {
357 if( (*iter_q)->times() != -1 ) {
continue; }
361 pmtDataVec.push_back( pmt );
367 std::vector<Tdc*>::iterator iter_t = timeVec.begin();
368 for( ; iter_t != timeVec.end(); iter_t++ ) {
369 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
370 for( ; iter_q != chargeVec.end(); iter_q++ ) {
371 if( ( (*iter_q)->qtc() - (*iter_t)->value() ) >
totForward && ( (*iter_q)->qtc() - (*iter_t)->value() ) <
totBackward ) {
376 pmtDataVec.push_back( pmt );
379 if( (*iter_t)->times() == -1 ) {
382 pmtDataVec.push_back( pmt );
386 std::vector<Adc*>::iterator iter_q = chargeVec.begin();
387 for( ; iter_q != chargeVec.end(); iter_q++ ) {
388 if( (*iter_q)->times() != -1 ) {
continue; }
392 pmtDataVec.push_back( pmt );
400 unsigned int iden_value_key = (iden_value & 0xfffffffe );
406 if( ( barrel_ec == 0 ) || ( barrel_ec == 2 ) ) {
407 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
408 for( ; iter_pmt != pmtDataVec.end(); iter_pmt++ ) {
412 if( barrel_ec==2 && tofid==42 ) {
414 iden_value_key = iden91;
417 if( barrel_ec==2 && tofid==43 ) {
419 iden_value_key = iden90;
426 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
429 else if( barrel_ec == 1 ) {
430 unsigned int count = m_tofDataMap.count( iden_value_key );
432 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
433 for( ; iter_pmt != pmtDataVec.end(); iter_pmt++ ) {
443 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
447 pair< IterTofDataMap, IterTofDataMap > range = m_tofDataMap.equal_range( iden_value_key );
448 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
449 for( ; iter_pmt != pmtDataVec.end(); iter_pmt++ ) {
452 for(
unsigned int tofDataNumber = 0; tofDataNumber <
count; tofDataNumber++,
iter++ ) {
454 bool matched =
false;
456 if( ( (*iter_pmt)->quality() & 0x1 ) != 0 ) {
457 if( ( ((*iter).second)->quality() & 0x1 ) != 0 ) {
458 double time1 = (*iter_pmt)->tdc();
459 double time2 = ((*iter).second)->tdc2();
463 if( ( ((*iter).second)->quality() & 0x2 ) != 0 ) {
464 double time1 = (*iter_pmt)->tclock();
465 double time2 = (*iter_pmt)->qclock();
466 double time3 = ((*iter).second)->qclock2();
472 if( ( (*iter_pmt)->quality() & 0x2 ) != 0 ) {
473 if( ( ((*iter).second)->quality() & 0x1 ) != 0 ) {
474 if( ( ( ((*iter).second)->quality() & 0x2 ) != 0 ) ) {
475 double time1 = (*iter_pmt)->qclock();
476 double time2 = ((*iter).second)->tclock2();
477 double time3 = ((*iter).second)->qclock2();
482 if( ( ( ((*iter).second)->quality() & 0x2 ) != 0 ) ) {
483 double time1 = (*iter_pmt)->qclock();
484 double time2 = ((*iter).second)->qclock2();
493 if( ( ( (*iter).second)->quality() & 0xc ) == 0 ) {
494 ((*iter).second)->setForward( (*iter_pmt) );
502 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
508 if( ( (*iter_pmt)->quality() & 0x1 ) != 0 ) {
509 if( ( ((*iter).second)->quality() & 0x4 ) != 0 ) {
510 double time1 = (*iter_pmt)->tdc();
511 double time2 = ((*iter).second)->tdc1();
515 if( ( ((*iter).second)->quality() & 0x8 ) != 0 ) {
516 double time1 = (*iter_pmt)->tclock();
517 double time2 = (*iter_pmt)->qclock();
518 double time3 = ((*iter).second)->qclock1();
524 if( ( (*iter_pmt)->quality() & 0x2 ) != 0 ) {
525 if( ( ((*iter).second)->quality() & 0x4 ) != 0 ) {
526 if( ( ( ((*iter).second)->quality() & 0x8 ) != 0 ) ) {
527 double time1 = (*iter_pmt)->qclock();
528 double time2 = ((*iter).second)->tclock1();
529 double time3 = ((*iter).second)->qclock1();
536 if( ( ( ((*iter).second)->quality() & 0x8 ) != 0 ) ) {
537 double time1 = (*iter_pmt)->qclock();
538 double time2 = ((*iter).second)->qclock1();
547 if( ( ( (*iter).second)->quality() & 0x3 ) == 0 ) {
548 ((*iter).second)->setBackward( (*iter_pmt) );
553 tof->
setForward( ((*iter).second)->forward() );
556 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
572 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
586 unsigned int count = m_tofDataMap.count( iden_value_key );
588 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
589 for( ; iter_pmt != pmtDataVec.end(); iter_pmt++ ) {
599 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
603 pair< IterTofDataMap, IterTofDataMap > range = m_tofDataMap.equal_range( iden_value_key );
604 std::vector<PmtData*>::iterator iter_pmt = pmtDataVec.begin();
605 for( ; iter_pmt != pmtDataVec.end(); iter_pmt++ ) {
608 for(
unsigned int tofDataNumber = 0; tofDataNumber <
count; tofDataNumber++,
iter++ ) {
609 bool matched =
false;
611 if( ( (*iter_pmt)->quality() & 0x1 ) != 0 ) {
612 if( ( ((*iter).second)->quality() & 0x1 ) != 0 ) {
613 double time1 = (*iter_pmt)->tdc();
614 double time2 = ((*iter).second)->tdc2();
616 if( endcap==0 && tofid==13 && strip==5 ) { matched = (
abs(time1-time2)<(100+
timeDiffMRPC) ); }
653 if( ( ( (*iter).second)->quality() & 0xc ) == 0 ) {
654 ((*iter).second)->setForward( (*iter_pmt) );
662 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
667 if( ( (*iter_pmt)->quality() & 0x1 ) != 0 ) {
668 if( ( ((*iter).second)->quality() & 0x4 ) != 0 ) {
669 double time1 = (*iter_pmt)->tdc();
670 double time2 = ((*iter).second)->tdc1();
672 if( endcap==0 && tofid==13 && strip==5 ) { matched = (
abs(time1-time2)<(100+
timeDiffMRPC) ); }
709 if( ( ( (*iter).second)->quality() & 0x3 ) == 0 ) {
710 ((*iter).second)->setBackward( (*iter_pmt) );
715 tof->
setForward( ((*iter).second)->forward() );
718 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
734 m_tofDataMap.insert( make_pair( iden_value_key, tof ) );
753 log << MSG::INFO <<
"TofRawDataProvider::tofDataMapOnlineMode()" << endreq;
755 if( ! m_tofDataMapOnline.empty() ) {
758 for( ;
iter != m_tofDataMapOnline.end();
iter++ ) {
759 delete (*iter).second;
761 m_tofDataMapOnline.clear();
763 else return m_tofDataMapOnline;
766 std::string evtDataSvc_name(
"EventDataSvc");
767 if(isGaudiThreaded(
m_name)){
768 evtDataSvc_name += getGaudiThreadIDfromName(
m_name);
772 IDataProviderSvc* eventSvc;
773 StatusCode sc =
m_svcLocator->service( evtDataSvc_name.c_str(), eventSvc,
true );
774 if( !sc.isSuccess() ) {
775 log << MSG::FATAL <<
"TofRawDataProvider::tofDataMapOnlineMode(): ERROR Could not load EventDataSvc" << endreq;
776 return m_tofDataMapOnline;
780 SmartDataPtr<TofDigiCol> tofDigiCol(eventSvc,
"/Event/Digi/TofDigiCol");
782 log << MSG::WARNING <<
"TofRawDataProvider::tofDataMapOnlineMode(): Could not find Tof Digi Data!" << endreq;
783 return m_tofDataMapOnline;
786 TofDigiCol::iterator
iter = tofDigiCol->begin();
787 for( ;
iter != tofDigiCol->end();
iter++ ) {
788 unsigned int overflow = (*iter)->getOverflow();
789 if( ( overflow & 0xfe000000 ) == 0xfe000000 )
continue;
793 bool noT = ( ( overflow & 0x10 ) != 0 );
799 unsigned int iden_value = iden.
get_value();
804 unsigned int tdcChannel = (*iter)->getTimeChannel();
805 if( tdcChannel == 0x7fffffff )
continue;
812 unsigned int iden_value_key = ( iden_value & 0xfffffffe );
813 if( barrel_ec == 0 || barrel_ec == 2 ) {
817 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
819 else if( barrel_ec == 1 || barrel_ec == 3 ) {
820 unsigned int count = m_tofDataMapOnline.count( iden_value_key );
831 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
835 pair< IterTofDataMap, IterTofDataMap > range = m_tofDataMapOnline.equal_range( iden_value_key );
837 for(
unsigned int i=0; i<
count; i++,
iter++ ) {
838 if( ( end == 0 ) && ( ( ( (*iter).second)->quality() & 0x1 ) != 0 ) ) {
839 double time1 = pmt->
tdc();
840 double time2 = ((*iter).second)->tdc2();
843 if( ( ( (*iter).second)->quality() & 0x4 ) == 0 ) {
844 ((*iter).second)->setForward( pmt );
851 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
855 else if( ( end == 1 ) && ( ( ((*iter).second)->quality() & 0x4 ) != 0 ) ) {
856 double time1 = ((*iter).second)->tdc1();
857 double time2 = pmt->
tdc();
861 if( ( ( (*iter).second)->quality() & 0x1 ) == 0 ) {
862 ((*iter).second)->setBackward( pmt );
867 tof->
setForward( ((*iter).second)->forward() );
869 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
883 m_tofDataMapOnline.insert( make_pair( iden_value_key, tof ) );
889 return m_tofDataMapOnline;
897 log << MSG::INFO <<
"TofRawDataProvider::tofDataVectorOnlineMode()" << endreq;
899 if( m_tofDataVectorOnline.size() != 0 ) {
900 if(!control)
return m_tofDataVectorOnline;
901 else m_tofDataVectorOnline.clear();
905 for( ;
iter != tofRawDataMap.end();
iter++ ) {
906 m_tofDataVectorOnline.push_back(
iter->second );
909 return m_tofDataVectorOnline;
921 if( !m_tofDataMapEstime.empty() ) {
922 m_tofDataMapEstime.clear();
926 for( ;
iter != m_tofDataMap.end();
iter++ ) {
927 if( ( ( ((*iter).second)->quality() & 0x5 ) != 0 ) && ((*iter).second)->tmatched() ) {
928 m_tofDataMapEstime.insert( make_pair( (*iter).first, (*iter).second ) );
932 iter = m_tofDataMapEstime.begin();
933 while(
iter != m_tofDataMapEstime.end() ) {
934 unsigned int iden_value = (*iter).first;
935 unsigned int count = m_tofDataMapEstime.count( iden_value );
936 for(
unsigned int i=0; i !=
count; i++,
iter++ ) {
937 ((*iter).second)->setTimes(
count );
941 return m_tofDataMapEstime;
946 if( m_tofDataVectorEstime.size() != 0 )
return m_tofDataVectorEstime;
951 m_tofDataVectorEstime.push_back(
iter->second );
953 return m_tofDataVectorEstime;
965 if( !m_tofDataMapTof.empty() ) {
966 m_tofDataMapTof.clear();
970 for( ;
iter != m_tofDataMap.end();
iter++ ) {
971 if( ( ( ((*iter).second)->quality() & 0xc ) == 0xc ) || ( ( ((*iter).second)->quality() & 0x3 ) == 0x3 ) ) {
972 if( estime > 1.0e-6 ) {
973 double tdc1 = ((*iter).second)->tdc1();
974 double tdc2 = ((*iter).second)->tdc2();
978 double offset = -264.0;
979 forward = ( ( ( estime - tdc1 ) < (
timeBackward - offset ) ) && ( ( tdc1 - estime ) < (
timeForward + offset ) ) );
980 backward = ( ( ( estime - tdc2 ) < (
timeBackward + offset ) ) && ( ( tdc2 - estime ) < (
timeForward + offset ) ) );
982 if( !forward && !backward )
continue;
984 m_tofDataMapTof.insert( make_pair( (*iter).first, (*iter).second ) );
988 iter = m_tofDataMapTof.begin();
989 while(
iter != m_tofDataMapTof.end() ) {
990 unsigned int iden_value = (*iter).first;
991 unsigned int count = m_tofDataMapTof.count( iden_value );
992 for(
unsigned int i=0; i !=
count; i++,
iter++ ) {
993 ((*iter).second)->setTimes(
count );
997 return m_tofDataMapTof;
1002 if( m_tofDataVectorTof.size() != 0 ) {
1003 m_tofDataVectorTof.clear();
1009 m_tofDataVectorTof.push_back(
iter->second );
1011 return m_tofDataVectorTof;
1018 if( !m_hasFilled ) {
1023 if( !m_tofDataMapEmc.empty() ) {
1024 m_tofDataMapEmc.clear();
1028 for( ;
iter != m_tofDataMap.end();
iter++ ) {
1029 if( ( ((*iter).second)->quality() & 0xa ) != 0 ) {
1031 if( estime > 1.0e-6 ) {
1032 int t0clock =
static_cast<int>(estime/24.0);
1033 int clock1 = ((*iter).second)->qclock1();
1034 int clock2 = ((*iter).second)->qclock2();
1038 double offset = -11.0;
1042 if( !forward && !backward )
continue;
1045 m_tofDataMapEmc.insert( make_pair( (*iter).first, (*iter).second ) );
1049 iter = m_tofDataMapEmc.begin();
1050 while(
iter != m_tofDataMapEmc.end() ) {
1051 unsigned int iden_value = (*iter).first;
1052 unsigned int count = m_tofDataMapEmc.count( iden_value );
1053 for(
unsigned int i=0; i !=
count; i++,
iter++ ) {
1054 ((*iter).second)->setTimes(
count );
1058 return m_tofDataMapEmc;
1063 if( m_tofDataVectorEmc.size() != 0 ) {
1064 m_tofDataVectorEmc.clear();
1070 m_tofDataVectorEmc.push_back(
iter->second );
1072 return m_tofDataVectorEmc;
std::multimap< unsigned int, TofData * > TofDataMap
std::vector< TofData * > TofDataVector
std::multimap< unsignedint, TofData * >::iterator IterTofDataMap
DOUBLE_PRECISION count[3]
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 StatusCode chooseConstants(int run, int event)=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 int endcap(const Identifier &id)
static int strip(const Identifier &id)
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)
static int module(const Identifier &id)
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)