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