BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtNavigatorCnv.cxx
Go to the documentation of this file.
1// File and Version Information:
2// Description:
3// EvtNavigatorCnv is the concrete converter for the EvtNavigator branch
4//
5
6#ifndef EvtNavigatorCnv_CXX
7#define EvtNavigatorCnv_CXX
8
9#include "GaudiKernel/DataObject.h"
10#include "GaudiKernel/IDataProviderSvc.h"
11#include "GaudiKernel/ISvcLocator.h"
12#include "GaudiKernel/MsgStream.h"
13#include "GaudiKernel/PropertyMgr.h"
14#include "GaudiKernel/RegistryEntry.h"
15#include "GaudiKernel/SmartDataPtr.h"
16
17#include "GaudiKernel/IOpaqueAddress.h"
18
19#include "EventModel/EventModel.h"
20#include "EventNavigator/EventNavigator.h"
21#include "RootCnvSvc/EvtNavigatorCnv.h"
22#include "RootCnvSvc/RootAddress.h"
23#include "RootCnvSvc/RootEvtSelector.h"
24#include "RootEventData/TEvtNavigator.h"
25// #include "RootCnvSvc/Util.h"
26
27using namespace DataSvcHelpers;
28
29TEvtNavigator* EvtNavigatorCnv::m_evtNavigatorR = 0;
30TEvtNavigator* EvtNavigatorCnv::m_evtNavigatorW = 0;
31
33 // Here we associate this converter with the path on the TDS.
34 MsgStream log( msgSvc(), "EvtNavigatorCnv" );
35 m_rootBranchname = "m_mcMdcMcHits:m_mcMdcTracks:m_mcEmcMcHits:m_mcEmcRecShowers";
36 m_adresses.push_back( &m_mcMdcMcHits );
37 m_adresses.push_back( &m_mcMdcTracks );
38 m_adresses.push_back( &m_mcEmcMcHits );
39 m_adresses.push_back( &m_mcEmcRecShowers );
40
41 m_evtNavigatorR = 0;
42 m_evtNavigatorW = 0;
43}
44
45StatusCode EvtNavigatorCnv::TObjectToDataObject( DataObject*& refpObject ) {
46 // fills the TDS object from the persistent one
47 StatusCode sc = StatusCode::SUCCESS;
48
49 MsgStream log( msgSvc(), "EvtNavigatorCnv" );
50
52 refpObject = evt;
53
54 // fill DataObject
55 evt->setMcMdcMcHitsIdx( m_mcMdcMcHits );
56 evt->setMcMdcTracksIdx( m_mcMdcTracks );
57 evt->setMcEmcMcHitsIdx( m_mcEmcMcHits );
58 evt->setMcEmcRecShowersIdx( m_mcEmcRecShowers );
59
60 delete m_evtNavigatorR;
61 m_evtNavigatorR = 0;
62
63 return sc;
64}
65
67
68 StatusCode status = RootEventBaseCnv::initialize();
69 m_cnvSvc->setEvtNavigatorCnv( this );
70
71 return status;
72}
73
74StatusCode EvtNavigatorCnv::DataObjectToTObject( DataObject* obj, RootAddress* rootaddr ) {
75 // transforms TDS event to Dst event in root format
76 MsgStream log( msgSvc(), "EvtNavigatorCnv" );
77
78 EventNavigator* evtNaviTds = dynamic_cast<EventNavigator*>( obj );
79 if ( !evtNaviTds )
80 {
81 log << MSG::ERROR << "Could not downcast to TDS EventNavigator" << endmsg;
82 return StatusCode::FAILURE;
83 }
84
85 m_evtNavigatorW = new TEvtNavigator();
86 m_common.m_EvtNavigator = m_evtNavigatorW;
87
88 m_evtNavigatorW->LoadMcMdcTracks( evtNaviTds->getMcMdcTracksIdx() );
89 if ( evtNaviTds->getMcMdcTracksIdx().empty() )
90 m_evtNavigatorW->LoadMcMdcMcHits( evtNaviTds->getMcMdcMcHitsIdx() );
91 m_evtNavigatorW->LoadMcEmcRecShowers( evtNaviTds->getMcEmcRecShowersIdx() );
92 if ( evtNaviTds->getMcEmcRecShowersIdx().empty() )
93 m_evtNavigatorW->LoadMcEmcMcHits( evtNaviTds->getMcEmcMcHitsIdx() );
94
95 // create branch if not yet done
96 if ( m_branchNrEvtNavigator < 0 )
97 {
98 StatusCode sc = m_rootInterface->createBranch( rootaddr->getTreename(), "EventNavigator",
99 m_evtNavigatorW->ClassName(),
100 &m_evtNavigatorW, m_branchNrEvtNavigator );
101 if ( sc.isFailure() )
102 {
103 delete m_evtNavigatorW;
104 log << MSG::ERROR << "Could not create branch TEvtNavigator in "
105 << rootaddr->getTreename() << endmsg;
106 return StatusCode::SUCCESS;
107 // return sc;
108 }
109 }
110
111 return StatusCode::SUCCESS;
112}
113#endif
IMessageSvc * msgSvc()
EvtNavigatorCnv(ISvcLocator *svc)
virtual StatusCode TObjectToDataObject(DataObject *&refpObject)
do the transformation from ROOT to TDS object
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation from TDS object to ROOT
virtual StatusCode initialize()
Definition of a Root address, derived from IOpaqueAddress.
virtual StatusCode initialize()
std::vector< void * > m_adresses
each converter knows the corresponding adresses
RootInterface * m_rootInterface
pointer to the RootInterface
std::string m_rootBranchname
root branchname (may be concatenated of severals)
RootEventBaseCnv(const CLID &clid, ISvcLocator *svc)