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