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