00001 #ifndef RecMdcKalHelixSegCnv_CXX
00002 #define RecMdcKalHelixSegCnv_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 "MdcRecEvent/RecMdcKalHelixSeg.h"
00014 #include "Identifier/Identifier.h"
00015
00016 #include "RootEventData/TRecMdcKalHelixSeg.h"
00017 #include "RootEventData/TRecTrackEvent.h"
00018
00019 #include "RootCnvSvc/Rec/RecTrackCnv.h"
00020 #include "RootCnvSvc/Rec/RecMdcKalHelixSegCnv.h"
00021 #include "RootCnvSvc/RootAddress.h"
00022
00023 #include <vector>
00024
00025 using namespace std;
00026
00027
00028 RecMdcKalHelixSegCnv::RecMdcKalHelixSegCnv(ISvcLocator* svc)
00029 : RootEventBaseCnv(classID(), svc)
00030 {
00031
00032
00033 MsgStream log(msgSvc(), "RecMdcKalHelixSegCnv");
00034
00035
00036 m_rootBranchname ="m_recMdcKalHelixSegCol";
00037
00038 m_adresses.push_back(&m_recMdcKalHelixSegCol);
00039 m_recMdcKalHelixSegCol=0;
00040 }
00041
00042 StatusCode RecMdcKalHelixSegCnv::TObjectToDataObject(DataObject*& refpObject) {
00043
00044 MsgStream log(msgSvc(), "RecMdcKalHelixSegCnv");
00045 log << MSG::DEBUG << "RecMdcKalHelixSegCnv::TObjectToDataObject" << endreq;
00046
00047
00048 RecMdcKalHelixSegCol* recMdcKalHelixSegCol = new RecMdcKalHelixSegCol;
00049 refpObject = recMdcKalHelixSegCol;
00050
00051
00052 if (!m_recMdcKalHelixSegCol) return StatusCode::SUCCESS;
00053 TIter mdcHitIter(m_recMdcKalHelixSegCol);
00054 TRecMdcKalHelixSeg *recMdcKalHelixSegRoot = 0;
00055 int nSeg=0;
00056 while ((recMdcKalHelixSegRoot = (TRecMdcKalHelixSeg*)mdcHitIter.Next())) {
00057 int trackId = recMdcKalHelixSegRoot->getTrackId();
00058 int flagLR = recMdcKalHelixSegRoot->getFlagLR();
00059 Identifier mdcId(recMdcKalHelixSegRoot->getMdcId());
00060 double tdc = recMdcKalHelixSegRoot->getTdc();
00061 double adc = recMdcKalHelixSegRoot->getAdc();
00062 double zhit = recMdcKalHelixSegRoot->getZhit();
00063 double tof = recMdcKalHelixSegRoot->getTof();
00064 double docaIncl = recMdcKalHelixSegRoot->getDocaIncl();
00065 double docaExcl = recMdcKalHelixSegRoot->getDocaExcl();
00066 double driftDist= recMdcKalHelixSegRoot->getDD();
00067 double entra = recMdcKalHelixSegRoot->getEntra();
00068 double driftT = recMdcKalHelixSegRoot->getDT();
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080 double helixIncl[5];
00081 double helixExcl[5];
00082 for(int i=0, k=0; i<5; i++){
00083 helixIncl[i] = recMdcKalHelixSegRoot->getHelixIncl(i);
00084 helixExcl[i] = recMdcKalHelixSegRoot->getHelixExcl(i);
00085
00086
00087
00088
00089 }
00090
00091 RecMdcKalHelixSeg *recMdcKalHelixSeg= new RecMdcKalHelixSeg();
00092 m_common.m_rootRecMdcKalHelixSegMap[recMdcKalHelixSegRoot] = recMdcKalHelixSeg;
00093
00094 recMdcKalHelixSeg->setTrackId( trackId );
00095 recMdcKalHelixSeg->setFlagLR( flagLR );
00096 recMdcKalHelixSeg->setMdcId( Identifier(mdcId) );
00097 recMdcKalHelixSeg->setTdc( tdc );
00098 recMdcKalHelixSeg->setAdc( adc );
00099 recMdcKalHelixSeg->setZhit( zhit );
00100 recMdcKalHelixSeg->setTof( tof );
00101 recMdcKalHelixSeg->setDocaIncl( docaIncl );
00102 recMdcKalHelixSeg->setDocaExcl( docaExcl );
00103 recMdcKalHelixSeg->setDD( driftDist );
00104 recMdcKalHelixSeg->setEntra( entra );
00105 recMdcKalHelixSeg->setDT( driftT );
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117 recMdcKalHelixSeg->setHelixIncl( helixIncl );
00118 recMdcKalHelixSeg->setHelixExcl( helixExcl );
00119
00120
00121
00122 recMdcKalHelixSegCol->push_back(recMdcKalHelixSeg);
00123 nSeg++;
00124 }
00125
00126 return StatusCode::SUCCESS;
00127 }
00128
00129 StatusCode RecMdcKalHelixSegCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
00130
00131 MsgStream log(msgSvc(), "RecMdcKalHelixSegCnv");
00132 log << MSG::DEBUG << "RecMdcKalHelixSegCnv::DataObjectToTObject" << endreq;
00133
00134 RecMdcKalHelixSegCol * mdcHitColTds=dynamic_cast<RecMdcKalHelixSegCol *> (obj);
00135 if (!mdcHitColTds) {
00136 log << MSG::ERROR << "Could not downcast to RecMdcKalHelixSegCol" << endreq;
00137 return StatusCode::FAILURE;
00138 }
00139
00140 DataObject *evt;
00141 m_eds->findObject(EventModel::Recon::Event,evt);
00142 if (evt==NULL) {
00143 log << MSG::ERROR << "Could not get ReconEvent in TDS " << endreq;
00144 return StatusCode::FAILURE;
00145 }
00146
00147 ReconEvent * devtTds=dynamic_cast<ReconEvent *> (evt);
00148 if (!devtTds) {
00149 log << MSG::ERROR << "RecMdcKalHelixSegCnv:Could not downcast to TDS ReconEvent" << endreq;
00150 }
00151
00152 IOpaqueAddress *addr;
00153
00154 m_cnvSvc->getRecTrackCnv()->createRep(evt,addr);
00155 TRecTrackEvent *recEvt=m_cnvSvc->getRecTrackCnv()->getWriteObject();
00156
00157 const TObjArray *m_recMdcKalHelixSegCol = recEvt->getRecMdcKalHelixSegCol();
00158 if (!m_recMdcKalHelixSegCol) return StatusCode::SUCCESS;
00159 recEvt->clearRecMdcKalHelixSegCol();
00160
00161 RecMdcKalHelixSegCol::const_iterator recMdcKalHelixSeg;
00162 int nSeg=0;
00163 for (recMdcKalHelixSeg = mdcHitColTds->begin(); recMdcKalHelixSeg != mdcHitColTds->end(); recMdcKalHelixSeg++) {
00164 Int_t trackId =(*recMdcKalHelixSeg)->getTrackId();
00165 Int_t flagLR = (*recMdcKalHelixSeg)->getFlagLR();
00166 UInt_t mdcId = (*recMdcKalHelixSeg)->getMdcId().get_value();
00167 Double_t tdc = (*recMdcKalHelixSeg)->getTdc();
00168 Double_t adc = (*recMdcKalHelixSeg)->getAdc();
00169 Double_t zhit = (*recMdcKalHelixSeg)->getZhit();
00170 Double_t tof = (*recMdcKalHelixSeg)->getTof();
00171 Double_t docaIncl = (*recMdcKalHelixSeg)->getDocaIncl();
00172 Double_t docaExcl = (*recMdcKalHelixSeg)->getDocaExcl();
00173 Double_t driftDist= (*recMdcKalHelixSeg)->getDD();
00174 Double_t entra = (*recMdcKalHelixSeg)->getEntra();
00175 Double_t driftT = (*recMdcKalHelixSeg)->getDT();
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187 HepVector helixIncl_vct = (*recMdcKalHelixSeg)->getHelixIncl();
00188 HepVector helixExcl_vct = (*recMdcKalHelixSeg)->getHelixExcl();
00189
00190
00191
00192 Double_t helixIncl[5], helixExcl[5];
00193 for(Int_t i=0; i<5; i++){
00194 helixIncl[i] = helixIncl_vct[i];
00195 helixExcl[i] = helixExcl_vct[i];
00196 }
00197
00198
00199
00200
00201
00202
00203
00204 TRecMdcKalHelixSeg *recMdcKalHelixSegRoot = new TRecMdcKalHelixSeg();
00205
00206
00207 recMdcKalHelixSegRoot->setTrackId( trackId );
00208 recMdcKalHelixSegRoot->setFlagLR( flagLR );
00209 recMdcKalHelixSegRoot->setMdcId( Identifier(mdcId) );
00210 recMdcKalHelixSegRoot->setTdc( tdc );
00211 recMdcKalHelixSegRoot->setAdc( adc );
00212 recMdcKalHelixSegRoot->setZhit( zhit );
00213 recMdcKalHelixSegRoot->setTof( tof );
00214 recMdcKalHelixSegRoot->setDocaIncl( docaIncl );
00215 recMdcKalHelixSegRoot->setDocaExcl( docaExcl );
00216 recMdcKalHelixSegRoot->setDD( driftDist );
00217 recMdcKalHelixSegRoot->setEntra( entra );
00218 recMdcKalHelixSegRoot->setDT( driftT );
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230 recMdcKalHelixSegRoot->setHelixIncl( helixIncl );
00231 recMdcKalHelixSegRoot->setHelixExcl( helixExcl );
00232
00233
00234
00235 log<<MSG::INFO<<" recMdcKalHelixSegRoot.dd: "<<recMdcKalHelixSegRoot->getDD()
00236 <<" recMdcKalHelixSegRoot.entra: "<<recMdcKalHelixSegRoot->getEntra()
00237 <<endreq;
00238
00239 recEvt->addRecMdcKalHelixSeg(recMdcKalHelixSegRoot);
00240 nSeg++;
00241 }
00242
00243 return StatusCode::SUCCESS;
00244 }
00245 #endif