/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RootCnvSvc/RootCnvSvc-02-01-12/src/EvtRec/EvtRecPrimaryVertexCnv.cxx

Go to the documentation of this file.
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 }

Generated on Tue Nov 29 22:58:42 2016 for BOSS_7.0.2 by  doxygen 1.4.7