2#define MdcTrackCnv_CXX 1
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"
9#include "DstEvent/DstMdcTrack.h"
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"
18#include "TClonesArray.h"
25 MsgStream log(
msgSvc(),
"MdcTrackCnv" );
33 MsgStream log(
msgSvc(),
"MdcTrackCnv" );
34 log << MSG::DEBUG <<
"MdcTrackCnv::TObjectToDataObject" << endmsg;
35 StatusCode sc = StatusCode::SUCCESS;
39 refpObject = mdcTrackTdsCol;
42 if ( !m_mdcTrackCol )
return sc;
43 TIter mdcTrackIter( m_mdcTrackCol );
45 while ( ( mdcTrackRoot = (
TMdcTrack*)mdcTrackIter.Next() ) )
48 int trackId = mdcTrackRoot->
trackId();
49 int charge = mdcTrackRoot->
charge();
51 for (
int i = 0; i < 5; i++ )
53 helix[i] = mdcTrackRoot->
helix( i );
54 log << MSG::INFO <<
"in MdcTrackCnv, helix[" << i <<
"]: " << helix[i] << endmsg;
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();
71 int nlayer = mdcTrackRoot->
nlayer();
74 for (
int i = 0; i < 15; i++ ) { err[i] = mdcTrackRoot->
err( i ); }
81 log << MSG::INFO <<
"in MdcTrackCnv, mdcTrackRoot.nster " <<
ns << endmsg;
84 m_common.m_rootMdcTrackMap[mdcTrackRoot] = mdcTrackTds;
87 log << MSG::INFO <<
" dstMdcTrack trkid: " << mdcTrackTds->
trackId() << endmsg;
93 log << MSG::INFO <<
"dstMdcTrack helix: " << mdcTrackTds->
helix() << endmsg;
95 mdcTrackTds->
setPxy( pxy );
96 mdcTrackTds->
setPx( px );
97 mdcTrackTds->
setPy( py );
98 mdcTrackTds->
setPz( pz );
99 mdcTrackTds->
setP( p );
101 mdcTrackTds->
setPhi( phi );
102 mdcTrackTds->
setX( x );
103 mdcTrackTds->
setY( y );
104 mdcTrackTds->
setZ( z );
105 mdcTrackTds->
setR( r );
113 log << MSG::INFO <<
" dstMdcTrack nster: " << mdcTrackTds->
nster() << endmsg;
115 mdcTrackTdsCol->push_back( mdcTrackTds );
117 delete m_mdcTrackCol;
119 return StatusCode::SUCCESS;
124 MsgStream log(
msgSvc(),
"MdcTrackCnv" );
125 log << MSG::DEBUG <<
"MdcTrackCnv::DataObjectToTObject" << endmsg;
126 StatusCode sc = StatusCode::SUCCESS;
129 if ( !mdcTrackColTds )
131 log << MSG::ERROR <<
"Could not downcast to MdcTrackCol" << endmsg;
132 return StatusCode::FAILURE;
139 log << MSG::ERROR <<
"Could not get DstEvent in TDS " << endmsg;
140 return StatusCode::FAILURE;
144 { log << MSG::ERROR <<
"MdcTrackCnv:Could not downcast to TDS DstEvent" << endmsg; }
145 IOpaqueAddress* addr;
147 m_cnvSvc->getDstCnv()->createRep( evt, addr );
151 if ( !m_mdcTrackCol )
return sc;
154 DstMdcTrackCol::const_iterator mdcTrackTds;
156 for ( mdcTrackTds = mdcTrackColTds->begin(); mdcTrackTds != mdcTrackColTds->end();
159 Int_t trackId = ( *mdcTrackTds )->trackId();
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();
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();
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;
184 mdcTrackRoot->
setErr( err );
193 return StatusCode::SUCCESS;
ObjectVector< DstMdcTrack > DstMdcTrackCol
void setPxy(const double pxy)
void setTrackId(const int trackId)
void setPy(const double py)
void setZ(const double z)
void setNster(const int ns)
void setX(const double x)
void setError(double err[15])
void setNdof(const int ndof)
void setTheta(const double theta)
void setStat(const int stat)
const int trackId() const
void setNlayer(const int nlayer)
void setP(const double p)
void setHelix(double helix[5])
void setPoca(double poca[3])
void setR(const double r)
void setCharge(const int charge)
const HepVector helix() const
......
void setY(const double y)
void setChi2(const double chi)
void setPhi(const double phi)
void setPz(const double pz)
void setPx(const double px)
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
MdcTrackCnv(ISvcLocator *svc)
static const CLID & classID()
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.
void clearMdcTrackCol()
clear the whole array (necessary because of the consts-s)
const TObjArray * getMdcTrackCol() const
retrieve the whole TObjArray of MdcTrack Data
void setLastLayer(const Int_t lL)
Double_t err(Int_t i) const
void setNster(const Int_t ns)
void setChi2(const Double_t chi)
Double_t helix(Int_t i) const
void setNlayer(const Int_t nlayer)
void setNdof(const Int_t ndof)
void setTrackId(const Int_t trackId)
void setFirstLayer(const Int_t fL)
void setErr(const Double_t err[15])
void setStat(const Int_t stat)
void setHelix(const Double_t helix[5])
_EXTERN_ std::string Event