00001
00002 #include "GaudiKernel/MsgStream.h"
00003 #include "GaudiKernel/IDataProviderSvc.h"
00004
00005 #include "GaudiKernel/ThreadGaudi.h"
00006
00007
00008 #include "EventModel/EventModel.h"
00009 #include "LumiDigi/LumiDigi.h"
00010 #include "RawDataCnv/RawDataInputSvc.h"
00011 #include "RawDataCnv/RawDataLumiDigiCnv.h"
00012
00013
00014
00015
00016 extern const CLID& CLID_LumiDigiCol;
00017
00018
00019 RawDataLumiDigiCnv::RawDataLumiDigiCnv(ISvcLocator* svc) :
00020 RawDataBaseCnv(PACKEDRAWEVENT_StorageType, classID(), svc)
00021 {
00022 }
00023
00024 RawDataLumiDigiCnv::~RawDataLumiDigiCnv()
00025 {
00026 }
00027
00028
00029
00030 const CLID& RawDataLumiDigiCnv::classID()
00031 {
00032 return CLID_LumiDigiCol;
00033 }
00034
00035 StatusCode RawDataLumiDigiCnv::initialize()
00036 {
00037
00038 std::string PackedRawDataCnvSvc_Name("PackedRawDataCnvSvc");
00039 std::string RawDataInputSvc_Name("RawDataInputSvc");
00040 std::string RawDataLumiDigiCnv_Name("RawDataLumiDigiCnv");
00041
00042
00043
00044
00045 SmartIF<IService> pCnvSvc(conversionSvc());
00046 if (isGaudiThreaded(pCnvSvc->name())){
00047 PackedRawDataCnvSvc_Name += getGaudiThreadIDfromName(pCnvSvc->name());
00048 RawDataInputSvc_Name += getGaudiThreadIDfromName(pCnvSvc->name());
00049 RawDataLumiDigiCnv_Name += getGaudiThreadIDfromName(pCnvSvc->name());
00050 }
00051
00052
00053 StatusCode sc = RawDataBaseCnv::initialize();
00054 if(StatusCode::SUCCESS!=sc)
00055 {
00056 return sc;
00057 }
00058
00059 MsgStream log(messageService(), RawDataLumiDigiCnv_Name.c_str());
00060
00061
00062 IService* isvc = 0;
00063 StatusCode status = serviceLocator()->service(PackedRawDataCnvSvc_Name.c_str(), isvc, true);
00064
00065 m_RawDataAccess = dynamic_cast<PackedRawDataCnvSvc*> (isvc);
00066 if(m_RawDataAccess == 0 ) {
00067 log<<MSG::ERROR<< " RawDataLumiCnv: Cant cast to RawDataCnvSvc " <<endreq;
00068 return StatusCode::FAILURE ;
00069 }
00070
00071 if(m_RawDataAccess)
00072 log << MSG::INFO << "RawDataCnvSvc retrieved "<< endreq;
00073
00074 IService* svc ;
00075 sc = serviceLocator()->getService(RawDataInputSvc_Name.c_str(), svc);
00076 if(sc != StatusCode::SUCCESS ) {
00077 log<<MSG::WARNING << " Cant get RawDataInputSvc " <<endreq;
00078 return sc ;
00079 }
00080
00081 m_inputSvc = dynamic_cast<RawDataInputSvc*> (svc);
00082 if(m_inputSvc == 0 ) {
00083 log<<MSG::WARNING<< " Cant cast to RawDataInputSvc " <<endreq;
00084 return StatusCode::FAILURE ;
00085 }
00086
00087 return StatusCode::SUCCESS;
00088 }
00089
00090
00091 StatusCode RawDataLumiDigiCnv::updateObj(IOpaqueAddress* pAddr, DataObject* pObj) {
00092
00093
00094
00095
00096
00097 return Converter::updateObj(pAddr, pObj);
00098 }
00099
00100
00101 StatusCode RawDataLumiDigiCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj)
00102 {
00103 DataObject* pLumi;
00104 dataProvider()->findObject("/Event/Digi/LumiDigiCol", pLumi);
00105
00106 if ( pLumi == NULL ) {
00107 LumiDigiCol* lumiDigiCol = new LumiDigiCol;
00108 dataProvider()->registerObject("/Event/Digi/LumiDigiCol", lumiDigiCol);
00109 pObj = lumiDigiCol;
00110 }
00111 else {
00112 pObj = pLumi;
00113 }
00114
00115 return StatusCode::SUCCESS;
00116 }
00117
00118 StatusCode RawDataLumiDigiCnv::createRep(DataObject* pObj, IOpaqueAddress*& pAddr)
00119 {
00120 return StatusCode::SUCCESS;
00121 }