BOSS 7.0.2
BESIII Offline Software System
Loading...
Searching...
No Matches
MdcTrackCnv.cxx
Go to the documentation of this file.
1#ifndef MdcTrackCnv_CXX
2#define MdcTrackCnv_CXX 1
3
4#include "GaudiKernel/MsgStream.h"
5#include "GaudiKernel/DataObject.h"
6#include "GaudiKernel/ObjectVector.h"
7#include "TClonesArray.h"
8#include "EventModel/EventModel.h"
9#include "DstEvent/DstEvent.h" //TDS object
10#include "DstEvent/DstMdcTrack.h" //TDS object
11#include "RootEventData/TMdcTrack.h" // standard root object
12#include "RootEventData/TDstEvent.h"
13#include "RootCnvSvc/Dst/DstCnv.h"
14#include "RootCnvSvc/Dst/MdcTrackCnv.h"
15#include "RootCnvSvc/RootAddress.h"
16#include <vector>
17#include "CLHEP/Matrix/Vector.h"
18#include "CLHEP/Matrix/SymMatrix.h"
19#include "CLHEP/Geometry/Point3D.h"
20
21using namespace std;
22
23
24MdcTrackCnv::MdcTrackCnv(ISvcLocator* svc)
25: RootEventBaseCnv(classID(), svc)
26{
27 // Here we associate this converter with the /Event path on the TDS.
28 MsgStream log(msgSvc(), "MdcTrackCnv");
29 m_rootBranchname ="m_mdcTrackCol";
30 m_adresses.push_back(&m_mdcTrackCol);
31 m_mdcTrackCol=0;
32}
33
34StatusCode MdcTrackCnv::TObjectToDataObject(DataObject*& refpObject) {
35 // creation of TDS object from root object
36 MsgStream log(msgSvc(), "MdcTrackCnv");
37 log << MSG::DEBUG << "MdcTrackCnv::TObjectToDataObject" << endreq;
38 StatusCode sc=StatusCode::SUCCESS;
39
40 // create the TDS location for the MdcTrack Collection
41 DstMdcTrackCol* mdcTrackTdsCol = new DstMdcTrackCol;
42 refpObject=mdcTrackTdsCol;
43
44 // now convert
45 if (!m_mdcTrackCol) return sc;
46 TIter mdcTrackIter(m_mdcTrackCol);
47 TMdcTrack *mdcTrackRoot = 0;
48 while ((mdcTrackRoot = (TMdcTrack*)mdcTrackIter.Next())) {
49
50 int trackId = mdcTrackRoot->trackId();
51 int charge = mdcTrackRoot->charge();
52 double helix[5];
53 for(int i=0; i<5; i++){
54 helix[i] = mdcTrackRoot->helix(i);
55 log<<MSG::INFO<<"in MdcTrackCnv, helix["<<i<<"]: "<<helix[i]<<endreq;
56 }
57 double pxy = mdcTrackRoot->pxy();
58 double px = mdcTrackRoot->px();
59 double py = mdcTrackRoot->py();
60 double pz = mdcTrackRoot->pz();
61 double p = mdcTrackRoot->p();
62 double theta = mdcTrackRoot->theta();
63 double phi = mdcTrackRoot->phi();
64 double x = mdcTrackRoot->x();
65 double y = mdcTrackRoot->y();
66 double z = mdcTrackRoot->z();
67 double r = mdcTrackRoot->r();
68 int stat = mdcTrackRoot->stat();
69 double chi = mdcTrackRoot->chi2();
70 int ndof = mdcTrackRoot->ndof();
71 int ns = mdcTrackRoot->nster();
72 int nlayer = mdcTrackRoot->nlayer();
73
74 double err[15];
75 for (int i=0; i<15; i++){
76 err[i] = mdcTrackRoot->err(i);
77 }
78
79 double poca[3];
80 poca[0] = x;
81 poca[1] = y;
82 poca[2] = z;
83
84 log<<MSG::INFO<<"in MdcTrackCnv, mdcTrackRoot.nster "<<ns<<endreq;
85
86 DstMdcTrack *mdcTrackTds = new DstMdcTrack();
87 m_common.m_rootMdcTrackMap[mdcTrackRoot] = mdcTrackTds;
88
89 mdcTrackTds->setTrackId( trackId );
90 log<<MSG::INFO<<" dstMdcTrack trkid: "<<mdcTrackTds->trackId()<<endreq;
91
92 mdcTrackTds->setCharge( charge );
93 mdcTrackTds->setHelix(helix);
94 mdcTrackTds->setPoca(poca);
95
96 log<<MSG::INFO<<"dstMdcTrack helix: "<<mdcTrackTds->helix()<<endreq;
97
98 mdcTrackTds->setPxy( pxy );
99 mdcTrackTds->setPx( px );
100 mdcTrackTds->setPy( py );
101 mdcTrackTds->setPz( pz );
102 mdcTrackTds->setP( p );
103 mdcTrackTds->setTheta( theta );
104 mdcTrackTds->setPhi( phi );
105 mdcTrackTds->setX( x );
106 mdcTrackTds->setY( y );
107 mdcTrackTds->setZ( z );
108 mdcTrackTds->setR( r );
109 mdcTrackTds->setStat( stat );
110 mdcTrackTds->setChi2( chi );
111 mdcTrackTds->setNdof( ndof );
112 mdcTrackTds->setError( err );
113 mdcTrackTds->setNster( ns );
114 mdcTrackTds->setNlayer( nlayer );
115
116 log<<MSG::INFO<<" dstMdcTrack nster: "<<mdcTrackTds->nster()<<endreq;
117
118 mdcTrackTdsCol->push_back(mdcTrackTds);
119
120 }
121 delete m_mdcTrackCol;
122 m_mdcTrackCol = 0;
123 return StatusCode::SUCCESS;
124}
125
126StatusCode MdcTrackCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
127
128 MsgStream log(msgSvc(), "MdcTrackCnv");
129 log << MSG::DEBUG << "MdcTrackCnv::DataObjectToTObject" << endreq;
130 StatusCode sc=StatusCode::SUCCESS;
131
132 DstMdcTrackCol * mdcTrackColTds=dynamic_cast<DstMdcTrackCol *> (obj);
133 if (!mdcTrackColTds) {
134 log << MSG::ERROR << "Could not downcast to MdcTrackCol" << endreq;
135 return StatusCode::FAILURE;
136 }
137
138 DataObject *evt;
139 m_eds->findObject(EventModel::Dst::Event,evt);
140 if (evt==NULL) {
141 log << MSG::ERROR << "Could not get DstEvent in TDS " << endreq;
142 return StatusCode::FAILURE;
143 }
144 DstEvent * devtTds=dynamic_cast<DstEvent *> (evt);
145 if (!devtTds) {
146 log << MSG::ERROR << "MdcTrackCnv:Could not downcast to TDS DstEvent" << endreq;
147 }
148 IOpaqueAddress *addr;
149
150 m_cnvSvc->getDstCnv()->createRep(evt,addr);
152
153 const TObjArray *m_mdcTrackCol = recEvt->getMdcTrackCol();
154 if (!m_mdcTrackCol) return sc;
155 recEvt->clearMdcTrackCol(); //necessary in case there is I/O at the same time since array is static
156 DstMdcTrackCol::const_iterator mdcTrackTds;
157
158 for (mdcTrackTds = mdcTrackColTds->begin(); mdcTrackTds != mdcTrackColTds->end(); mdcTrackTds++) {
159 Int_t trackId =(*mdcTrackTds)->trackId();
160 Double_t helix[5];
161 for(int i=0;i<5;i++){
162 helix[i] = (*mdcTrackTds)->helix(i) ;
163 }
164 Int_t stat = (*mdcTrackTds)->stat();
165 Double_t chi = (*mdcTrackTds)->chi2();
166 Int_t ndof = (*mdcTrackTds)->ndof();
167 Double_t err[15];
168 for (Int_t i=0; i<15; i++){
169 err[i] = (*mdcTrackTds)->err(i);
170 }
171 Int_t ns = (*mdcTrackTds)->nster();
172 Int_t fL = (*mdcTrackTds)->firstLayer();
173 Int_t lL = (*mdcTrackTds)->lastLayer();
174 Int_t nlayer = (*mdcTrackTds)->nlayer();
175
176 TMdcTrack *mdcTrackRoot = new TMdcTrack();
177 //m_common.m_mdcTrackMap[(*mdcTrackTds)] = mdcTrackRoot;
178 mdcTrackRoot->setTrackId( trackId );
179
180 mdcTrackRoot->setHelix(helix);
181 log<<MSG::INFO<<"test,trackId: "<<mdcTrackRoot->trackId()<<endreq;
182 log<<MSG::INFO<<"test,px: "<<mdcTrackRoot->px()
183 <<"test,py: "<<mdcTrackRoot->py()
184 <<"test,pz: "<<mdcTrackRoot->pz()<<endreq;
185
186 mdcTrackRoot->setStat( stat );
187 mdcTrackRoot->setChi2( chi );
188 mdcTrackRoot->setNdof( ndof );
189 mdcTrackRoot->setErr( err );
190 mdcTrackRoot->setNster( ns );
191 mdcTrackRoot->setFirstLayer(fL);
192 mdcTrackRoot->setLastLayer(lL);
193 mdcTrackRoot->setNlayer(nlayer);
194
195 recEvt->addMdcTrack(mdcTrackRoot);
196 }
197
198 return StatusCode::SUCCESS;
199}
200#endif
Double_t x[10]
ObjectVector< DstMdcTrack > DstMdcTrackCol
static TDstEvent * getWriteObject()
returns object to be written (maintained here for all DIGI-converters)
void setError(double err[15])
void setHelix(double helix[5])
Definition: DstMdcTrack.cxx:98
void setPoca(double poca[3])
const HepVector helix() const
......
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
Definition: MdcTrackCnv.cxx:34
MdcTrackCnv(ISvcLocator *svc)
Definition: MdcTrackCnv.cxx:24
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.
void addMdcTrack(TMdcTrack *Track)
Add a TkrTrack into the Mdc data collection.
Definition: TDstEvent.cxx:120
void clearMdcTrackCol()
clear the whole array (necessary because of the consts-s)
const TObjArray * getMdcTrackCol() const
retrieve the whole TObjArray of MdcTrack Data
const Double_t py() const
Definition: TMdcTrack.cxx:57
const Int_t charge() const
Definition: TMdcTrack.cxx:18
const Double_t pz() const
Definition: TMdcTrack.cxx:61
const Double_t phi() const
Definition: TMdcTrack.cxx:74
const Double_t px() const
Definition: TMdcTrack.cxx:53
const Double_t y() const
Definition: TMdcTrack.cxx:34
const Double_t theta() const
Definition: TMdcTrack.cxx:70
const Double_t pxy() const
Definition: TMdcTrack.cxx:47
const Double_t x() const
Definition: TMdcTrack.cxx:30
const Double_t r() const
Definition: TMdcTrack.cxx:42
const Double_t p() const
Definition: TMdcTrack.cxx:65
const Double_t z() const
Definition: TMdcTrack.cxx:38
void setErr(const Double_t err[15])
Definition: TMdcTrack.cxx:84
void setHelix(const Double_t helix[5])
Definition: TMdcTrack.cxx:78
static std::map< const TObject *, const DstMdcTrack * > m_rootMdcTrackMap
#define ns(x)
Definition: xmltok.c:1504