/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RawDataCnv/RawDataCnv-00-04-35/src/RawDataZddEventCnv.cxx

Go to the documentation of this file.
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* /*pAddr*/, DataObject*& pObj)
00059 {
00060     ZddEvent*  zddEvt = new ZddEvent;
00061     pObj = zddEvt;
00062 
00063     RAWEVENT* evt = m_inputSvc->currentEvent(); 
00064     if (evt == NULL) {
00065         //log << MSG::ERROR << "RawDataZddEventCnv::createObj has no event!" << endreq; 
00066         return StatusCode::FAILURE;
00067     }
00068 
00069     const BufferHolder& zddBuf = evt->getZddBuf();
00070 
00071     // Data decoding
00072     uint32_t nbuf = zddBuf.nBuf();
00073     for ( uint32_t i = 0; i < nbuf; ++i ) {  //loop the buffers
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     // to be filled
00089     return StatusCode::SUCCESS;
00090 }

Generated on Tue Nov 29 22:58:32 2016 for BOSS_7.0.2 by  doxygen 1.4.7