00001 #include "RawDataProviderSvc/RawDataProviderSvc.h"
00002 #include "GaudiKernel/Kernel.h"
00003 #include "GaudiKernel/IInterface.h"
00004 #include "GaudiKernel/IIncidentSvc.h"
00005 #include "GaudiKernel/Incident.h"
00006 #include "GaudiKernel/IIncidentListener.h"
00007 #include "GaudiKernel/StatusCode.h"
00008 #include "GaudiKernel/SvcFactory.h"
00009 #include "GaudiKernel/MsgStream.h"
00010 #include "GaudiKernel/IDataProviderSvc.h"
00011 #include "GaudiKernel/SmartDataPtr.h"
00012 #include "GaudiKernel/DataSvc.h"
00013 #include "RawEvent/RawDataUtil.h"
00014
00015
00016 #include "GaudiKernel/ThreadGaudi.h"
00017
00018 #include <stdint.h>
00019 #include <vector>
00020
00021 using namespace std;
00022
00023 RawDataProviderSvc::RawDataProviderSvc( const string& name, ISvcLocator* svcloc) :
00024 Service (name, svcloc) {
00025 declareProperty("OutputLevel", m_outputLevel=MSG::WARNING);
00026 declareProperty("skipLayers", m_skipLayers);
00027 declareProperty("MdcWireEffThreshold", m_effThreshold=0.9);
00028 declareProperty("EmcELow", m_elow=0);
00029 declareProperty("EmcTLow", m_tlow=0);
00030 declareProperty("EmcTHigh", m_thigh=60);
00031 declareProperty("EmcHotCrystals", m_hotVec);
00032 declareProperty("EmcDeadCrystals", m_deadVec);
00033 declareProperty("EmcDeadCrystals", m_deadVec);
00034 declareProperty("OnlineMode", m_onlineMode=0);
00035
00036 m_mdcProvider = new MdcRawDataProvider(name.c_str());
00037 m_tofProvider = new TofRawDataProvider(name.c_str());
00038 m_emcProvider = new EmcRawDataProvider(name.c_str());
00039
00040 }
00041
00042
00043 RawDataProviderSvc::~RawDataProviderSvc() {
00044 if(m_mdcProvider) delete m_mdcProvider;
00045 if(m_tofProvider) delete m_tofProvider;
00046 if(m_emcProvider) delete m_emcProvider;
00047 }
00048
00049
00050 StatusCode RawDataProviderSvc::initialize(){
00051 MsgStream log(messageService(), name());
00052 log << MSG::INFO << "RawDataProviderSvc::initialize()" << endreq;
00053
00054 StatusCode sc = Service::initialize();
00055 if( sc.isFailure() ) return sc;
00056
00057
00058 std::string incidentSvc_name("IncidentSvc");
00059
00060
00061
00062
00063 IIncidentSvc* incsvc;
00064 sc = service(incidentSvc_name.c_str(), incsvc);
00065 int priority = 100;
00066 if( sc.isSuccess() ){
00067 incsvc -> addListener(this, "BeginEvent", priority);
00068 }
00069
00070 sc = m_mdcProvider->initialize();
00071 if( sc.isFailure() ) return sc;
00072
00073
00074 sc = m_tofProvider->initialize(m_onlineMode);
00075 if( sc.isFailure() ) return sc;
00076
00077 if( m_skipLayers.size()>0 ) m_mdcProvider->setSkipLayers( m_skipLayers );
00078 m_mdcProvider->setEffThreshold( m_effThreshold );
00079
00080 if(m_elow>0) m_emcProvider->setELowThreshold(RawDataUtil::EmcChargeChannel(m_elow));
00081 if(m_tlow>0) m_emcProvider->setTLowThreshold(m_tlow);
00082 if(m_thigh>0&&m_thigh<60) m_emcProvider->setTHighThreshold(m_thigh);
00083 if(m_hotVec.size()>0) m_emcProvider->setHotCrystals(m_hotVec);
00084 if(m_deadVec.size()>0) m_emcProvider->setHotCrystals(m_deadVec);
00085 sc = m_emcProvider->initialize(m_onlineMode,serviceLocator());
00086 if( sc.isFailure() ) return sc;
00087
00088
00089 return StatusCode::SUCCESS;
00090 }
00091
00092 StatusCode RawDataProviderSvc::finalize(){
00093 MsgStream log(messageService(), name());
00094 log << MSG::INFO << "RawDataProviderSvc::finalize()" << endreq;
00095
00096 return StatusCode::SUCCESS;
00097 }
00098
00099 StatusCode RawDataProviderSvc::queryInterface(const InterfaceID& riid, void** ppvInterface)
00100 {
00101 if ( IRawDataProviderSvc::interfaceID().versionMatch(riid) ) {
00102 *ppvInterface = (IRawDataProviderSvc*)this;
00103 }else{
00104 return Service::queryInterface(riid, ppvInterface);
00105 }
00106 addRef();
00107 return StatusCode::SUCCESS;
00108 }
00109
00110 void RawDataProviderSvc::handle(const Incident& inc){
00111 MsgStream log( messageService(), name() );
00112 log << MSG::DEBUG << "handle: " << inc.type() << endreq;
00113 if ( inc.type() == "BeginEvent" ){
00114 log << MSG::DEBUG << "Begin Event" << endreq;
00115 m_tofProvider->handle( inc );
00116 m_emcProvider->handle( inc );
00117 m_mdcProvider->handle( inc );
00118 }
00119 }