00001 #ifndef RecMucTrackCnv_CXX
00002 #define RecMucTrackCnv_CXX 1
00003
00004 #include "GaudiKernel/MsgStream.h"
00005 #include "GaudiKernel/DataObject.h"
00006 #include "GaudiKernel/ObjectVector.h"
00007
00008 #include "TClonesArray.h"
00009
00010 #include "EventModel/EventModel.h"
00011
00012 #include "ReconEvent/ReconEvent.h"
00013 #include "MucRecEvent/RecMucTrack.h"
00014
00015
00016 #include "RootEventData/TRecMucTrack.h"
00017
00018 #include "RootEventData/TRecTrackEvent.h"
00019
00020 #include "RootCnvSvc/Rec/RecTrackCnv.h"
00021 #include "RootCnvSvc/Rec/RecMucTrackCnv.h"
00022 #include "RootCnvSvc/RootAddress.h"
00023
00024 #include <vector>
00025
00026 using namespace std;
00027
00028
00029
00030
00031
00032
00033
00034 RecMucTrackCnv::RecMucTrackCnv(ISvcLocator* svc)
00035 : RootEventBaseCnv(classID(), svc)
00036 {
00037
00038
00039 MsgStream log(msgSvc(), "RecMucTrackCnv");
00040
00041
00042
00043
00044
00045 m_rootBranchname ="m_recMucTrackCol";
00046
00047 m_adresses.push_back(&m_recMucTrackCol);
00048 m_recMucTrackCol=0;
00049 }
00050
00051 StatusCode RecMucTrackCnv::TObjectToDataObject(DataObject*& refpObject) {
00052
00053
00054 MsgStream log(msgSvc(), "RecMucTrackCnv");
00055 log << MSG::DEBUG << "RecMucTrackCnv::TObjectToDataObject" << endreq;
00056 StatusCode sc=StatusCode::SUCCESS;
00057
00058
00059 RecMucTrackCol* mucTrackTdsCol = new RecMucTrackCol;
00060 refpObject=mucTrackTdsCol;
00061
00062
00063
00064 if (!m_recMucTrackCol) return sc;
00065 TIter mucTrackIter(m_recMucTrackCol);
00066 TRecMucTrack *mucTrackRoot = 0;
00067 while ((mucTrackRoot = (TRecMucTrack*)mucTrackIter.Next())) {
00068
00069 int trackId = mucTrackRoot->trackId();
00070 int id = mucTrackRoot-> id();
00071 int st = mucTrackRoot->status();
00072 int type = mucTrackRoot->type();
00073
00074 int startPart = mucTrackRoot->startPart();
00075 int endPart = mucTrackRoot->endPart();
00076 int brLastLayer = mucTrackRoot->brLastLayer();
00077 int ecLastLayer = mucTrackRoot->ecLastLayer();
00078 int numHits = mucTrackRoot->numHits();
00079 int numLayers = mucTrackRoot->numLayers();
00080 int maxHitsInLayer = mucTrackRoot->maxHitsInLayer();
00081
00082 double depth = mucTrackRoot->depth();
00083 double chi2 = mucTrackRoot->chi2();
00084 int dof = mucTrackRoot->dof();
00085 double rms = mucTrackRoot->rms();
00086
00087
00088
00089 double xPos = mucTrackRoot->xPos() ;
00090 double yPos = mucTrackRoot->yPos() ;
00091 double zPos = mucTrackRoot->zPos() ;
00092
00093 double xPosSigma = mucTrackRoot->xPosSigma() ;
00094 double yPosSigma = mucTrackRoot->yPosSigma() ;
00095 double zPosSigma = mucTrackRoot->zPosSigma() ;
00096
00097 double px = mucTrackRoot->px() ;
00098 double py = mucTrackRoot->py() ;
00099 double pz = mucTrackRoot->pz() ;
00100
00101 double distance = mucTrackRoot->distance();
00102 double deltaphi = mucTrackRoot->deltaPhi();
00103
00104
00105 vector<int> vecHits = mucTrackRoot->vecHits();
00106 vector<int> expHits = mucTrackRoot->expHits();
00107 vector<float> distHits = mucTrackRoot->distHits();
00108
00109
00110 double krechi2 = mucTrackRoot->kalRechi2();
00111 int kdof = mucTrackRoot->kaldof();
00112 double kdepth = mucTrackRoot->kaldepth();
00113 int kbrlay = mucTrackRoot->kalbrLastLayer();
00114 int keclay = mucTrackRoot->kalecLastLayer();
00115
00116
00117
00118 RecMucTrack *mucTrackTds = new RecMucTrack();
00119 m_common.m_rootRecMucTrackMap[mucTrackRoot] = mucTrackTds;
00120
00121 mucTrackTds->setTrackId( trackId );
00122 mucTrackTds->setId( id );
00123 mucTrackTds->setStatus( st );
00124 mucTrackTds->setType( type );
00125
00126 mucTrackTds->setStartPart( startPart );
00127 mucTrackTds->setEndPart( endPart );
00128 mucTrackTds->setBrLastLayer( brLastLayer );
00129 mucTrackTds->setEcLastLayer( ecLastLayer );
00130 mucTrackTds->setNumHits( numHits );
00131 mucTrackTds->setNumLayers( numLayers );
00132 mucTrackTds->setMaxHitsInLayer( maxHitsInLayer );
00133
00134 mucTrackTds->setDepth( depth );
00135 mucTrackTds->setChi2( chi2 );
00136 mucTrackTds->setDof( dof );
00137 mucTrackTds->setRms( rms );
00138
00139 mucTrackTds->setXPos( xPos );
00140 mucTrackTds->setYPos( yPos );
00141 mucTrackTds->setZPos( zPos );
00142
00143 mucTrackTds->setXPosSigma( xPosSigma );
00144 mucTrackTds->setYPosSigma( yPosSigma );
00145 mucTrackTds->setZPosSigma( zPosSigma );
00146
00147 mucTrackTds->setPx( px );
00148 mucTrackTds->setPy( py );
00149 mucTrackTds->setPz( pz );
00150
00151 mucTrackTds->setDistance(distance);
00152 mucTrackTds->setDeltaPhi(deltaphi);
00153 mucTrackTds->setVecHits(vecHits);
00154 mucTrackTds->setExpHits(expHits);
00155 mucTrackTds->setDistHits(distHits);
00156
00157
00158 mucTrackTds->setkalRechi2(krechi2);
00159 mucTrackTds->setkalDof(kdof);
00160 mucTrackTds->setkalDepth(kdepth);
00161 mucTrackTds->setkalbrLastLayer(kbrlay);
00162 mucTrackTds->setkalecLastLayer(keclay);
00163
00164
00165
00166
00167 mucTrackTdsCol->push_back(mucTrackTds);
00168
00169
00170 }
00171
00172
00173 delete m_recMucTrackCol;
00174 m_recMucTrackCol = 0;
00175 return StatusCode::SUCCESS;
00176 }
00177
00178 StatusCode RecMucTrackCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
00179
00180 MsgStream log(msgSvc(), "RecMucTrackCnv");
00181 log << MSG::DEBUG << "RecMucTrackCnv::DataObjectToTObject" << endreq;
00182 StatusCode sc=StatusCode::SUCCESS;
00183
00184 RecMucTrackCol * mucTrackColTds=dynamic_cast<RecMucTrackCol *> (obj);
00185 if (!mucTrackColTds) {
00186 log << MSG::ERROR << "Could not downcast to RecMucTrackCol" << endreq;
00187 return StatusCode::FAILURE;
00188 }
00189
00190 DataObject *evt;
00191 m_eds->findObject(EventModel::Recon::Event,evt);
00192 if (evt==NULL) {
00193 log << MSG::ERROR << "Could not get RecEvent in TDS " << endreq;
00194 return StatusCode::FAILURE;
00195 }
00196 ReconEvent * devtTds=dynamic_cast<ReconEvent *> (evt);
00197 if (!devtTds) {
00198 log << MSG::ERROR << "RecMucTrackCnv:Could not downcast to TDS DigiEvent" << endreq;
00199 }
00200 IOpaqueAddress *addr;
00201
00202 m_cnvSvc->getRecTrackCnv()->createRep(evt,addr);
00203 TRecTrackEvent *recEvt=m_cnvSvc->getRecTrackCnv()->getWriteObject();
00204
00205 const TObjArray *m_recMucTrackCol = recEvt->getMucTrackCol();
00206 if (!m_recMucTrackCol) return sc;
00207 recEvt->clearMucTrackCol();
00208 RecMucTrackCol::const_iterator mucTrackTds;
00209
00210 for (mucTrackTds = mucTrackColTds->begin(); mucTrackTds != mucTrackColTds->end(); mucTrackTds++) {
00211 Int_t trackId = (*mucTrackTds)->trackId();
00212 Int_t id = (*mucTrackTds)-> id();
00213 Int_t st = (*mucTrackTds)->status();
00214 Int_t type = (*mucTrackTds)->type();
00215
00216 Int_t startPart = (*mucTrackTds)->startPart();
00217 Int_t endPart = (*mucTrackTds)->endPart();
00218 Int_t brLastLayer = (*mucTrackTds)->brLastLayer();
00219 Int_t ecLastLayer = (*mucTrackTds)->ecLastLayer();
00220 Int_t numHits = (*mucTrackTds)->numHits();
00221 Int_t numLayers = (*mucTrackTds)->numLayers();
00222 Int_t maxHitsInLayer = (*mucTrackTds)->maxHitsInLayer();
00223
00224 Double_t depth = (*mucTrackTds)->depth();
00225 Double_t chi2 = (*mucTrackTds)->chi2();
00226 Int_t dof = (*mucTrackTds)->dof();
00227 Double_t rms = (*mucTrackTds)->rms();
00228
00229 Double_t xPos = (*mucTrackTds)->xPos() ;
00230 Double_t yPos = (*mucTrackTds)->yPos() ;
00231 Double_t zPos = (*mucTrackTds)->zPos() ;
00232
00233 Double_t xPosSigma = (*mucTrackTds)->xPosSigma() ;
00234 Double_t yPosSigma = (*mucTrackTds)->yPosSigma() ;
00235 Double_t zPosSigma = (*mucTrackTds)->zPosSigma() ;
00236
00237 Double_t distance = (*mucTrackTds)->distance();
00238 Double_t deltaphi = (*mucTrackTds)->deltaPhi();
00239
00240 Double_t px = (*mucTrackTds)->px() ;
00241 Double_t py = (*mucTrackTds)->py() ;
00242 Double_t pz = (*mucTrackTds)->pz() ;
00243
00244
00245 vector<Int_t> vecHits = (*mucTrackTds)->getVecHits();
00246 vector<Int_t> expHits = (*mucTrackTds)->getExpHits();
00247 vector<Float_t> distHits = (*mucTrackTds)->getDistHits();
00248
00249 Double_t krechi2 = (*mucTrackTds)->kalRechi2();
00250 Int_t kdof = (*mucTrackTds)->kaldof();
00251 Double_t kdepth = (*mucTrackTds)->kaldepth();
00252 Int_t kbrlay = (*mucTrackTds)->kalbrLastLayer();
00253 Int_t keclay = (*mucTrackTds)->kalecLastLayer();
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271 TRecMucTrack *mucTrackRoot = new TRecMucTrack();
00272
00273
00274 mucTrackRoot->setTrackId( trackId );
00275 mucTrackRoot->setId( id );
00276 mucTrackRoot->setStatus( st );
00277 mucTrackRoot->setType( type );
00278
00279 mucTrackRoot->setStartPart( startPart );
00280 mucTrackRoot->setEndPart( endPart );
00281 mucTrackRoot->setBrLastLayer( brLastLayer );
00282 mucTrackRoot->setEcLastLayer( ecLastLayer );
00283 mucTrackRoot->setNumHits( numHits );
00284 mucTrackRoot->setNumLayers( numLayers );
00285 mucTrackRoot->setMaxHitsInLayer( maxHitsInLayer );
00286
00287 mucTrackRoot->setDepth( depth );
00288 mucTrackRoot->setChi2( chi2 );
00289 mucTrackRoot->setDof( dof );
00290 mucTrackRoot->setRms( rms );
00291
00292 mucTrackRoot->setXPos( xPos );
00293 mucTrackRoot->setYPos( yPos );
00294 mucTrackRoot->setZPos( zPos );
00295
00296 mucTrackRoot->setXPosSigma( xPosSigma );
00297 mucTrackRoot->setYPosSigma( yPosSigma );
00298 mucTrackRoot->setZPosSigma( zPosSigma );
00299
00300 mucTrackRoot->setDistance(distance);
00301 mucTrackRoot->setDeltaPhi(deltaphi);
00302
00303
00304
00305 mucTrackRoot->setPx( px );
00306 mucTrackRoot->setPy( py );
00307 mucTrackRoot->setPz( pz );
00308
00309 mucTrackRoot->setVecHits(vecHits);
00310 mucTrackRoot->setExpHits(expHits);
00311 mucTrackRoot->setDistHits(distHits);
00312
00313
00314 mucTrackRoot->setkalRechi2(krechi2);
00315 mucTrackRoot->setkalDof(kdof);
00316 mucTrackRoot->setkalDepth(kdepth);
00317 mucTrackRoot->setkalbrLastLayer(kbrlay);
00318 mucTrackRoot->setkalecLastLayer(keclay);
00319
00320 recEvt->addMucTrack(mucTrackRoot);
00321 }
00322
00323 return StatusCode::SUCCESS;
00324 }
00325 #endif