2#define EmcTrackCnv_CXX 1
4#include "GaudiKernel/DataObject.h"
5#include "GaudiKernel/MsgStream.h"
6#include "GaudiKernel/ObjectVector.h"
8#include "TClonesArray.h"
10#include "EventModel/EventModel.h"
12#include "DstEvent/DstEmcShower.h"
13#include "DstEvent/DstEvent.h"
14#include "RootEventData/TDstEvent.h"
15#include "RootEventData/TEmcTrack.h"
17#include "RootCnvSvc/Dst/DstCnv.h"
18#include "RootCnvSvc/Dst/EmcTrackCnv.h"
19#include "RootCnvSvc/RootAddress.h"
32 MsgStream log(
msgSvc(),
"EmcTrackCnv" );
45 MsgStream log(
msgSvc(),
"EmcTrackCnv" );
46 log << MSG::DEBUG <<
"EmcTrackCnv::TObjectToDataObject" << endmsg;
47 StatusCode sc = StatusCode::SUCCESS;
51 refpObject = emcTrackTdsCol;
54 if ( !m_emcTrackCol )
return sc;
55 TIter emcTrackIter( m_emcTrackCol );
57 while ( ( emcTrackRoot = (
TEmcTrack*)emcTrackIter.Next() ) )
59 int trackId = emcTrackRoot->
trackId();
60 int numHits = emcTrackRoot->
numHits();
61 int status = emcTrackRoot->
status();
62 int cellId = emcTrackRoot->
cellId();
63 int module = emcTrackRoot->
module();
64 double x = emcTrackRoot->
x();
65 double y = emcTrackRoot->
y();
66 double z = emcTrackRoot->
z();
67 double dtheta = emcTrackRoot->
dtheta();
68 double dphi = emcTrackRoot->
dphi();
70 double dE = emcTrackRoot->
dE();
71 double eSeed = emcTrackRoot->
eSeed();
72 double e3x3 = emcTrackRoot->
e3x3();
73 double e5x5 = emcTrackRoot->
e5x5();
76 double latMoment = emcTrackRoot->
latMoment();
77 double a20Moment = emcTrackRoot->
a20Moment();
78 double a42Moment = emcTrackRoot->
a42Moment();
80 HepSymMatrix matrix( 3 );
81 matrix[0][0] = emcTrackRoot->
err( 0 );
82 matrix[1][1] = emcTrackRoot->
err( 1 );
83 matrix[2][2] = emcTrackRoot->
err( 2 );
84 matrix[0][1] = emcTrackRoot->
err( 3 );
85 matrix[0][2] = emcTrackRoot->
err( 4 );
86 matrix[1][2] = emcTrackRoot->
err( 5 );
89 m_common.m_rootEmcShowerMap[emcTrackRoot] = emcTrackTds;
96 HepPoint3D pos( x, y, z );
99 emcTrackTds->
setDE( dE );
112 emcTrackTdsCol->push_back( emcTrackTds );
118 delete m_emcTrackCol;
120 return StatusCode::SUCCESS;
125 MsgStream log(
msgSvc(),
"EmcTrackCnv" );
126 log << MSG::DEBUG <<
"EmcTrackCnv::DataObjectToTObject" << endmsg;
127 StatusCode sc = StatusCode::SUCCESS;
130 if ( !emcTrackColTds )
132 log << MSG::ERROR <<
"Could not downcast to EmcTrackCol" << endmsg;
133 return StatusCode::FAILURE;
140 log << MSG::ERROR <<
"Could not get DstEvent in TDS " << endmsg;
141 return StatusCode::FAILURE;
145 { log << MSG::ERROR <<
"EmcTrackCnv:Could not downcast to TDS DstEvent" << endmsg; }
146 IOpaqueAddress* addr;
148 m_cnvSvc->getDstCnv()->createRep( evt, addr );
152 if ( !m_emcTrackCol )
return sc;
155 DstEmcShowerCol::const_iterator emcTrackTds;
157 for ( emcTrackTds = emcTrackColTds->begin(); emcTrackTds != emcTrackColTds->end();
160 Int_t trackId = ( *emcTrackTds )->trackId();
161 Int_t numHits = ( *emcTrackTds )->numHits();
162 Int_t status = ( *emcTrackTds )->status();
163 Int_t cellId = ( *emcTrackTds )->cellId();
164 Int_t module = ( *emcTrackTds )->module();
165 Double_t x = ( *emcTrackTds )->x();
166 Double_t y = ( *emcTrackTds )->y();
167 Double_t z = ( *emcTrackTds )->z();
168 Double_t dtheta = ( *emcTrackTds )->dtheta();
169 Double_t dphi = ( *emcTrackTds )->dphi();
170 Double_t
energy = ( *emcTrackTds )->energy();
171 Double_t dE = ( *emcTrackTds )->dE();
172 Double_t eSeed = ( *emcTrackTds )->eSeed();
173 Double_t e3x3 = ( *emcTrackTds )->e3x3();
174 Double_t e5x5 = ( *emcTrackTds )->e5x5();
175 Double_t
time = ( *emcTrackTds )->time();
176 Double_t secondMoment = ( *emcTrackTds )->secondMoment();
177 Double_t latMoment = ( *emcTrackTds )->latMoment();
178 Double_t a20Moment = ( *emcTrackTds )->a20Moment();
179 Double_t a42Moment = ( *emcTrackTds )->a42Moment();
181 HepSymMatrix matrix = ( *emcTrackTds )->errorMatrix();
183 err[0] = matrix[0][0];
184 err[1] = matrix[1][1];
185 err[2] = matrix[2][2];
186 err[3] = matrix[0][1];
187 err[4] = matrix[0][2];
188 err[5] = matrix[1][2];
200 emcTrackRoot->
setX( x );
201 emcTrackRoot->
setY( y );
202 emcTrackRoot->
setZ( z );
204 emcTrackRoot->
setDE( dE );
215 emcTrackRoot->
setErr( err );
220 return StatusCode::SUCCESS;
ObjectVector< DstEmcShower > DstEmcShowerCol
************Class m_ypar INTEGER m_KeyWgt INTEGER m_KeyIHVP INTEGER m_KeyGPS INTEGER m_IsBeamPolarized INTEGER m_EvtGenInterface DOUBLE PRECISION m_Emin DOUBLE PRECISION m_sphot DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_q2 DOUBLE PRECISION m_PolBeam2 DOUBLE PRECISION m_xErrPb *COMMON c_KK2f $ !CMS energy average $ !Spin Polarization vector first beam $ !Spin Polarization vector second beam $ !Beam energy spread[GeV] $ !minimum hadronization energy[GeV] $ !input READ never touch them !$ !debug facility $ !maximum weight $ !inverse alfaQED $ !minimum real photon energy
void setE3x3(double e3x3)
void setDtheta(double dt)
void setSecondMoment(double secondMoment)
void setA20Moment(double a20Moment)
void setPosition(const HepPoint3D &pos)
void setA42Moment(double a42Moment)
void setESeed(double eSeed)
void setTime(double time)
void setLatMoment(double latMoment)
void setErrorMatrix(const HepSymMatrix &error)
void setTrackId(int trackId)
void setE5x5(double e5x5)
EmcTrackCnv(ISvcLocator *svc)
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
static const CLID & classID()
Definition of a Root address, derived from IOpaqueAddress.
std::string m_rootTreename
each converter knows it's treename
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 addEmcTrack(TEmcTrack *Track)
Add a TkrTrack into the Emc data collection.
const TObjArray * getEmcTrackCol() const
retrieve the whole TObjArray of EmcTrack Data
void clearEmcTrackCol()
clear the whole array (necessary because of the consts-s)
void setTrackId(const Int_t trackId)
void setA20Moment(const Double_t a20Moment)
Double_t a42Moment() const
void setEnergy(const Double_t e)
void setESeed(const Double_t eSeed)
void setNumHits(const Int_t hit)
void setDtheta(const Double_t dt)
void setX(const Double_t x)
void setErr(const Double_t err[6])
Double_t err(Int_t i) const
void setModule(const Int_t mod)
void setSecondMoment(const Double_t secondMoment)
void setDE(const Double_t de)
void setY(const Double_t y)
void setA42Moment(const Double_t a42Moment)
Double_t secondMoment() const
void setZ(const Double_t z)
Double_t a20Moment() const
void setTime(const Double_t time)
void setCellId(const Int_t id)
void setE3x3(const Double_t e3x3)
void setE5x5(const Double_t e5x5)
void setStatus(const Int_t st)
void setLatMoment(const Double_t latMoment)
Double_t latMoment() const
void setDphi(const Double_t dpi)
_EXTERN_ std::string Event