00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "GaudiKernel/MsgStream.h"
00013 #include "GaudiKernel/StatusCode.h"
00014 #include "GaudiKernel/IRegistry.h"
00015 #include "GaudiKernel/Converter.h"
00016
00017 #include "GaudiKernel/ThreadGaudi.h"
00018
00019
00020 #include "RawEvent/DigiEvent.h"
00021 #include "RawDataCnv/RawDataAddress.h"
00022 #include "RawDataCnv/RawDataInputSvc.h"
00023 #include "RawDataCnv/PackedRawDataCnvSvc.h"
00024 #include "RawDataCnv/EventManagement/RawEvent.h"
00025 #include "RawDataCnv/RawDataDigiCnv.h"
00026
00027
00028 extern const CLID& CLID_DigiEvent;
00029
00030
00031 RawDataDigiCnv::RawDataDigiCnv(ISvcLocator* svc) :
00032 RawDataBaseCnv(PACKEDRAWEVENT_StorageType, classID(), svc)
00033 {
00034
00035 }
00036
00037
00038
00039 const CLID& RawDataDigiCnv::classID()
00040 {
00041 return CLID_DigiEvent;
00042 }
00043
00044 StatusCode RawDataDigiCnv::initialize()
00045 {
00046 std::string PackedRawDataCnvSvc_Name("PackedRawDataCnvSvc");
00047 std::string RawDataInputSvc_Name("RawDataInputSvc");
00048 std::string RawDataDigiCnv_Name("RawDataDigiCnv");
00049
00050
00051
00052 SmartIF<IService> pCnvSvc(conversionSvc());
00053
00054 if (isGaudiThreaded(pCnvSvc->name())){
00055 PackedRawDataCnvSvc_Name += getGaudiThreadIDfromName(pCnvSvc->name());
00056 RawDataInputSvc_Name += getGaudiThreadIDfromName(pCnvSvc->name());
00057 RawDataDigiCnv_Name += getGaudiThreadIDfromName(pCnvSvc->name());
00058 }
00059
00060
00061 StatusCode sc = RawDataBaseCnv::initialize();
00062 if(StatusCode::SUCCESS!=sc)
00063 {
00064 return sc;
00065 }
00066
00067 MsgStream log(messageService(), RawDataDigiCnv_Name.c_str());
00068
00069 IService* svc = 0;
00070 sc = serviceLocator()->service(PackedRawDataCnvSvc_Name.c_str(), svc);
00071 if (sc != StatusCode::SUCCESS) {
00072 log << MSG::ERROR << "Can't get RawDataAccess interface" << endreq;
00073 return StatusCode::FAILURE;
00074 }
00075
00076 m_RawDataAccess = dynamic_cast<PackedRawDataCnvSvc*> (svc);
00077 if (m_RawDataAccess == 0 ) {
00078 log << MSG::ERROR << "RawDataCnv: Cant cast to RawDataCnvSvc" << endreq;
00079 return StatusCode::FAILURE;
00080 }
00081
00082 sc = serviceLocator()->getService(RawDataInputSvc_Name.c_str(), svc);
00083 if(sc != StatusCode::SUCCESS ) {
00084 log << MSG::WARNING << "Cant get RawDataInputSvc " << endreq;
00085 return sc ;
00086 }
00087
00088 m_inputSvc = dynamic_cast<RawDataInputSvc*> (svc);
00089 if(m_inputSvc == 0 ) {
00090 log << MSG::ERROR << "Cant cast to RawDataInputSvc" << endreq;
00091 return StatusCode::FAILURE ;
00092 }
00093
00094 return StatusCode::SUCCESS;
00095 }
00096
00097
00098 StatusCode RawDataDigiCnv::updateObj(IOpaqueAddress* pAddr, DataObject* pObj) {
00099
00100
00101
00102
00103
00104 return Converter::updateObj(pAddr, pObj);
00105 }
00106
00107
00108 StatusCode RawDataDigiCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj)
00109 {
00110 MsgStream log(msgSvc(), "RawDataDigiCnv");
00111
00112
00113
00114
00115 DigiEvent *digi = new DigiEvent();
00116
00117 digi->initialize(false);
00118 pObj = digi;
00119 return StatusCode::SUCCESS;
00120
00121 }
00122
00123 StatusCode RawDataDigiCnv::createRep(DataObject* pObj, IOpaqueAddress*& pAddr)
00124 {
00125
00126 StatusCode sc = StatusCode::SUCCESS ;
00127
00128
00129
00130
00131
00132 std::string nm = pObj->registry()->name();
00133
00134 RawDataAddress* addr = new RawDataAddress(classID(), nm, "");
00135
00136 pAddr = addr;
00137
00138 return StatusCode::SUCCESS;
00139
00140 }
00141
00142