BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EmcTrackCnv.cxx
Go to the documentation of this file.
1#ifndef EmcTrackCnv_CXX
2#define EmcTrackCnv_CXX 1
3
4#include "GaudiKernel/DataObject.h"
5#include "GaudiKernel/MsgStream.h"
6#include "GaudiKernel/ObjectVector.h"
7
8#include "TClonesArray.h"
9
10#include "EventModel/EventModel.h"
11
12#include "DstEvent/DstEmcShower.h" //TDS object
13#include "DstEvent/DstEvent.h" //TDS object
14#include "RootEventData/TDstEvent.h"
15#include "RootEventData/TEmcTrack.h" // standard root object
16
17#include "RootCnvSvc/Dst/DstCnv.h"
18#include "RootCnvSvc/Dst/EmcTrackCnv.h"
19#include "RootCnvSvc/RootAddress.h"
20
21#include <vector>
22
23using namespace std;
24
25// Instantiation of a static factory class used by clients to create
26// instances of this service
27// static CnvFactory<EmcTrackCnv> s_factory;
28// const ICnvFactory& EmcTrackCnvFactory = s_factory;
29
30EmcTrackCnv::EmcTrackCnv( ISvcLocator* svc ) : RootEventBaseCnv( classID(), svc ) {
31 // Here we associate this converter with the /Event path on the TDS.
32 MsgStream log( msgSvc(), "EmcTrackCnv" );
33 // log << MSG::DEBUG << "Constructor called for " << objType() << endmsg;
34 m_rootTreename = "Rec";
35 m_rootBranchname = "m_emcTrackCol";
36 // declareObject(EventModel::Dst::DstEmcShowerCol, objType(), m_rootTreename,
37 // m_rootBranchname);
38 m_adresses.push_back( &m_emcTrackCol );
39 m_emcTrackCol = 0;
40}
41
42StatusCode EmcTrackCnv::TObjectToDataObject( DataObject*& refpObject ) {
43 // creation of TDS object from root object
44
45 MsgStream log( msgSvc(), "EmcTrackCnv" );
46 log << MSG::DEBUG << "EmcTrackCnv::TObjectToDataObject" << endmsg;
47 StatusCode sc = StatusCode::SUCCESS;
48
49 // create the TDS location for the EmcTrack Collection
50 DstEmcShowerCol* emcTrackTdsCol = new DstEmcShowerCol;
51 refpObject = emcTrackTdsCol;
52
53 // now convert
54 if ( !m_emcTrackCol ) return sc;
55 TIter emcTrackIter( m_emcTrackCol );
56 TEmcTrack* emcTrackRoot = 0;
57 while ( ( emcTrackRoot = (TEmcTrack*)emcTrackIter.Next() ) )
58 {
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();
69 double energy = emcTrackRoot->energy();
70 double dE = emcTrackRoot->dE();
71 double eSeed = emcTrackRoot->eSeed();
72 double e3x3 = emcTrackRoot->e3x3();
73 double e5x5 = emcTrackRoot->e5x5();
74 double time = emcTrackRoot->time();
75 double secondMoment = emcTrackRoot->secondMoment();
76 double latMoment = emcTrackRoot->latMoment();
77 double a20Moment = emcTrackRoot->a20Moment();
78 double a42Moment = emcTrackRoot->a42Moment();
79
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 );
87
88 DstEmcShower* emcTrackTds = new DstEmcShower();
89 m_common.m_rootEmcShowerMap[emcTrackRoot] = emcTrackTds;
90
91 emcTrackTds->setTrackId( trackId );
92 emcTrackTds->setNumHits( numHits );
93 emcTrackTds->setStatus( status );
94 emcTrackTds->setCellId( cellId );
95 emcTrackTds->setModule( module );
96 HepPoint3D pos( x, y, z );
97 emcTrackTds->setPosition( pos );
98 emcTrackTds->setEnergy( energy );
99 emcTrackTds->setDE( dE );
100 emcTrackTds->setDtheta( dtheta );
101 emcTrackTds->setDphi( dphi );
102 emcTrackTds->setESeed( eSeed );
103 emcTrackTds->setE3x3( e3x3 );
104 emcTrackTds->setE5x5( e5x5 );
105 emcTrackTds->setTime( time );
106 emcTrackTds->setSecondMoment( secondMoment );
107 emcTrackTds->setLatMoment( latMoment );
108 emcTrackTds->setA20Moment( a20Moment );
109 emcTrackTds->setA42Moment( a42Moment );
110 emcTrackTds->setErrorMatrix( matrix );
111
112 emcTrackTdsCol->push_back( emcTrackTds );
113 // delete emcTrackTds;
114 // emcTrackTds = NULL;
115 }
116
117 // m_emcTrackCol->Delete(); // wensp add 2005/12/30
118 delete m_emcTrackCol;
119 m_emcTrackCol = 0;
120 return StatusCode::SUCCESS;
121}
122
123StatusCode EmcTrackCnv::DataObjectToTObject( DataObject* obj, RootAddress* rootaddr ) {
124
125 MsgStream log( msgSvc(), "EmcTrackCnv" );
126 log << MSG::DEBUG << "EmcTrackCnv::DataObjectToTObject" << endmsg;
127 StatusCode sc = StatusCode::SUCCESS;
128
129 DstEmcShowerCol* emcTrackColTds = dynamic_cast<DstEmcShowerCol*>( obj );
130 if ( !emcTrackColTds )
131 {
132 log << MSG::ERROR << "Could not downcast to EmcTrackCol" << endmsg;
133 return StatusCode::FAILURE;
134 }
135
136 DataObject* evt;
137 m_eds->findObject( EventModel::Dst::Event, evt );
138 if ( evt == NULL )
139 {
140 log << MSG::ERROR << "Could not get DstEvent in TDS " << endmsg;
141 return StatusCode::FAILURE;
142 }
143 DstEvent* devtTds = dynamic_cast<DstEvent*>( evt );
144 if ( !devtTds )
145 { log << MSG::ERROR << "EmcTrackCnv:Could not downcast to TDS DstEvent" << endmsg; }
146 IOpaqueAddress* addr;
147
148 m_cnvSvc->getDstCnv()->createRep( evt, addr );
149 TDstEvent* recEvt = m_cnvSvc->getDstCnv()->getWriteObject();
150
151 const TObjArray* m_emcTrackCol = recEvt->getEmcTrackCol();
152 if ( !m_emcTrackCol ) return sc;
153 recEvt->clearEmcTrackCol(); // necessary in case there is I/O at the same time since array is
154 // static
155 DstEmcShowerCol::const_iterator emcTrackTds;
156
157 for ( emcTrackTds = emcTrackColTds->begin(); emcTrackTds != emcTrackColTds->end();
158 emcTrackTds++ )
159 {
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();
180
181 HepSymMatrix matrix = ( *emcTrackTds )->errorMatrix();
182 Double_t err[6];
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];
189
190 TEmcTrack* emcTrackRoot = new TEmcTrack();
191 // m_common.m_emcShowerMap[(*emcTrackTds)] = emcTrackRoot;
192
193 // emcTrackRoot->initialize(numHits ,status ,cellId ,module ,x ,dx,y ,dy,z ,dz,theta
194 // ,dtheta ,phi,dphi ,energy ,dE,cosx ,cosy ,cosz);
195 emcTrackRoot->setTrackId( trackId );
196 emcTrackRoot->setNumHits( numHits );
197 emcTrackRoot->setStatus( status );
198 emcTrackRoot->setCellId( cellId );
199 emcTrackRoot->setModule( module );
200 emcTrackRoot->setX( x );
201 emcTrackRoot->setY( y );
202 emcTrackRoot->setZ( z );
203 emcTrackRoot->setEnergy( energy );
204 emcTrackRoot->setDE( dE );
205 emcTrackRoot->setDtheta( dtheta );
206 emcTrackRoot->setDphi( dphi );
207 emcTrackRoot->setESeed( eSeed );
208 emcTrackRoot->setE3x3( e3x3 );
209 emcTrackRoot->setE5x5( e5x5 );
210 emcTrackRoot->setTime( time );
211 emcTrackRoot->setSecondMoment( secondMoment );
212 emcTrackRoot->setLatMoment( latMoment );
213 emcTrackRoot->setA20Moment( a20Moment );
214 emcTrackRoot->setA42Moment( a42Moment );
215 emcTrackRoot->setErr( err );
216
217 recEvt->addEmcTrack( emcTrackRoot );
218 }
219
220 return StatusCode::SUCCESS;
221}
222#endif
Double_t time
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
Definition KK2f.h:50
IMessageSvc * msgSvc()
void setSecondMoment(double secondMoment)
void setPosition(const HepPoint3D &pos)
void setErrorMatrix(const HepSymMatrix &error)
EmcTrackCnv(ISvcLocator *svc)
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
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 setA20Moment(const Double_t a20Moment)
void setErr(const Double_t err[6])
Definition TEmcTrack.cxx:15
void setSecondMoment(const Double_t secondMoment)
void setA42Moment(const Double_t a42Moment)
void setLatMoment(const Double_t latMoment)