BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
TofTrackCnv.cxx
Go to the documentation of this file.
1#ifndef TofTrackCnv_CXX
2#define TofTrackCnv_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/DstEvent.h" //TDS object
13#include "DstEvent/DstTofTrack.h" //TDS object
14#include "DstEvent/TofHitStatus.h"
15#include "RootEventData/TDstEvent.h"
16#include "RootEventData/TTofTrack.h" // standard root object
17
18#include "RootCnvSvc/Dst/DstCnv.h"
19#include "RootCnvSvc/Dst/TofTrackCnv.h"
20#include "RootCnvSvc/RootAddress.h"
21
22#include <vector>
23
24using namespace std;
25
26// Instantiation of a static factory class used by clients to create
27// instances of this service
28// static CnvFactory<TofTrackCnv> s_factory;
29// const ICnvFactory& TofTrackCnvFactory = s_factory;
30
31TofTrackCnv::TofTrackCnv( ISvcLocator* svc ) : RootEventBaseCnv( classID(), svc ) {
32 // Here we associate this converter with the /Event path on the TDS.
33 MsgStream log( msgSvc(), "TofTrackCnv" );
34 // log << MSG::DEBUG << "Constructor called for " << objType() << endmsg;
35 m_rootBranchname = "m_tofTrackCol";
36 // declareObject(EventModel::Dst::DstTofTrackCol, objType(), m_rootTreename,
37 // m_rootBranchname);
38 m_adresses.push_back( &m_tofTrackCol );
39 m_tofTrackCol = 0;
40}
41
42StatusCode TofTrackCnv::TObjectToDataObject( DataObject*& refpObject ) {
43 // creation of TDS object from root object
44
45 MsgStream log( msgSvc(), "TofTrackCnv" );
46 log << MSG::DEBUG << "TofTrackCnv::TObjectToDataObject" << endmsg;
47 StatusCode sc = StatusCode::SUCCESS;
48 // create the TDS location for the TofTrack Collection
49 DstTofTrackCol* tofTrackTdsCol = new DstTofTrackCol;
50 refpObject = tofTrackTdsCol;
51
52 // now convert
53 if ( !m_tofTrackCol ) return sc;
54 TIter tofTrackIter( m_tofTrackCol );
55 TTofTrack* tofTrackRoot = 0;
56 while ( ( tofTrackRoot = (TTofTrack*)tofTrackIter.Next() ) )
57 {
58
59 int tofTrackID = tofTrackRoot->tofTrackID();
60 int trackID = tofTrackRoot->trackID();
61 int tofID = tofTrackRoot->tofID();
62 unsigned int status = tofTrackRoot->status();
63 double path = tofTrackRoot->path();
64 double zrhit = tofTrackRoot->zrhit();
65 double ph = tofTrackRoot->ph();
66 double tof = tofTrackRoot->tof();
67 double errtof = tofTrackRoot->errtof();
68 double beta = tofTrackRoot->beta();
69 double texpElectron = tofTrackRoot->texpElectron();
70 double texpMuon = tofTrackRoot->texpMuon();
71 double texpPion = tofTrackRoot->texpPion();
72 double texpKaon = tofTrackRoot->texpKaon();
73 double texpProton = tofTrackRoot->texpProton();
74 double toffsetElectron = tofTrackRoot->toffsetElectron();
75 double toffsetMuon = tofTrackRoot->toffsetMuon();
76 double toffsetPion = tofTrackRoot->toffsetPion();
77 double toffsetKaon = tofTrackRoot->toffsetKaon();
78 double toffsetProton = tofTrackRoot->toffsetProton();
79 double toffsetAntiProton = tofTrackRoot->toffsetAntiProton();
80 double sigmaElectron = tofTrackRoot->sigmaElectron();
81 double sigmaMuon = tofTrackRoot->sigmaMuon();
82 double sigmaPion = tofTrackRoot->sigmaPion();
83 double sigmaKaon = tofTrackRoot->sigmaKaon();
84 double sigmaProton = tofTrackRoot->sigmaProton();
85 double sigmaAntiProton = tofTrackRoot->sigmaAntiProton();
86 int quality = tofTrackRoot->quality();
87 double t0 = tofTrackRoot->t0();
88 double errt0 = tofTrackRoot->errt0();
89 double errz = tofTrackRoot->errz();
90 double phi = tofTrackRoot->phi();
91 double errphi = tofTrackRoot->errphi();
92 double energy = tofTrackRoot->energy();
93 double errenergy = tofTrackRoot->errenergy();
94
95 DstTofTrack* tofTrackTds = new DstTofTrack();
96 m_common.m_rootTofTrackMap[tofTrackRoot] = tofTrackTds;
97
98 tofTrackTds->setTofTrackID( tofTrackID );
99 tofTrackTds->setTrackID( trackID );
100 tofTrackTds->setTofID( tofID );
101 tofTrackTds->setStatus( status );
102 tofTrackTds->setPath( path );
103 tofTrackTds->setZrHit( zrhit );
104 tofTrackTds->setPh( ph );
105 tofTrackTds->setTof( tof );
106 tofTrackTds->setErrTof( errtof );
107 tofTrackTds->setBeta( beta );
108 tofTrackTds->setTexpElectron( texpElectron );
109 tofTrackTds->setTexpMuon( texpMuon );
110 tofTrackTds->setTexpPion( texpPion );
111 tofTrackTds->setTexpKaon( texpKaon );
112 tofTrackTds->setTexpProton( texpProton );
113 tofTrackTds->setToffsetElectron( toffsetElectron );
114 tofTrackTds->setToffsetMuon( toffsetMuon );
115 tofTrackTds->setToffsetPion( toffsetPion );
116 tofTrackTds->setToffsetKaon( toffsetKaon );
117 tofTrackTds->setToffsetProton( toffsetProton );
118 tofTrackTds->setToffsetAntiProton( toffsetAntiProton );
119 tofTrackTds->setSigmaElectron( sigmaElectron );
120 tofTrackTds->setSigmaMuon( sigmaMuon );
121 tofTrackTds->setSigmaPion( sigmaPion );
122 tofTrackTds->setSigmaKaon( sigmaKaon );
123 tofTrackTds->setSigmaProton( sigmaProton );
124 tofTrackTds->setSigmaAntiProton( sigmaAntiProton );
125 tofTrackTds->setQuality( quality );
126 tofTrackTds->setT0( t0 );
127 tofTrackTds->setErrT0( errt0 );
128 tofTrackTds->setErrZ( errz );
129 tofTrackTds->setPhi( phi );
130 tofTrackTds->setErrPhi( errphi );
131 tofTrackTds->setEnergy( energy );
132 tofTrackTds->setErrEnergy( errenergy );
133
134 tofTrackTdsCol->push_back( tofTrackTds );
135
136 // delete tofTrackTds; // wensp add 2005/12/31
137 // tofTrackTds = NULL;
138 }
139
140 // m_tofTrackCol->Delete(); // wensp add 2005/12/30
141 delete m_tofTrackCol;
142 m_tofTrackCol = 0;
143 return StatusCode::SUCCESS;
144}
145
146StatusCode TofTrackCnv::DataObjectToTObject( DataObject* obj, RootAddress* rootaddr ) {
147
148 MsgStream log( msgSvc(), "TofTrackCnv" );
149 log << MSG::DEBUG << "TofTrackCnv::DataObjectToTObject" << endmsg;
150 StatusCode sc = StatusCode::SUCCESS;
151
152 DstTofTrackCol* tofTrackColTds = dynamic_cast<DstTofTrackCol*>( obj );
153 if ( !tofTrackColTds )
154 {
155 log << MSG::ERROR << "Could not downcast to DstTofTrackCol" << endmsg;
156 return StatusCode::FAILURE;
157 }
158
159 DataObject* evt;
160 m_eds->findObject( EventModel::Dst::Event, evt );
161 if ( evt == NULL )
162 {
163 log << MSG::ERROR << "Could not get DstEvent in TDS " << endmsg;
164 return StatusCode::FAILURE;
165 }
166
167 DstEvent* devtTds = dynamic_cast<DstEvent*>( evt );
168 if ( !devtTds )
169 { log << MSG::ERROR << "TofTrackCnv:Could not downcast to TDS ReconEvent" << endmsg; }
170 IOpaqueAddress* addr;
171
172 m_cnvSvc->getDstCnv()->createRep( evt, addr );
173 TDstEvent* recEvt = m_cnvSvc->getDstCnv()->getWriteObject();
174
175 const TObjArray* m_tofTrackCol = recEvt->getTofTrackCol();
176 if ( !m_tofTrackCol ) return sc;
177 recEvt->clearTofTrackCol(); // necessary in case there is I/O at the same time since array is
178 // static
179 DstTofTrackCol::const_iterator tofTrackTds;
180
181 for ( tofTrackTds = tofTrackColTds->begin(); tofTrackTds != tofTrackColTds->end();
182 tofTrackTds++ )
183 {
184
185 Int_t tofTrackID = ( *tofTrackTds )->tofTrackID();
186 Int_t trackID = ( *tofTrackTds )->trackID();
187 Int_t tofID = ( *tofTrackTds )->tofID();
188 Int_t strip = ( *tofTrackTds )->strip();
189 UInt_t status = ( *tofTrackTds )->status();
190 Double_t path = ( *tofTrackTds )->path();
191 Double_t zrhit = ( *tofTrackTds )->zrhit();
192 Double_t ph = ( *tofTrackTds )->ph();
193 Double_t tof = ( *tofTrackTds )->tof();
194 Double_t errtof = ( *tofTrackTds )->errtof();
195 Double_t beta = ( *tofTrackTds )->beta();
196 Double_t texpElectron = ( *tofTrackTds )->texpElectron();
197 Double_t texpMuon = ( *tofTrackTds )->texpMuon();
198 Double_t texpPion = ( *tofTrackTds )->texpPion();
199 Double_t texpKaon = ( *tofTrackTds )->texpKaon();
200 Double_t texpProton = ( *tofTrackTds )->texpProton();
201 Double_t toffsetElectron = ( *tofTrackTds )->toffsetElectron();
202 Double_t toffsetMuon = ( *tofTrackTds )->toffsetMuon();
203 Double_t toffsetPion = ( *tofTrackTds )->toffsetPion();
204 Double_t toffsetKaon = ( *tofTrackTds )->toffsetKaon();
205 Double_t toffsetProton = ( *tofTrackTds )->toffsetProton();
206 Double_t toffsetAntiProton = ( *tofTrackTds )->toffsetAntiProton();
207 Double_t sigmaElectron = ( *tofTrackTds )->sigmaElectron();
208 Double_t sigmaMuon = ( *tofTrackTds )->sigmaMuon();
209 Double_t sigmaPion = ( *tofTrackTds )->sigmaPion();
210 Double_t sigmaKaon = ( *tofTrackTds )->sigmaKaon();
211 Double_t sigmaProton = ( *tofTrackTds )->sigmaProton();
212 Double_t sigmaAntiProton = ( *tofTrackTds )->sigmaAntiProton();
213 Int_t quality = ( *tofTrackTds )->quality();
214 Double_t t0 = ( *tofTrackTds )->t0();
215 Double_t errt0 = ( *tofTrackTds )->errt0();
216 Double_t errz = ( *tofTrackTds )->errz();
217 Double_t phi = ( *tofTrackTds )->phi();
218 Double_t errphi = ( *tofTrackTds )->errphi();
219 Double_t energy = ( *tofTrackTds )->energy();
220 Double_t errenergy = ( *tofTrackTds )->errenergy();
221
222 if ( TofHitStatus::is_mrpc( status ) ) { tofID = tofID * 12 + strip; }
223
224 TTofTrack* tofTrackRoot = new TTofTrack();
225 // m_common.m_tofTrackMap[(*tofTrackTds)] = tofTrackRoot;
226
227 tofTrackRoot->setTofTrackID( tofTrackID );
228 tofTrackRoot->setTrackID( trackID );
229 tofTrackRoot->setTofID( tofID );
230 tofTrackRoot->setStatus( status );
231 tofTrackRoot->setPath( path );
232 tofTrackRoot->setZrHit( zrhit );
233 tofTrackRoot->setPh( ph );
234 tofTrackRoot->setTof( tof );
235 tofTrackRoot->setErrTof( errtof );
236 tofTrackRoot->setBeta( beta );
237 tofTrackRoot->setTexpElectron( texpElectron );
238 tofTrackRoot->setTexpMuon( texpMuon );
239 tofTrackRoot->setTexpPion( texpPion );
240 tofTrackRoot->setTexpKaon( texpKaon );
241 tofTrackRoot->setTexpProton( texpProton );
242 tofTrackRoot->setToffsetElectron( toffsetElectron );
243 tofTrackRoot->setToffsetMuon( toffsetMuon );
244 tofTrackRoot->setToffsetPion( toffsetPion );
245 tofTrackRoot->setToffsetKaon( toffsetKaon );
246 tofTrackRoot->setToffsetProton( toffsetProton );
247 tofTrackRoot->setToffsetAntiProton( toffsetAntiProton );
248 tofTrackRoot->setSigmaElectron( sigmaElectron );
249 tofTrackRoot->setSigmaMuon( sigmaMuon );
250 tofTrackRoot->setSigmaPion( sigmaPion );
251 tofTrackRoot->setSigmaKaon( sigmaKaon );
252 tofTrackRoot->setSigmaProton( sigmaProton );
253 tofTrackRoot->setSigmaAntiProton( sigmaAntiProton );
254 tofTrackRoot->setQuality( quality );
255 tofTrackRoot->setT0( t0 );
256 tofTrackRoot->setErrT0( errt0 );
257 tofTrackRoot->setErrZ( errz );
258 tofTrackRoot->setPhi( phi );
259 tofTrackRoot->setErrPhi( errphi );
260 tofTrackRoot->setEnergy( energy );
261 tofTrackRoot->setErrEnergy( errenergy );
262
263 recEvt->addTofTrack( tofTrackRoot );
264 }
265
266 return StatusCode::SUCCESS;
267}
268#endif
ObjectVector< DstTofTrack > DstTofTrackCol
************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()
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)
const TObjArray * getTofTrackCol() const
retrieve the whole TObjArray of TofTrack Data
void addTofTrack(TTofTrack *Track)
Add a TofTrack into the TOF Data collection.
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
TofTrackCnv(ISvcLocator *svc)