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