00001 #include "GaudiKernel/MsgStream.h" 00002 00003 #include "EventModel/EventModel.h" 00004 #include "EvtRecEvent/EvtRecObject.h" 00005 #include "EvtRecEvent/EvtRecPrimaryVertex.h" 00006 00007 #include "RootEventData/TEvtRecObject.h" 00008 #include "RootEventData/TEvtRecPrimaryVertex.h" 00009 00010 #include "RootCnvSvc/RootAddress.h" 00011 #include "RootCnvSvc/EvtRec/EvtRecCnv.h" 00012 #include "RootCnvSvc/EvtRec/EvtRecPrimaryVertexCnv.h" 00013 00014 #include "CLHEP/Matrix/Vector.h" 00015 #include "CLHEP/Matrix/SymMatrix.h" 00016 using CLHEP::HepVector; 00017 using CLHEP::HepSymMatrix; 00018 00019 EvtRecPrimaryVertexCnv::EvtRecPrimaryVertexCnv(ISvcLocator* svc) 00020 : RootEventBaseCnv(classID(), svc) 00021 { 00022 m_rootBranchname = "m_evtRecPrimaryVertex"; 00023 m_adresses.push_back(&m_evtRecPrimaryVertex); 00024 m_evtRecPrimaryVertex = 0; 00025 } 00026 00027 StatusCode EvtRecPrimaryVertexCnv::TObjectToDataObject(DataObject*& refpObject) { 00028 MsgStream log(msgSvc(), "EvtRecPrimaryVertexCnv"); 00029 log << MSG::DEBUG << "EvtRecPrimaryVertexCnv::TObjectToDataObject" << endreq; 00030 00031 // create the TDS location for the EvtRecPrimaryVertex 00032 EvtRecPrimaryVertex* evtRecPrimaryVertex = new EvtRecPrimaryVertex; 00033 refpObject = evtRecPrimaryVertex; 00034 00035 if ( ! m_evtRecPrimaryVertex ) return StatusCode::SUCCESS; 00036 // convert 00037 evtRecPrimaryVertex->setIsValid (m_evtRecPrimaryVertex->isValid() ); 00038 evtRecPrimaryVertex->setNTracks (m_evtRecPrimaryVertex->nTracks() ); 00039 evtRecPrimaryVertex->setTrackIdList (m_evtRecPrimaryVertex->trackIdList() ); 00040 evtRecPrimaryVertex->setChi2 (m_evtRecPrimaryVertex->chi2() ); 00041 evtRecPrimaryVertex->setNdof (m_evtRecPrimaryVertex->ndof() ); 00042 evtRecPrimaryVertex->setFitMethod (m_evtRecPrimaryVertex->fitMethod() ); 00043 00044 HepVector vtx(3, 0); 00045 for (Int_t i = 0; i < 3; i++) { 00046 vtx[i] = m_evtRecPrimaryVertex->vertex(i); 00047 } 00048 00049 HepSymMatrix Evtx(3, 0); 00050 Evtx[0][0] = m_evtRecPrimaryVertex->errorVertex(0); 00051 Evtx[0][1] = Evtx[1][0] = m_evtRecPrimaryVertex->errorVertex(1); 00052 Evtx[0][2] = Evtx[2][0] = m_evtRecPrimaryVertex->errorVertex(2); 00053 Evtx[1][1] = m_evtRecPrimaryVertex->errorVertex(3); 00054 Evtx[1][2] = Evtx[2][1] = m_evtRecPrimaryVertex->errorVertex(4); 00055 Evtx[2][2] = m_evtRecPrimaryVertex->errorVertex(5); 00056 00057 evtRecPrimaryVertex->setVertex (vtx); 00058 evtRecPrimaryVertex->setErrorVertex (Evtx); 00059 00060 delete m_evtRecPrimaryVertex; 00061 m_evtRecPrimaryVertex = 0; 00062 return StatusCode::SUCCESS; 00063 } 00064 00065 StatusCode EvtRecPrimaryVertexCnv::DataObjectToTObject(DataObject* obj, RootAddress* rootaddr) { 00066 00067 MsgStream log(msgSvc(), "EvtRecPrimaryVertexCnv"); 00068 log << MSG::DEBUG << "EvtRecPrimaryVertexCnv::DataObjectToTObject" << endreq; 00069 00070 EvtRecPrimaryVertex* evtRecPrimaryVertex = dynamic_cast<EvtRecPrimaryVertex*> (obj); 00071 if ( ! evtRecPrimaryVertex ) { 00072 log << MSG::ERROR << "Could not downcast to EvtRecPrimaryVertex" << endreq; 00073 return StatusCode::FAILURE; 00074 } 00075 00076 DataObject* evt = NULL; 00077 StatusCode sc = m_eds->findObject(EventModel::EvtRec::Event, evt); 00078 if ( sc.isFailure() ) { 00079 log << MSG::ERROR << "Could not get EvtRecObject in TDS" << endreq; 00080 return StatusCode::FAILURE; 00081 } 00082 00083 EvtRecObject* devtTds = dynamic_cast<EvtRecObject*> (evt); 00084 if ( ! devtTds ) { 00085 log << MSG::ERROR << "EvtRecPrimaryVertexCnv: Could not downcast to TDS EvtRecObject" << endreq; 00086 } 00087 00088 IOpaqueAddress* addr; 00089 m_cnvSvc->getEvtRecCnv()->createRep(evt, addr); 00090 TEvtRecObject* recEvt = m_cnvSvc->getEvtRecCnv()->getWriteObject(); 00091 00092 //recEvt->clearEvtRecPrimaryVertex(); 00093 00094 TEvtRecPrimaryVertex* m_evtRecPrimaryVertex = const_cast<TEvtRecPrimaryVertex*>( recEvt->getEvtRecPrimaryVertex() ); 00095 00096 m_evtRecPrimaryVertex->setIsValid (evtRecPrimaryVertex->isValid() ); 00097 m_evtRecPrimaryVertex->setNTracks (evtRecPrimaryVertex->nTracks() ); 00098 m_evtRecPrimaryVertex->setTrackIdList (evtRecPrimaryVertex->trackIdList() ); 00099 m_evtRecPrimaryVertex->setChi2 (evtRecPrimaryVertex->chi2() ); 00100 m_evtRecPrimaryVertex->setNdof (evtRecPrimaryVertex->ndof() ); 00101 m_evtRecPrimaryVertex->setFitMethod (evtRecPrimaryVertex->fitMethod() ); 00102 00103 Double_t vtx[3]; 00104 for (Int_t i = 0; i < 3; i++) { 00105 vtx[i] = evtRecPrimaryVertex->vertex()[i]; 00106 } 00107 Double_t Evtx[6]; 00108 Evtx[0] = evtRecPrimaryVertex->errorVertex()[0][0]; 00109 Evtx[1] = evtRecPrimaryVertex->errorVertex()[0][1]; 00110 Evtx[2] = evtRecPrimaryVertex->errorVertex()[0][2]; 00111 Evtx[3] = evtRecPrimaryVertex->errorVertex()[1][1]; 00112 Evtx[4] = evtRecPrimaryVertex->errorVertex()[1][2]; 00113 Evtx[5] = evtRecPrimaryVertex->errorVertex()[2][2]; 00114 m_evtRecPrimaryVertex->setVertex (vtx); 00115 m_evtRecPrimaryVertex->setErrorVertex (Evtx); 00116 00117 return StatusCode::SUCCESS; 00118 }