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