BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
RecEvTimeCnv.cxx
Go to the documentation of this file.
1#ifndef RecEvTimeCnv_CXX
2#define RecEvTimeCnv_CXX 1
3
4#include "GaudiKernel/DataObject.h"
5#include "GaudiKernel/MsgStream.h"
6#include "GaudiKernel/ObjectVector.h"
7
8#include "TClonesArray.h"
9
10#include "EvTimeEvent/RecEsTime.h"
11#include "EventModel/EventModel.h"
12#include "ReconEvent/ReconEvent.h"
13
14// #include "RootEventData/TMucTrack.h" // standard root object
15#include "RootEventData/TRecEvTime.h" // standard root object
16// #include "RootEventData/TDstEvent.h"
17#include "RootEventData/TRecTrackEvent.h"
18
19#include "RootCnvSvc/Rec/RecEvTimeCnv.h"
20#include "RootCnvSvc/Rec/RecTrackCnv.h"
21#include "RootCnvSvc/RootAddress.h"
22
23#include <vector>
24
25using namespace std;
26
27// Instantiation of a static factory class used by clients to create
28// instances of this service
29// static CnvFactory<RecEvTimeCnv> s_factory;
30// const ICnvFactory& RecEvTimeCnvFactory = s_factory;
31
32RecEvTimeCnv::RecEvTimeCnv( ISvcLocator* svc ) : RootEventBaseCnv( classID(), svc ) {
33
34 // Here we associate this converter with the /Event path on the TDS.
35 MsgStream log( msgSvc(), "RecEvTimeCnv" );
36 // log << MSG::DEBUG << "Constructor called for " << objType() << endmsg;
37 // m_rootTreename ="Rec";
38 m_rootBranchname = "m_recEvTimeCol";
39 // declareObject(EventModel::Recon::EvTimeCol, objType(), m_rootTreename, m_rootBranchname);
40 m_adresses.push_back( &m_recEvTimeCol );
41 m_recEvTimeCol = 0;
42}
43
44StatusCode RecEvTimeCnv::TObjectToDataObject( DataObject*& refpObject ) {
45 // creation of TDS object from root object
46 MsgStream log( msgSvc(), "RecEvTimeCnv" );
47 log << MSG::DEBUG << "RecEvTimeCnv::TObjectToDataObject" << endmsg;
48 StatusCode sc = StatusCode::SUCCESS;
49
50 // create the TDS location for the MucTrack Collection
51 RecEsTimeCol* evTimeTdsCol = new RecEsTimeCol;
52 refpObject = evTimeTdsCol;
53 // now convert
54 if ( !m_recEvTimeCol ) return sc;
55 TIter evTimeIter( m_recEvTimeCol );
56 TRecEvTime* evTimeRoot = 0;
57 while ( ( evTimeRoot = (TRecEvTime*)evTimeIter.Next() ) )
58 {
59 double estime = evTimeRoot->estime();
60 int status = evTimeRoot->status();
61 double quality = evTimeRoot->quality();
62 // double estime=evTimeRoot->getTest();
63 // int status=evTimeRoot->getStat();
64
65 RecEsTime* evTimeTds = new RecEsTime();
66 m_common.m_rootRecEvTimeMap[evTimeRoot] = evTimeTds;
67 evTimeTds->setTest( estime );
68 evTimeTds->setStat( status );
69 evTimeTds->setQuality( quality );
70 evTimeTdsCol->push_back( evTimeTds );
71 }
72 delete m_recEvTimeCol;
73 m_recEvTimeCol = 0;
74
75 return StatusCode::SUCCESS;
76}
77
78StatusCode RecEvTimeCnv::DataObjectToTObject( DataObject* obj, RootAddress* rootaddr ) {
79 MsgStream log( msgSvc(), "RecEvTimeCnv" );
80 log << MSG::DEBUG << "RecEvTimeCnv::DataObjectToTObject" << endmsg;
81 StatusCode sc = StatusCode::SUCCESS;
82
83 RecEsTimeCol* evTimeColTds = dynamic_cast<RecEsTimeCol*>( obj );
84 if ( !evTimeColTds )
85 {
86 log << MSG::ERROR << "Could not downcast to RecEsTimeCol" << endmsg;
87 return StatusCode::FAILURE;
88 }
89
90 DataObject* evt;
91 m_eds->findObject( EventModel::Recon::Event, evt );
92 if ( evt == NULL )
93 {
94 log << MSG::ERROR << "Could not get RecEvent in TDS " << endmsg;
95 return StatusCode::FAILURE;
96 }
97 ReconEvent* devtTds = dynamic_cast<ReconEvent*>( evt );
98 if ( !devtTds )
99 { log << MSG::ERROR << "RecEvTimeCnv:Could not downcast to TDS ReconEvent" << endmsg; }
100 IOpaqueAddress* addr;
101
102 m_cnvSvc->getRecTrackCnv()->createRep( evt, addr );
103 TRecTrackEvent* recEvt = m_cnvSvc->getRecTrackCnv()->getWriteObject();
104 const TObjArray* m_recEvTimeCol = recEvt->getEvTimeCol();
105 if ( !m_recEvTimeCol ) return sc;
106 recEvt->clearEvTimeCol(); // necessary in case there is I/O at the same time since array is
107 // static
108 RecEsTimeCol::const_iterator evTimeTds;
109 for ( evTimeTds = evTimeColTds->begin(); evTimeTds != evTimeColTds->end(); evTimeTds++ )
110 {
111 // Double_t estime = (*evTimeTds)->estime();
112 // Int_t status = (*evTimeTds)->status();
113 Double_t estime = ( *evTimeTds )->getTest();
114 Int_t status = ( *evTimeTds )->getStat();
115 Double_t quality = ( *evTimeTds )->getQuality();
116 TRecEvTime* evTimeRoot = new TRecEvTime();
117 // m_common.m_RecEvTimeMap[(*evTimeTds)] = evTimeRoot;
118
119 evTimeRoot->setTest( estime );
120 evTimeRoot->setStats( status );
121 evTimeRoot->setQuality( quality );
122
123 recEvt->addEvTime( evTimeRoot );
124 }
125
126 return StatusCode::SUCCESS;
127}
128#endif
ObjectVector< RecEsTime > RecEsTimeCol
IMessageSvc * msgSvc()
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
RecEvTimeCnv(ISvcLocator *svc)
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
Definition of a Root address, derived from IOpaqueAddress.
IDataProviderSvc * m_eds
pointer to eventdataservice
std::vector< void * > m_adresses
each converter knows the corresponding adresses
std::string m_rootBranchname
root branchname (may be concatenated of severals)
RootEventBaseCnv(const CLID &clid, ISvcLocator *svc)
void addEvTime(TRecEvTime *Track)