BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
LumiDigiCnv.cxx
Go to the documentation of this file.
1#include "GaudiKernel/DataObject.h"
2#include "GaudiKernel/MsgStream.h"
3#include "GaudiKernel/ObjectVector.h"
4
5#include "TClonesArray.h"
6
7#include "EventModel/EventModel.h"
8#include "LumiDigi/LumiDigi.h"
9#include "RootCnvSvc/Digi/DigiCnv.h"
10#include "RootCnvSvc/Digi/LumiDigiCnv.h"
11#include "RootCnvSvc/RootAddress.h"
12#include "RootEventData/TLumiDigi.h"
13
14LumiDigiCnv::LumiDigiCnv( ISvcLocator* svc ) : RootEventBaseCnv( classID(), svc ) {
15 m_rootBranchname = "m_lumiDigiCol";
16
17 m_adresses.push_back( &m_lumiDigiCol );
18 m_lumiDigiCol = 0;
19}
20
21StatusCode LumiDigiCnv::TObjectToDataObject( DataObject*& refpObject ) {
22 // creation of TDS object from root object
23
24 MsgStream log( msgSvc(), "LumiDigiCnv" );
25 log << MSG::DEBUG << "LumiDigiCnv::TObjectToDataObject" << endmsg;
26 StatusCode sc = StatusCode::SUCCESS;
27
28 LumiDigiCol* lumiDigiTdsCol = new LumiDigiCol;
29 refpObject = lumiDigiTdsCol;
30
31 if ( !m_lumiDigiCol ) return sc;
32 TIter lumiDigiIter( m_lumiDigiCol );
33 TLumiDigi* lumiDigiRoot = 0;
34 while ( ( lumiDigiRoot = (TLumiDigi*)lumiDigiIter.Next() ) )
35 {
36 LumiDigi* lumiDigiTds = new LumiDigi( lumiDigiRoot->getIntId() );
37 m_common.m_rootLumiDigiMap[lumiDigiRoot] = lumiDigiTds;
38
39 lumiDigiTds->setTimeChannel( lumiDigiRoot->getTimeChannel() );
40 lumiDigiTds->setChargeChannel( lumiDigiRoot->getChargeChannel() );
41 lumiDigiTds->setOverflow( lumiDigiRoot->getOverflow() );
42
43 lumiDigiTdsCol->push_back( lumiDigiTds );
44 }
45
46 delete m_lumiDigiCol;
47 m_lumiDigiCol = 0;
48 return sc;
49}
50
51StatusCode LumiDigiCnv::DataObjectToTObject( DataObject* obj, RootAddress* rootaddr ) {
52
53 MsgStream log( msgSvc(), "LumiDigiCnv" );
54 log << MSG::DEBUG << "LumiDigiCnv::DataObjectToTObject" << endmsg;
55 StatusCode sc = StatusCode::SUCCESS;
56
57 LumiDigiCol* lumiDigiColTds = dynamic_cast<LumiDigiCol*>( obj );
58 if ( !lumiDigiColTds )
59 {
60 log << MSG::ERROR << "Could not downcast to LumiDigiCol" << endmsg;
61 return StatusCode::FAILURE;
62 }
63
64 DataObject* evt;
65 m_eds->findObject( EventModel::Digi::Event, evt );
66 if ( evt == NULL )
67 {
68 log << MSG::ERROR << "Could not get DigiEvent in TDS" << endmsg;
69 return StatusCode::FAILURE;
70 }
71 DigiEvent* devtTds = dynamic_cast<DigiEvent*>( evt );
72 if ( !devtTds )
73 { log << MSG::ERROR << "LumiDigiCnv: Could not downcast to TDS DigiEvent" << endmsg; }
74 IOpaqueAddress* addr;
75
76 m_cnvSvc->getDigiCnv()->createRep( evt, addr );
77
78 TDigiEvent* recEvt = m_cnvSvc->getDigiCnv()->getWriteObject();
79
80 const TObjArray* m_lumiDigiCol = recEvt->getLumiDigiCol();
81 if ( !m_lumiDigiCol ) return sc;
82 recEvt->clearLumiDigiCol();
83 LumiDigiCol::const_iterator lumiDigiTds;
84
85 for ( lumiDigiTds = lumiDigiColTds->begin(); lumiDigiTds != lumiDigiColTds->end();
86 ++lumiDigiTds )
87 {
88 TLumiDigi* lumiDigiRoot = new TLumiDigi();
89
90 lumiDigiRoot->initialize( ( *lumiDigiTds )->getIntId(), ( *lumiDigiTds )->getTimeChannel(),
91 ( *lumiDigiTds )->getChargeChannel() );
92 lumiDigiRoot->setOverflow( ( *lumiDigiTds )->getOverflow() );
93
94 recEvt->addLumiDigi( lumiDigiRoot );
95 }
96
97 return sc;
98}
ObjectVector< LumiDigi > LumiDigiCol
IMessageSvc * msgSvc()
LumiDigiCnv(ISvcLocator *svc)
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
void setOverflow(const unsigned int overflow)
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 addLumiDigi(TLumiDigi *digi)
Add a LumiDigi into the MUC Data collection.
const TObjArray * getLumiDigiCol() const
retrieve the whole TObjArray of LumiDigi Data
UInt_t getOverflow() const
Definition TLumiDigi.cxx:11
void setOverflow(const UInt_t overflow)
Definition TLumiDigi.cxx:9
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
UInt_t getChargeChannel() const
Definition TRawData.cxx:48
UInt_t getTimeChannel() const
Definition TRawData.cxx:45