1#ifndef RecMdcTrackCnv_CXX
2#define RecMdcTrackCnv_CXX 1
4#include "GaudiKernel/DataObject.h"
5#include "GaudiKernel/MsgStream.h"
6#include "GaudiKernel/ObjectVector.h"
8#include "Identifier/Identifier.h"
9#include "Identifier/MdcID.h"
10#include "TClonesArray.h"
12#include "EventModel/EventModel.h"
14#include "MdcRecEvent/RecMdcHit.h"
15#include "MdcRecEvent/RecMdcTrack.h"
16#include "ReconEvent/ReconEvent.h"
17#include "RootEventData/TRecMdcTrack.h"
18#include "RootEventData/TRecTrackEvent.h"
20#include "RootCnvSvc/Rec/RecMdcTrackCnv.h"
21#include "RootCnvSvc/Rec/RecTrackCnv.h"
22#include "RootCnvSvc/RootAddress.h"
35 MsgStream log(
msgSvc(),
"RecMdcTrackCnv" );
46 MsgStream log(
msgSvc(),
"RecMdcTrackCnv" );
47 log << MSG::DEBUG <<
"RecMdcTrackCnv::TObjectToDataObject" << endmsg;
51 refpObject = recMdcTrackCol;
53 if ( !m_recMdcTrackCol )
return StatusCode::SUCCESS;
54 TIter mdcTrackIter( m_recMdcTrackCol );
62 IDataProviderSvc* dataSvc = 0;
63 StatusCode sc = serviceLocator()->getService(
64 "EventDataSvc", IDataProviderSvc::interfaceID(), (IInterface*&)dataSvc );
65 if ( !sc.isSuccess() )
67 log << MSG::FATAL <<
"Could not get EventDataSvc in RecMdcTrackCnv" << endmsg;
68 return ( StatusCode::FAILURE );
70 SmartDataPtr<RecMdcHitCol> recMdcHitCol( dataSvc,
"/Event/Recon/RecMdcHitCol" );
73 log << MSG::FATAL <<
"Could not find RecMdcHitCol" << endmsg;
74 return ( StatusCode::FAILURE );
83 mdcTrackIter = m_recMdcTrackCol;
85 while ( ( recMdcTrackRoot = (
TRecMdcTrack*)mdcTrackIter.Next() ) )
87 int trackId = recMdcTrackRoot->
trackId();
88 int charge = recMdcTrackRoot->
charge();
90 for (
int i = 0; i < 5; i++ ) { helix[i] = recMdcTrackRoot->
helix( i ); }
91 double pxy = recMdcTrackRoot->
pxy();
92 double px = recMdcTrackRoot->
px();
93 double py = recMdcTrackRoot->
py();
94 double pz = recMdcTrackRoot->
pz();
95 double p = recMdcTrackRoot->
p();
96 double theta = recMdcTrackRoot->
theta();
97 double phi = recMdcTrackRoot->
phi();
98 double x = recMdcTrackRoot->
x();
99 double y = recMdcTrackRoot->
y();
100 double z = recMdcTrackRoot->
z();
101 double r = recMdcTrackRoot->
r();
102 int stat = recMdcTrackRoot->
stat();
103 double chi = recMdcTrackRoot->
chi2();
104 int ndof = recMdcTrackRoot->
ndof();
105 int nlayer = recMdcTrackRoot->
nlayer();
107 for (
int i = 0; i < 15; i++ ) { err[i] = recMdcTrackRoot->
err( i ); }
108 int nh = recMdcTrackRoot->
nhits();
109 int ns = recMdcTrackRoot->
nster();
111 double vx0 = recMdcTrackRoot->
vx0();
112 double vy0 = recMdcTrackRoot->
vy0();
113 double vz0 = recMdcTrackRoot->
vz0();
114 double fiterm = recMdcTrackRoot->
fiTerm();
116 m_common.m_rootRecMdcTrackMap[recMdcTrackRoot] = recMdcTrack;
121 recMdcTrack->
setPxy( pxy );
122 recMdcTrack->
setPx( px );
123 recMdcTrack->
setPy( py );
124 recMdcTrack->
setPz( pz );
125 recMdcTrack->
setP( p );
127 recMdcTrack->
setPhi( phi );
128 recMdcTrack->
setX( x );
129 recMdcTrack->
setY( y );
130 recMdcTrack->
setZ( z );
131 recMdcTrack->
setR( r );
141 recMdcTrack->
setVX0( vx0 );
142 recMdcTrack->
setVY0( vy0 );
143 recMdcTrack->
setVZ0( vz0 );
148 RecMdcHitCol::iterator
iter = recMdcHitCol->begin();
149 for ( ;
iter != recMdcHitCol->end();
iter++ )
153 if ( ( *iter )->getTrkId() == trackId )
155 SmartRef<RecMdcHit> refhit( *
iter );
156 theHitRefVec.push_back( refhit );
166 for (
int ii = 0; ii < nhits; ii++ )
176 recMdcTrackCol->push_back( recMdcTrack );
179 delete m_recMdcTrackCol;
180 m_recMdcTrackCol = 0;
181 return StatusCode::SUCCESS;
186 MsgStream log(
msgSvc(),
"RecMdcTrackCnv" );
187 log << MSG::DEBUG <<
"RecMdcTrackCnv::DataObjectToTObject" << endmsg;
190 if ( !mdcTrackColTds )
192 log << MSG::ERROR <<
"Could not downcast to MdcTrackCol" << endmsg;
193 return StatusCode::FAILURE;
197 if ( !sc.isSuccess() )
199 log << MSG::ERROR <<
"Could not get ReconEvent in TDS " << endmsg;
200 return StatusCode::FAILURE;
204 { log << MSG::ERROR <<
"RecMdcTrackCnv:Could not downcast to TDS ReconEvent" << endmsg; }
206 IOpaqueAddress* addr;
208 m_cnvSvc->getRecTrackCnv()->createRep( evt, addr );
212 if ( !m_recMdcTrackCol )
return StatusCode::SUCCESS;
216 RecMdcTrackCol::const_iterator recMdcTrack;
217 for ( recMdcTrack = mdcTrackColTds->begin(); recMdcTrack != mdcTrackColTds->end();
220 Int_t trackId = ( *recMdcTrack )->trackId();
222 for (
int i = 0; i < 5; i++ )
224 log << MSG::INFO <<
" recMdcTrack.helix(" << i <<
"): " << ( *recMdcTrack )->helix( i )
226 helix[i] = ( *recMdcTrack )->helix( i );
229 Int_t stat = ( *recMdcTrack )->stat();
230 Double_t chi = ( *recMdcTrack )->chi2();
231 Int_t ndof = ( *recMdcTrack )->ndof();
232 Int_t
ns = ( *recMdcTrack )->nster();
233 Int_t nlayer = ( *recMdcTrack )->nlayer();
236 for ( Int_t i = 0; i < 15; i++ ) { er[i] = ( *recMdcTrack )->err( i ); }
237 Int_t nh = ( *recMdcTrack )->getNhits();
239 Double_t vx0 = ( *recMdcTrack )->getVX0();
240 Double_t vy0 = ( *recMdcTrack )->getVY0();
241 Double_t vz0 = ( *recMdcTrack )->getVZ0();
242 Double_t fiterm = ( *recMdcTrack )->getFiTerm();
249 log << MSG::INFO <<
" test,recMdcTrackRoot.px: " << recMdcTrackRoot->
px()
250 <<
" recMdcTrackRoot.py: " << recMdcTrackRoot->
py()
251 <<
" recMdcTrackRoot.pz: " << recMdcTrackRoot->
pz() << endmsg;
253 recMdcTrackRoot->
setStat( stat );
254 recMdcTrackRoot->
setChi2( chi );
255 recMdcTrackRoot->
setNdof( ndof );
257 recMdcTrackRoot->
setErr( er );
261 recMdcTrackRoot->
setVX0( vx0 );
262 recMdcTrackRoot->
setVY0( vy0 );
263 recMdcTrackRoot->
setVZ0( vz0 );
269 return StatusCode::SUCCESS;
ObjectVector< RecMdcTrack > RecMdcTrackCol
SmartRefVector< RecMdcHit > HitRefVec
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)
void setNlayer(const int nlayer)
void setP(const double p)
void setHelix(double helix[5])
void setR(const double r)
void setCharge(const int charge)
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)
static int layer(const Identifier &id)
Values of different levels (failure returns 0).
static int wire(const Identifier &id)
static const CLID & classID()
RecMdcTrackCnv(ISvcLocator *svc)
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
const HitRefVec getVecHits(void) const
void setVecHits(HitRefVec vechits)
void setFiTerm(double fiterm)
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 setVZ0(Double_t vz0)
void setStat(const Int_t stat)
void setVX0(Double_t vx0)
void setNdof(const Int_t ndof)
void setErr(const Double_t er[15])
void setHelix(const Double_t helix[5])
void setNhits(const Int_t nh)
void setNster(const Int_t ns)
void setNlayer(const Int_t nlayer)
void setChi2(const Double_t chi)
Double_t helix(Int_t i) const
Double_t err(Int_t i) const
void setTrackId(const Int_t trackId)
Double_t fiTerm(void) const
void setFiTerm(Double_t fiterm)
void setVY0(Double_t vy0)
void addRecMdcTrack(TRecMdcTrack *Track)
Add a TkrTrack into the Mdc data collection.
void clearRecMdcTrackCol()
clear the whole array (necessary because of the consts-s)
const TObjArray * getRecMdcTrackCol() const
retrieve the whole TObjArray of RecMdcTrack Data
_EXTERN_ std::string Event