BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
MucTrackCnv.cxx
Go to the documentation of this file.
1#ifndef MucTrackCnv_CXX
2#define MucTrackCnv_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/DstMucTrack.h" //TDS object
14#include "RootEventData/TDstEvent.h"
15#include "RootEventData/TMucTrack.h" // standard root object
16
17#include "RootCnvSvc/Dst/DstCnv.h"
18#include "RootCnvSvc/Dst/MucTrackCnv.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<MucTrackCnv> s_factory;
28// const ICnvFactory& MucTrackCnvFactory = s_factory;
29
30MucTrackCnv::MucTrackCnv( ISvcLocator* svc ) : RootEventBaseCnv( classID(), svc ) {
31 // Here we associate this converter with the /Event path on the TDS.
32 MsgStream log( msgSvc(), "MucTrackCnv" );
33 // log << MSG::DEBUG << "Constructor called for " << objType() << endmsg;
34 m_rootBranchname = "m_mucTrackCol";
35 // declareObject(EventModel::Dst::DstMucTrackCol, objType(), m_rootTreename,
36 // m_rootBranchname);
37 m_adresses.push_back( &m_mucTrackCol );
38 m_mucTrackCol = 0;
39}
40
41StatusCode MucTrackCnv::TObjectToDataObject( DataObject*& refpObject ) {
42 // creation of TDS object from root object
43
44 MsgStream log( msgSvc(), "MucTrackCnv" );
45 log << MSG::DEBUG << "MucTrackCnv::TObjectToDataObject" << endmsg;
46 StatusCode sc = StatusCode::SUCCESS;
47
48 // create the TDS location for the MucTrack Collection
49 DstMucTrackCol* mucTrackTdsCol = new DstMucTrackCol;
50 refpObject = mucTrackTdsCol;
51
52 // now convert
53 if ( !m_mucTrackCol ) return sc;
54 TIter mucTrackIter( m_mucTrackCol );
55 TMucTrack* mucTrackRoot = 0;
56 while ( ( mucTrackRoot = (TMucTrack*)mucTrackIter.Next() ) )
57 {
58
59 int trackId = mucTrackRoot->trackId();
60 int id = mucTrackRoot->id();
61 int st = mucTrackRoot->status();
62 int type = mucTrackRoot->type();
63
64 int startPart = mucTrackRoot->startPart();
65 int endPart = mucTrackRoot->endPart();
66 int brLastLayer = mucTrackRoot->brLastLayer();
67 int ecLastLayer = mucTrackRoot->ecLastLayer();
68 int numHits = mucTrackRoot->numHits();
69 int numLayers = mucTrackRoot->numLayers();
70 int maxHitsInLayer = mucTrackRoot->maxHitsInLayer();
71
72 double depth = mucTrackRoot->depth();
73 double chi2 = mucTrackRoot->chi2();
74 int dof = mucTrackRoot->dof();
75 double rms = mucTrackRoot->rms();
76
77 double xPos = mucTrackRoot->xPos();
78 double yPos = mucTrackRoot->yPos();
79 double zPos = mucTrackRoot->zPos();
80
81 double xPosSigma = mucTrackRoot->xPosSigma();
82 double yPosSigma = mucTrackRoot->yPosSigma();
83 double zPosSigma = mucTrackRoot->zPosSigma();
84
85 double px = mucTrackRoot->px();
86 double py = mucTrackRoot->py();
87 double pz = mucTrackRoot->pz();
88
89 double distance = mucTrackRoot->distance();
90 double deltaphi = mucTrackRoot->deltaPhi();
91 // vector<int> vecHits = mucTrackRoot->vecHits();
92 // added by LI Chunhua
93 double krechi2 = mucTrackRoot->kalRechi2();
94 int kdof = mucTrackRoot->kaldof();
95 double kdepth = mucTrackRoot->kaldepth();
96 int kbrlay = mucTrackRoot->kalbrLastLayer();
97 int keclay = mucTrackRoot->kalecLastLayer();
98 //*********************
99
100 DstMucTrack* mucTrackTds = new DstMucTrack();
101 m_common.m_rootMucTrackMap[mucTrackRoot] = mucTrackTds;
102
103 mucTrackTds->setTrackId( trackId );
104 mucTrackTds->setId( id );
105 mucTrackTds->setStatus( st );
106 mucTrackTds->setType( type );
107
108 mucTrackTds->setStartPart( startPart );
109 mucTrackTds->setEndPart( endPart );
110 mucTrackTds->setBrLastLayer( brLastLayer );
111 mucTrackTds->setEcLastLayer( ecLastLayer );
112 mucTrackTds->setNumHits( numHits );
113 mucTrackTds->setNumLayers( numLayers );
114 mucTrackTds->setMaxHitsInLayer( maxHitsInLayer );
115
116 mucTrackTds->setDepth( depth );
117 mucTrackTds->setChi2( chi2 );
118 mucTrackTds->setDof( dof );
119 mucTrackTds->setRms( rms );
120
121 mucTrackTds->setXPos( xPos );
122 mucTrackTds->setYPos( yPos );
123 mucTrackTds->setZPos( zPos );
124
125 mucTrackTds->setXPosSigma( xPosSigma );
126 mucTrackTds->setYPosSigma( yPosSigma );
127 mucTrackTds->setZPosSigma( zPosSigma );
128
129 mucTrackTds->setPx( px );
130 mucTrackTds->setPy( py );
131 mucTrackTds->setPz( pz );
132
133 mucTrackTds->setDistance( distance );
134 mucTrackTds->setDeltaPhi( deltaphi );
135
136 // mucTrackTds->setVecHits(vecHits);
137 // added by LI Chunhua 2013/02/01
138 mucTrackTds->setkalRechi2( krechi2 );
139 mucTrackTds->setkalDof( kdof );
140 mucTrackTds->setkalDepth( kdepth );
141 mucTrackTds->setkalbrLastLayer( kbrlay );
142 mucTrackTds->setkalecLastLayer( keclay );
143 //******************
144 mucTrackTdsCol->push_back( mucTrackTds );
145 // delete mucTrackTds; // wensp add 2005/12/31
146 // mucTrackTds = NULL;
147 }
148
149 // m_mucTrackCol->Delete(); // wensp add 2005/12/30
150 delete m_mucTrackCol;
151 m_mucTrackCol = 0;
152 return StatusCode::SUCCESS;
153}
154
155StatusCode MucTrackCnv::DataObjectToTObject( DataObject* obj, RootAddress* rootaddr ) {
156
157 MsgStream log( msgSvc(), "MucTrackCnv" );
158 log << MSG::DEBUG << "MucTrackCnv::DataObjectToTObject" << endmsg;
159 StatusCode sc = StatusCode::SUCCESS;
160
161 DstMucTrackCol* mucTrackColTds = dynamic_cast<DstMucTrackCol*>( obj );
162 if ( !mucTrackColTds )
163 {
164 log << MSG::ERROR << "Could not downcast to MucTrackCol" << endmsg;
165 return StatusCode::FAILURE;
166 }
167
168 DataObject* evt;
169 m_eds->findObject( EventModel::Dst::Event, evt );
170 if ( evt == NULL )
171 {
172 log << MSG::ERROR << "Could not get DstEvent in TDS " << endmsg;
173 return StatusCode::FAILURE;
174 }
175 DstEvent* devtTds = dynamic_cast<DstEvent*>( evt );
176 if ( !devtTds )
177 { log << MSG::ERROR << "MucTrackCnv:Could not downcast to TDS DigiEvent" << endmsg; }
178 IOpaqueAddress* addr;
179
180 m_cnvSvc->getDstCnv()->createRep( evt, addr );
181 TDstEvent* recEvt = m_cnvSvc->getDstCnv()->getWriteObject();
182
183 const TObjArray* m_mucTrackCol = recEvt->getMucTrackCol();
184 if ( !m_mucTrackCol ) return sc;
185 recEvt->clearMucTrackCol(); // necessary in case there is I/O at the same time since array is
186 // static
187 DstMucTrackCol::const_iterator mucTrackTds;
188
189 for ( mucTrackTds = mucTrackColTds->begin(); mucTrackTds != mucTrackColTds->end();
190 mucTrackTds++ )
191 {
192 Int_t trackId = ( *mucTrackTds )->trackId();
193 Int_t id = ( *mucTrackTds )->id();
194 Int_t st = ( *mucTrackTds )->status();
195 Int_t type = ( *mucTrackTds )->type();
196
197 Int_t startPart = ( *mucTrackTds )->startPart();
198 Int_t endPart = ( *mucTrackTds )->endPart();
199 Int_t brLastLayer = ( *mucTrackTds )->brLastLayer();
200 Int_t ecLastLayer = ( *mucTrackTds )->ecLastLayer();
201 Int_t numHits = ( *mucTrackTds )->numHits();
202 Int_t numLayers = ( *mucTrackTds )->numLayers();
203 Int_t maxHitsInLayer = ( *mucTrackTds )->maxHitsInLayer();
204
205 Double_t depth = ( *mucTrackTds )->depth();
206 Double_t chi2 = ( *mucTrackTds )->chi2();
207 Int_t dof = ( *mucTrackTds )->dof();
208 Double_t rms = ( *mucTrackTds )->rms();
209
210 Double_t xPos = ( *mucTrackTds )->xPos();
211 Double_t yPos = ( *mucTrackTds )->yPos();
212 Double_t zPos = ( *mucTrackTds )->zPos();
213
214 Double_t xPosSigma = ( *mucTrackTds )->xPosSigma();
215 Double_t yPosSigma = ( *mucTrackTds )->yPosSigma();
216 Double_t zPosSigma = ( *mucTrackTds )->zPosSigma();
217
218 Double_t px = ( *mucTrackTds )->px();
219 Double_t py = ( *mucTrackTds )->py();
220 Double_t pz = ( *mucTrackTds )->pz();
221
222 Double_t distance = ( *mucTrackTds )->distance();
223 Double_t deltaphi = ( *mucTrackTds )->deltaPhi();
224 // added by LI Chunhua
225 Double_t krechi2 = ( *mucTrackTds )->kalRechi2();
226 Int_t kdof = ( *mucTrackTds )->kaldof();
227 Double_t kdepth = ( *mucTrackTds )->kaldepth();
228 Int_t kbrlay = ( *mucTrackTds )->kalbrLastLayer();
229 Int_t keclay = ( *mucTrackTds )->kalecLastLayer();
230 //*********************
231
232 // vector<Int_t> vecHits = (*mucTrackTds)->vecHits();
233
234 TMucTrack* mucTrackRoot = new TMucTrack();
235 // m_common.m_mucTrackMap[(*mucTrackTds)] = mucTrackRoot;
236
237 mucTrackRoot->setTrackId( trackId );
238 mucTrackRoot->setId( id );
239 mucTrackRoot->setStatus( st );
240 mucTrackRoot->setType( type );
241
242 mucTrackRoot->setStartPart( startPart );
243 mucTrackRoot->setEndPart( endPart );
244 mucTrackRoot->setBrLastLayer( brLastLayer );
245 mucTrackRoot->setEcLastLayer( ecLastLayer );
246 mucTrackRoot->setNumHits( numHits );
247 mucTrackRoot->setNumLayers( numLayers );
248 mucTrackRoot->setMaxHitsInLayer( maxHitsInLayer );
249
250 mucTrackRoot->setDepth( depth );
251 mucTrackRoot->setChi2( chi2 );
252 mucTrackRoot->setDof( dof );
253 mucTrackRoot->setRms( rms );
254
255 mucTrackRoot->setXPos( xPos );
256 mucTrackRoot->setYPos( yPos );
257 mucTrackRoot->setZPos( zPos );
258
259 mucTrackRoot->setXPosSigma( xPosSigma );
260 mucTrackRoot->setYPosSigma( yPosSigma );
261 mucTrackRoot->setZPosSigma( zPosSigma );
262
263 mucTrackRoot->setPx( px );
264 mucTrackRoot->setPy( py );
265 mucTrackRoot->setPz( pz );
266
267 mucTrackRoot->setDistance( distance );
268 mucTrackRoot->setDeltaPhi( deltaphi );
269 // added by LI Chunhua 2013/02/01
270 mucTrackRoot->setkalRechi2( krechi2 );
271 mucTrackRoot->setkalDof( kdof );
272 mucTrackRoot->setkalDepth( kdepth );
273 mucTrackRoot->setkalbrLastLayer( kbrlay );
274 mucTrackRoot->setkalecLastLayer( keclay );
275 //******************
276 // mucTrackRoot->setVecHits(vecHits);
277
278 recEvt->addMucTrack( mucTrackRoot );
279 }
280
281 return StatusCode::SUCCESS;
282}
283#endif
ObjectVector< DstMucTrack > DstMucTrackCol
IMessageSvc * msgSvc()
MucTrackCnv(ISvcLocator *svc)
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to 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
std::string m_rootBranchname
root branchname (may be concatenated of severals)
RootEventBaseCnv(const CLID &clid, ISvcLocator *svc)
void addMucTrack(TMucTrack *Track)
Add a MucTrack into the TOF Data collection.
const TObjArray * getMucTrackCol() const
retrieve the whole TObjArray of MucTrack Data