BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
RecMucTrackCnv.cxx
Go to the documentation of this file.
1#ifndef RecMucTrackCnv_CXX
2#define RecMucTrackCnv_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 "MucRecEvent/RecMucTrack.h"
13#include "ReconEvent/ReconEvent.h"
14
15// #include "RootEventData/TMucTrack.h" // standard root object
16#include "RootEventData/TRecMucTrack.h" // standard root object
17// #include "RootEventData/TDstEvent.h"
18#include "RootEventData/TRecTrackEvent.h"
19
20#include "RootCnvSvc/Rec/RecMucTrackCnv.h"
21#include "RootCnvSvc/Rec/RecTrackCnv.h"
22#include "RootCnvSvc/RootAddress.h"
23
24#include <vector>
25
26using namespace std;
27
28// Instantiation of a static factory class used by clients to create
29// instances of this service
30// static CnvFactory<RecMucTrackCnv> s_factory;
31// const ICnvFactory& RecMucTrackCnvFactory = s_factory;
32
34
35 // Here we associate this converter with the /Event path on the TDS.
36 // MsgStream log( msgSvc(), "RecMucTrackCnv" );
37 // log << MSG::DEBUG << "Constructor called for " << objType() << endmsg;
38 // m_rootTreename ="Rec";
39 // RecMucTrack *atrack = new RecMucTrack();
40 // RecMucTrackCol *atrackCol = new RecMucTrackCol;
41 // cout<<"in RecMucTrackCnv "<<atrack->clID()<<" "<<atrackCol->clID()<<"
42 // "<<CLID_ObjectVector<<endl;
43 m_rootBranchname = "m_recMucTrackCol";
44 // declareObject(EventModel::Recon::RecMucTrackCol, objType(), m_rootTreename,
45 // m_rootBranchname);
46 m_adresses.push_back( &m_recMucTrackCol );
47 m_recMucTrackCol = 0;
48}
49
50StatusCode RecMucTrackCnv::TObjectToDataObject( DataObject*& refpObject ) {
51 // creation of TDS object from root object
52
53 MsgStream log( msgSvc(), "RecMucTrackCnv" );
54 log << MSG::DEBUG << "RecMucTrackCnv::TObjectToDataObject" << endmsg;
55 StatusCode sc = StatusCode::SUCCESS;
56
57 // create the TDS location for the MucTrack Collection
58 RecMucTrackCol* mucTrackTdsCol = new RecMucTrackCol;
59 refpObject = mucTrackTdsCol;
60
61 // now convert
62 if ( !m_recMucTrackCol ) return sc;
63 TIter mucTrackIter( m_recMucTrackCol );
64 TRecMucTrack* mucTrackRoot = 0;
65 while ( ( mucTrackRoot = (TRecMucTrack*)mucTrackIter.Next() ) )
66 {
67
68 int trackId = mucTrackRoot->trackId();
69 int id = mucTrackRoot->id();
70 int st = mucTrackRoot->status();
71 int type = mucTrackRoot->type();
72
73 int startPart = mucTrackRoot->startPart();
74 int endPart = mucTrackRoot->endPart();
75 int brLastLayer = mucTrackRoot->brLastLayer();
76 int ecLastLayer = mucTrackRoot->ecLastLayer();
77 int numHits = mucTrackRoot->numHits();
78 int numLayers = mucTrackRoot->numLayers();
79 int maxHitsInLayer = mucTrackRoot->maxHitsInLayer();
80
81 double depth = mucTrackRoot->depth();
82 double chi2 = mucTrackRoot->chi2();
83 int dof = mucTrackRoot->dof();
84 double rms = mucTrackRoot->rms();
85
86 double xPos = mucTrackRoot->xPos();
87 double yPos = mucTrackRoot->yPos();
88 double zPos = mucTrackRoot->zPos();
89
90 double xPosSigma = mucTrackRoot->xPosSigma();
91 double yPosSigma = mucTrackRoot->yPosSigma();
92 double zPosSigma = mucTrackRoot->zPosSigma();
93
94 double px = mucTrackRoot->px();
95 double py = mucTrackRoot->py();
96 double pz = mucTrackRoot->pz();
97
98 double distance = mucTrackRoot->distance();
99 double deltaphi = mucTrackRoot->deltaPhi();
100 // cout<<"in RecMucTrackCnv distance = "<<distance<<" xpos= "<<xPos<<endl;
101
102 vector<int> vecHits = mucTrackRoot->vecHits();
103 vector<int> expHits = mucTrackRoot->expHits();
104 vector<float> distHits = mucTrackRoot->distHits();
105
106 // added by LI Chunhua
107 double krechi2 = mucTrackRoot->kalRechi2();
108 int kdof = mucTrackRoot->kaldof();
109 double kdepth = mucTrackRoot->kaldepth();
110 int kbrlay = mucTrackRoot->kalbrLastLayer();
111 int keclay = mucTrackRoot->kalecLastLayer();
112 //*********************
113 // cout<<"in RecMucTrackCnv size = "<<vecHits.size()<<" "<<expHits.size()<<"
114 // "<<distHits.size()<<endl;
115
116 RecMucTrack* mucTrackTds = new RecMucTrack();
117 m_common.m_rootRecMucTrackMap[mucTrackRoot] = mucTrackTds;
118
119 mucTrackTds->setTrackId( trackId );
120 mucTrackTds->setId( id );
121 mucTrackTds->setStatus( st );
122 mucTrackTds->setType( type );
123
124 mucTrackTds->setStartPart( startPart );
125 mucTrackTds->setEndPart( endPart );
126 mucTrackTds->setBrLastLayer( brLastLayer );
127 mucTrackTds->setEcLastLayer( ecLastLayer );
128 mucTrackTds->setNumHits( numHits );
129 mucTrackTds->setNumLayers( numLayers );
130 mucTrackTds->setMaxHitsInLayer( maxHitsInLayer );
131
132 mucTrackTds->setDepth( depth );
133 mucTrackTds->setChi2( chi2 );
134 mucTrackTds->setDof( dof );
135 mucTrackTds->setRms( rms );
136
137 mucTrackTds->setXPos( xPos );
138 mucTrackTds->setYPos( yPos );
139 mucTrackTds->setZPos( zPos );
140
141 mucTrackTds->setXPosSigma( xPosSigma );
142 mucTrackTds->setYPosSigma( yPosSigma );
143 mucTrackTds->setZPosSigma( zPosSigma );
144
145 mucTrackTds->setPx( px );
146 mucTrackTds->setPy( py );
147 mucTrackTds->setPz( pz );
148
149 mucTrackTds->setDistance( distance );
150 mucTrackTds->setDeltaPhi( deltaphi );
151 mucTrackTds->setVecHits( vecHits ); // need fix
152 mucTrackTds->setExpHits( expHits );
153 mucTrackTds->setDistHits( distHits );
154
155 // added by LI Chunhua 2013/02/01
156 mucTrackTds->setkalRechi2( krechi2 );
157 mucTrackTds->setkalDof( kdof );
158 mucTrackTds->setkalDepth( kdepth );
159 mucTrackTds->setkalbrLastLayer( kbrlay );
160 mucTrackTds->setkalecLastLayer( keclay );
161 //******************
162
163 // cout<<"in RecMucTrackCnv::T->D set mucpos"<<endl;
164
165 mucTrackTdsCol->push_back( mucTrackTds );
166 // delete mucTrackTds; // wensp add 2005/12/31
167 // mucTrackTds = NULL;
168 }
169
170 // m_mucTrackCol->Delete(); // wensp add 2005/12/30
171 delete m_recMucTrackCol;
172 m_recMucTrackCol = 0;
173 return StatusCode::SUCCESS;
174}
175
176StatusCode RecMucTrackCnv::DataObjectToTObject( DataObject* obj, RootAddress* rootaddr ) {
177
178 MsgStream log( msgSvc(), "RecMucTrackCnv" );
179 log << MSG::DEBUG << "RecMucTrackCnv::DataObjectToTObject" << endmsg;
180 StatusCode sc = StatusCode::SUCCESS;
181
182 RecMucTrackCol* mucTrackColTds = dynamic_cast<RecMucTrackCol*>( obj );
183 if ( !mucTrackColTds )
184 {
185 log << MSG::ERROR << "Could not downcast to RecMucTrackCol" << endmsg;
186 return StatusCode::FAILURE;
187 }
188
189 DataObject* evt;
190 m_eds->findObject( EventModel::Recon::Event, evt );
191 if ( evt == NULL )
192 {
193 log << MSG::ERROR << "Could not get RecEvent in TDS " << endmsg;
194 return StatusCode::FAILURE;
195 }
196 ReconEvent* devtTds = dynamic_cast<ReconEvent*>( evt );
197 if ( !devtTds )
198 { log << MSG::ERROR << "RecMucTrackCnv:Could not downcast to TDS DigiEvent" << endmsg; }
199 IOpaqueAddress* addr;
200
201 m_cnvSvc->getRecTrackCnv()->createRep( evt, addr );
202 TRecTrackEvent* recEvt = m_cnvSvc->getRecTrackCnv()->getWriteObject();
203
204 const TObjArray* m_recMucTrackCol = recEvt->getMucTrackCol();
205 if ( !m_recMucTrackCol ) return sc;
206 recEvt->clearMucTrackCol(); // necessary in case there is I/O at the same time since array is
207 // static
208 RecMucTrackCol::const_iterator mucTrackTds;
209
210 for ( mucTrackTds = mucTrackColTds->begin(); mucTrackTds != mucTrackColTds->end();
211 mucTrackTds++ )
212 {
213 Int_t trackId = ( *mucTrackTds )->trackId();
214 Int_t id = ( *mucTrackTds )->id();
215 Int_t st = ( *mucTrackTds )->status();
216 Int_t type = ( *mucTrackTds )->type();
217
218 Int_t startPart = ( *mucTrackTds )->startPart();
219 Int_t endPart = ( *mucTrackTds )->endPart();
220 Int_t brLastLayer = ( *mucTrackTds )->brLastLayer();
221 Int_t ecLastLayer = ( *mucTrackTds )->ecLastLayer();
222 Int_t numHits = ( *mucTrackTds )->numHits();
223 Int_t numLayers = ( *mucTrackTds )->numLayers();
224 Int_t maxHitsInLayer = ( *mucTrackTds )->maxHitsInLayer();
225
226 Double_t depth = ( *mucTrackTds )->depth();
227 Double_t chi2 = ( *mucTrackTds )->chi2();
228 Int_t dof = ( *mucTrackTds )->dof();
229 Double_t rms = ( *mucTrackTds )->rms();
230
231 Double_t xPos = ( *mucTrackTds )->xPos();
232 Double_t yPos = ( *mucTrackTds )->yPos();
233 Double_t zPos = ( *mucTrackTds )->zPos();
234
235 Double_t xPosSigma = ( *mucTrackTds )->xPosSigma();
236 Double_t yPosSigma = ( *mucTrackTds )->yPosSigma();
237 Double_t zPosSigma = ( *mucTrackTds )->zPosSigma();
238
239 Double_t distance = ( *mucTrackTds )->distance();
240 Double_t deltaphi = ( *mucTrackTds )->deltaPhi();
241
242 Double_t px = ( *mucTrackTds )->px();
243 Double_t py = ( *mucTrackTds )->py();
244 Double_t pz = ( *mucTrackTds )->pz();
245
246 vector<Int_t> vecHits = ( *mucTrackTds )->getVecHits();
247 vector<Int_t> expHits = ( *mucTrackTds )->getExpHits();
248 vector<Float_t> distHits = ( *mucTrackTds )->getDistHits();
249 // added by LI Chunhua
250 Double_t krechi2 = ( *mucTrackTds )->kalRechi2();
251 Int_t kdof = ( *mucTrackTds )->kaldof();
252 Double_t kdepth = ( *mucTrackTds )->kaldepth();
253 Int_t kbrlay = ( *mucTrackTds )->kalbrLastLayer();
254 Int_t keclay = ( *mucTrackTds )->kalecLastLayer();
255 //*********************
256
257 /*
258 cout<<"in RecMucTrackCnv "<<vecHits.size()<<endl;
259 for(int i = 0; i < vecHits.size(); i++){
260 cout<<" vec i = "<<i<<" "<<vecHits[i]<<endl;
261 }
262
263 for(int i = 0; i < expHits.size(); i++){
264 cout<<" exp i = "<<i<<" "<<expHits[i]<<endl;
265 }
266
267 for(int i = 0; i < distHits.size(); i++){
268 cout<<" dist i = "<<i<<" "<<distHits[i]<<endl;
269 }
270 */
271
272 TRecMucTrack* mucTrackRoot = new TRecMucTrack(); // liangyt
273 // m_common.m_RecMucTrackMap[(*mucTrackTds)] = mucTrackRoot;
274
275 mucTrackRoot->setTrackId( trackId );
276 mucTrackRoot->setId( id );
277 mucTrackRoot->setStatus( st );
278 mucTrackRoot->setType( type );
279
280 mucTrackRoot->setStartPart( startPart );
281 mucTrackRoot->setEndPart( endPart );
282 mucTrackRoot->setBrLastLayer( brLastLayer );
283 mucTrackRoot->setEcLastLayer( ecLastLayer );
284 mucTrackRoot->setNumHits( numHits );
285 mucTrackRoot->setNumLayers( numLayers );
286 mucTrackRoot->setMaxHitsInLayer( maxHitsInLayer );
287
288 mucTrackRoot->setDepth( depth );
289 mucTrackRoot->setChi2( chi2 );
290 mucTrackRoot->setDof( dof );
291 mucTrackRoot->setRms( rms );
292
293 mucTrackRoot->setXPos( xPos );
294 mucTrackRoot->setYPos( yPos );
295 mucTrackRoot->setZPos( zPos );
296
297 mucTrackRoot->setXPosSigma( xPosSigma );
298 mucTrackRoot->setYPosSigma( yPosSigma );
299 mucTrackRoot->setZPosSigma( zPosSigma );
300
301 mucTrackRoot->setDistance( distance );
302 mucTrackRoot->setDeltaPhi( deltaphi );
303
304 // cout<<"in RecMucTrackCnv xyz = "<<xPos<<" "<<yPos<<" "<<zPos<<" depth= "<<depth<<"
305 // "<<maxHitsInLayer<<"
306 // "<<deltaphi<<endl;
307
308 mucTrackRoot->setPx( px );
309 mucTrackRoot->setPy( py );
310 mucTrackRoot->setPz( pz );
311
312 mucTrackRoot->setVecHits( vecHits );
313 mucTrackRoot->setExpHits( expHits );
314 mucTrackRoot->setDistHits( distHits );
315
316 // added by LI Chunhua 2013/02/01
317 mucTrackRoot->setkalRechi2( krechi2 );
318 mucTrackRoot->setkalDof( kdof );
319 mucTrackRoot->setkalDepth( kdepth );
320 mucTrackRoot->setkalbrLastLayer( kbrlay );
321 mucTrackRoot->setkalecLastLayer( keclay );
322 //******************
323 recEvt->addMucTrack( mucTrackRoot );
324 }
325
326 return StatusCode::SUCCESS;
327}
328#endif
IMessageSvc * msgSvc()
RecMucTrackCnv(ISvcLocator *svc)
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
void setExpHits(vector< MucRecHit * > &pHits)
void setTrackId(const int trackId)
set the index for this track.
void setVecHits(vector< MucRecHit * > &pHits)
reload setVecHits
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 addMucTrack(TRecMucTrack *Track)
Add a MucTrack into the TOF Data collection.
const TObjArray * getMucTrackCol() const
retrieve the whole TObjArray of MucTrack Data