/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RootCnvSvc/RootCnvSvc-02-01-12/src/EvtNavigatorCnv.cxx

Go to the documentation of this file.
00001 // File and Version Information:
00002 // Description:
00003 //      EvtNavigatorCnv is the concrete converter for the EvtNavigator branch
00004 //
00005 
00006 #ifndef EvtNavigatorCnv_CXX
00007 #define EvtNavigatorCnv_CXX 
00008 
00009 #include "GaudiKernel/MsgStream.h"
00010 #include "GaudiKernel/DataObject.h"
00011 #include "GaudiKernel/SmartDataPtr.h"
00012 #include "GaudiKernel/RegistryEntry.h"
00013 #include "GaudiKernel/IDataProviderSvc.h"
00014 #include "GaudiKernel/ISvcLocator.h"
00015 #include "GaudiKernel/PropertyMgr.h"
00016 
00017 #include "GaudiKernel/IOpaqueAddress.h"
00018 
00019 #include "EventModel/EventModel.h"
00020 #include "EventNavigator/EventNavigator.h"
00021 #include "RootEventData/TEvtNavigator.h"
00022 #include "RootCnvSvc/EvtNavigatorCnv.h"
00023 #include "RootCnvSvc/RootEvtSelector.h"
00024 #include "RootCnvSvc/RootAddress.h"
00025 #include "RootCnvSvc/Util.h"
00026 
00027 using namespace DataSvcHelpers;
00028 
00029 TEvtNavigator* EvtNavigatorCnv::m_evtNavigatorR = 0;
00030 TEvtNavigator* EvtNavigatorCnv::m_evtNavigatorW = 0;
00031 
00032 EvtNavigatorCnv::EvtNavigatorCnv(ISvcLocator* svc)
00033 : RootEventBaseCnv(classID(), svc)
00034 {
00035   // Here we associate this converter with the path on the TDS.
00036   MsgStream log(msgSvc(), "EvtNavigatorCnv");
00037   m_rootBranchname = "m_mcMdcMcHits:m_mcMdcTracks:m_mcEmcMcHits:m_mcEmcRecShowers";
00038   m_adresses.push_back(&m_mcMdcMcHits);
00039   m_adresses.push_back(&m_mcMdcTracks);
00040   m_adresses.push_back(&m_mcEmcMcHits);
00041   m_adresses.push_back(&m_mcEmcRecShowers);
00042 
00043   m_evtNavigatorR = 0;
00044   m_evtNavigatorW = 0;
00045 }
00046 
00047 StatusCode EvtNavigatorCnv::TObjectToDataObject(DataObject*& refpObject) {
00048     // fills the TDS object from the persistent one
00049   StatusCode sc=StatusCode::SUCCESS;
00050     
00051   MsgStream log(msgSvc(), "EvtNavigatorCnv");
00052 
00053   EventNavigator* evt = new EventNavigator;
00054   refpObject = evt;
00055  
00056   // fill DataObject
00057   evt->setMcMdcMcHitsIdx(m_mcMdcMcHits);
00058   evt->setMcMdcTracksIdx(m_mcMdcTracks);  
00059   evt->setMcEmcMcHitsIdx(m_mcEmcMcHits);
00060   evt->setMcEmcRecShowersIdx(m_mcEmcRecShowers);
00061 
00062   delete m_evtNavigatorR;
00063   m_evtNavigatorR = 0;
00064   
00065   return sc;
00066 }
00067 
00068 StatusCode EvtNavigatorCnv::initialize()   {
00069  
00070   StatusCode status = RootEventBaseCnv::initialize();
00071   m_cnvSvc->setEvtNavigatorCnv(this);
00072 
00073   return status;
00074 
00075 }
00076 
00077 StatusCode EvtNavigatorCnv::DataObjectToTObject(DataObject* obj, RootAddress* rootaddr) {
00078   // transforms TDS event to Dst event in root format
00079   MsgStream log(msgSvc(), "EvtNavigatorCnv");
00080 
00081   EventNavigator * evtNaviTds=dynamic_cast<EventNavigator *> (obj);
00082   if (!evtNaviTds) {
00083     log << MSG::ERROR << "Could not downcast to TDS EventNavigator" << endreq;
00084     return StatusCode::FAILURE;
00085   }
00086   
00087   m_evtNavigatorW = new TEvtNavigator(); 
00088   m_common.m_EvtNavigator = m_evtNavigatorW;
00089 
00090   m_evtNavigatorW->LoadMcMdcTracks(evtNaviTds->getMcMdcTracksIdx());
00091   if(evtNaviTds->getMcMdcTracksIdx().empty())
00092       m_evtNavigatorW->LoadMcMdcMcHits(evtNaviTds->getMcMdcMcHitsIdx());
00093   m_evtNavigatorW->LoadMcEmcRecShowers(evtNaviTds->getMcEmcRecShowersIdx());
00094   if(evtNaviTds->getMcEmcRecShowersIdx().empty())
00095       m_evtNavigatorW->LoadMcEmcMcHits(evtNaviTds->getMcEmcMcHitsIdx());
00096 
00097   // create branch if not yet done
00098   if (m_branchNrEvtNavigator<0) {
00099     StatusCode sc = m_rootInterface->createBranch(rootaddr->getTreename(),"EventNavigator",m_evtNavigatorW->ClassName(),&m_evtNavigatorW,m_branchNrEvtNavigator);
00100     if (sc.isFailure()) {
00101       delete m_evtNavigatorW;
00102       log << MSG::ERROR << "Could not create branch TEvtNavigator in " << rootaddr->getTreename() << endreq;
00103       return StatusCode::SUCCESS;
00104       //return sc;
00105     }
00106   }
00107 
00108   return StatusCode::SUCCESS;
00109 }
00110 #endif
00111 

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