BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
TofDigiCnv.cxx
Go to the documentation of this file.
1#ifndef TofDigiCnv_CXX
2#define TofDigiCnv_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 "EventModel/EventModel.h"
11#include "RawEvent/DigiEvent.h" //TDS object
12#include "RootCnvSvc/Digi/DigiCnv.h"
13#include "RootCnvSvc/Digi/TofDigiCnv.h"
14#include "RootCnvSvc/RootAddress.h"
15#include "RootEventData/TDigiEvent.h"
16#include "RootEventData/TTofDigi.h" // standard root object
17#include "TofRawEvent/TofDigi.h" //TDS object
18
19// Instantiation of a static factory class used by clients to create
20// instances of this service
21// static CnvFactory<TofDigiCnv> s_factory;
22// const ICnvFactory& TofDigiCnvFactory = s_factory;
23
24TofDigiCnv::TofDigiCnv( ISvcLocator* svc ) : RootEventBaseCnv( classID(), svc ) {
25 // Here we associate this converter with the /Event path on the TDS.
26 MsgStream log( msgSvc(), "TofDigiCnv" );
27 // log << MSG::DEBUG << "Constructor called for " << objType() << endmsg;
28 m_rootBranchname = "m_tofDigiCol";
29 // declareObject(EventModel::Digi::TofDigiCol, objType(), m_rootTreename, m_rootBranchname);
30 m_adresses.push_back( &m_tofDigiCol );
31 m_tofDigiCol = 0;
32}
33
34StatusCode TofDigiCnv::TObjectToDataObject( DataObject*& refpObject ) {
35 // creation of TDS object from root object
36
37 MsgStream log( msgSvc(), "TofDigiCnv" );
38 log << MSG::DEBUG << "TofDigiCnv::TObjectToDataObject" << endmsg;
39 StatusCode sc = StatusCode::SUCCESS;
40
41 // create the TDS location for the TofDigi Collection
42 TofDigiCol* tofDigiTdsCol = new TofDigiCol;
43 refpObject = tofDigiTdsCol;
44
45 // now convert
46 if ( !m_tofDigiCol ) return sc;
47 TIter tofDigiIter( m_tofDigiCol );
48 TTofDigi* tofDigiRoot = 0;
49 while ( ( tofDigiRoot = (TTofDigi*)tofDigiIter.Next() ) )
50 {
51 unsigned int id = tofDigiRoot->getIntId();
52 unsigned int time = tofDigiRoot->getTimeChannel();
53 unsigned int charge = tofDigiRoot->getChargeChannel();
54 unsigned int overflow = tofDigiRoot->getOverflow();
55 int trackIndex = tofDigiRoot->getTrackIndex();
56
57 TofDigi* tofDigiTds = new TofDigi( id );
58 m_common.m_rootTofDigiMap[tofDigiRoot] = tofDigiTds;
59
60 tofDigiTds->setTimeChannel( time );
61 tofDigiTds->setChargeChannel( charge );
62 tofDigiTds->setOverflow( overflow );
63 tofDigiTds->setTrackIndex( trackIndex );
64
65 tofDigiTdsCol->push_back( tofDigiTds );
66 }
67 // m_tofDigiCol->Delete(); // wensp add 2005/12/30
68 delete m_tofDigiCol;
69 m_tofDigiCol = 0;
70 return StatusCode::SUCCESS;
71}
72
73StatusCode TofDigiCnv::DataObjectToTObject( DataObject* obj, RootAddress* rootaddr ) {
74
75 MsgStream log( msgSvc(), "TofDigiCnv" );
76 log << MSG::DEBUG << "TofDigiCnv::DataObjectToTObject" << endmsg;
77 StatusCode sc = StatusCode::SUCCESS;
78
79 TofDigiCol* tofDigiColTds = dynamic_cast<TofDigiCol*>( obj );
80 if ( !tofDigiColTds )
81 {
82 log << MSG::ERROR << "Could not downcast to TofDigiCol" << endmsg;
83 return StatusCode::FAILURE;
84 }
85
86 DataObject* evt;
87 m_eds->findObject( EventModel::Digi::Event, evt );
88 if ( evt == NULL )
89 {
90 log << MSG::ERROR << "Could not get DigiEvent in TDS " << endmsg;
91 return StatusCode::FAILURE;
92 }
93 DigiEvent* devtTds = dynamic_cast<DigiEvent*>( evt );
94 if ( !devtTds )
95 { log << MSG::ERROR << "TofDigiCnv:Could not downcast to TDS DigiEvent" << endmsg; }
96 IOpaqueAddress* addr;
97
98 m_cnvSvc->getDigiCnv()->createRep( evt, addr );
99
100 TDigiEvent* recEvt = m_cnvSvc->getDigiCnv()->getWriteObject();
101
102 const TObjArray* m_tofDigiCol = recEvt->getTofDigiCol();
103 if ( !m_tofDigiCol ) return sc;
104 recEvt->clearTofDigiCol(); // necessary in case there is I/O at the same time since array is
105 // static
106 TofDigiCol::const_iterator tofDigiTds;
107
108 for ( tofDigiTds = tofDigiColTds->begin(); tofDigiTds != tofDigiColTds->end(); tofDigiTds++ )
109 {
110 UInt_t overflow = ( *tofDigiTds )->getOverflow();
111 UInt_t time = ( *tofDigiTds )->getTimeChannel();
112 UInt_t charge = ( *tofDigiTds )->getChargeChannel();
113 UInt_t id = ( *tofDigiTds )->getIntId();
114 Int_t trackIndex = ( *tofDigiTds )->getTrackIndex();
115
116 TTofDigi* tofDigiRoot = new TTofDigi();
117 // m_common.m_tofDigiMap[(*tofDigiTds)] = tofDigiRoot;
118
119 tofDigiRoot->initialize( id, time, charge );
120 tofDigiRoot->setOverflow( overflow );
121 tofDigiRoot->setTrackIndex( trackIndex );
122
123 recEvt->addTofDigi( tofDigiRoot );
124 }
125
126 return StatusCode::SUCCESS;
127}
128#endif
Double_t time
IMessageSvc * msgSvc()
void setTrackIndex(const int trackIndex)
Definition RawData.cxx:29
void setChargeChannel(const unsigned int chargeChannel)
Definition RawData.cxx:24
void setTimeChannel(const unsigned int timeChannel)
Definition RawData.cxx:21
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 addTofDigi(TTofDigi *digi)
Add a TofDigi into the TOF Data collection.
const TObjArray * getTofDigiCol() const
retrieve the whole TObjArray of TofDigi Data
void initialize(UInt_t id, UInt_t time=0, UInt_t charge=0)
Definition TRawData.cxx:30
UInt_t getIntId() const
Definition TRawData.cxx:42
void setTrackIndex(const int trackIndex)
Definition TRawData.cxx:37
int getTrackIndex() const
Definition TRawData.cxx:39
UInt_t getChargeChannel() const
Definition TRawData.cxx:48
UInt_t getTimeChannel() const
Definition TRawData.cxx:45
UInt_t getOverflow() const
Definition TTofDigi.cxx:35
void setOverflow(const UInt_t overflow)
Definition TTofDigi.cxx:32
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
TofDigiCnv(ISvcLocator *svc)
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root