00001 #include "RawDataCnv/RawDataZddEventCnv.h"
00002 #include "RawDataCnv/RawDataInputSvc.h"
00003 #include "RawDataCnv/Util/ZddConverter.h"
00004 #include "RawDataCnv/EventManagement/RAWEVENT.h"
00005 #include "ZddEvent/ZddEvent.h"
00006 #include "GaudiKernel/ThreadGaudi.h"
00007
00008 using Event::ZddEvent;
00009
00010 extern const CLID& CLID_ZddEvent;
00011
00012 RawDataZddEventCnv::RawDataZddEventCnv(ISvcLocator*svc)
00013 : RawDataBaseCnv(PACKEDRAWEVENT_StorageType, classID(), svc)
00014 {
00015 }
00016
00017 RawDataZddEventCnv::~RawDataZddEventCnv()
00018 {
00019 ZddConverter::destroy();
00020 }
00021
00022 StatusCode RawDataZddEventCnv::initialize()
00023 {
00024 StatusCode sc = RawDataBaseCnv::initialize();
00025 if ( sc.isFailure() ) return sc;
00026
00027 std::string PackedRawDataCnvSvc_Name("PackedRawDataCnvSvc");
00028 std::string RawDataInputSvc_Name("RawDataInputSvc");
00029 std::string RawDataZddEventCnv_Name("RawDataZddEventCnv");
00030
00031 SmartIF<IService> pCnvSvc(conversionSvc());
00032 if (isGaudiThreaded(pCnvSvc->name())){
00033 PackedRawDataCnvSvc_Name += getGaudiThreadIDfromName(pCnvSvc->name());
00034 RawDataInputSvc_Name += getGaudiThreadIDfromName(pCnvSvc->name());
00035 RawDataZddEventCnv_Name += getGaudiThreadIDfromName(pCnvSvc->name());
00036 }
00037
00038 MsgStream log(messageService(), RawDataZddEventCnv_Name.c_str());
00039
00040 IService* svc ;
00041 sc = serviceLocator()->getService(RawDataInputSvc_Name.c_str(), svc);
00042 m_inputSvc = dynamic_cast<RawDataInputSvc*> (svc);
00043 if ( m_inputSvc == 0 ) {
00044 log<<MSG::WARNING<< " Cant cast to RawDataInputSvc " <<endreq;
00045 return StatusCode::FAILURE ;
00046 }
00047
00048 m_cnv = ZddConverter::instance( m_inputSvc->runMode() );
00049
00050 return StatusCode::SUCCESS;
00051 }
00052
00053 const CLID& RawDataZddEventCnv::classID()
00054 {
00055 return CLID_ZddEvent;
00056 }
00057
00058 StatusCode RawDataZddEventCnv::createObj(IOpaqueAddress* , DataObject*& pObj)
00059 {
00060 ZddEvent* zddEvt = new ZddEvent;
00061 pObj = zddEvt;
00062
00063 RAWEVENT* evt = m_inputSvc->currentEvent();
00064 if (evt == NULL) {
00065
00066 return StatusCode::FAILURE;
00067 }
00068
00069 const BufferHolder& zddBuf = evt->getZddBuf();
00070
00071
00072 uint32_t nbuf = zddBuf.nBuf();
00073 for ( uint32_t i = 0; i < nbuf; ++i ) {
00074 uint32_t* buf = zddBuf(i);
00075 m_cnv->convert(buf, zddBuf.bufSize(i), zddEvt);
00076 }
00077
00078 return StatusCode::SUCCESS;
00079 }
00080
00081 StatusCode RawDataZddEventCnv::updateObj(IOpaqueAddress* pAddr, DataObject* pObj)
00082 {
00083 return Converter::updateObj(pAddr, pObj);
00084 }
00085
00086 StatusCode RawDataZddEventCnv::createRep(DataObject* , IOpaqueAddress*& )
00087 {
00088
00089 return StatusCode::SUCCESS;
00090 }