BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtRecPrimaryVertexCnv.cxx
Go to the documentation of this file.
1#include "GaudiKernel/MsgStream.h"
2
3#include "EventModel/EventModel.h"
4#include "EvtRecEvent/EvtRecObject.h"
5#include "EvtRecEvent/EvtRecPrimaryVertex.h"
6
7#include "RootEventData/TEvtRecObject.h"
8#include "RootEventData/TEvtRecPrimaryVertex.h"
9
10#include "RootCnvSvc/EvtRec/EvtRecCnv.h"
11#include "RootCnvSvc/EvtRec/EvtRecPrimaryVertexCnv.h"
12#include "RootCnvSvc/RootAddress.h"
13
14#include "CLHEP/Matrix/SymMatrix.h"
15#include "CLHEP/Matrix/Vector.h"
16using CLHEP::HepSymMatrix;
17using CLHEP::HepVector;
18
20 : RootEventBaseCnv( classID(), svc ) {
21 m_rootBranchname = "m_evtRecPrimaryVertex";
22 m_adresses.push_back( &m_evtRecPrimaryVertex );
23 m_evtRecPrimaryVertex = 0;
24}
25
26StatusCode EvtRecPrimaryVertexCnv::TObjectToDataObject( DataObject*& refpObject ) {
27 MsgStream log( msgSvc(), "EvtRecPrimaryVertexCnv" );
28 log << MSG::DEBUG << "EvtRecPrimaryVertexCnv::TObjectToDataObject" << endmsg;
29
30 // create the TDS location for the EvtRecPrimaryVertex
31 EvtRecPrimaryVertex* evtRecPrimaryVertex = new EvtRecPrimaryVertex;
32 refpObject = evtRecPrimaryVertex;
33
34 if ( !m_evtRecPrimaryVertex ) return StatusCode::SUCCESS;
35 // convert
36 evtRecPrimaryVertex->setIsValid( m_evtRecPrimaryVertex->isValid() );
37 evtRecPrimaryVertex->setNTracks( m_evtRecPrimaryVertex->nTracks() );
38 evtRecPrimaryVertex->setTrackIdList( m_evtRecPrimaryVertex->trackIdList() );
39 evtRecPrimaryVertex->setChi2( m_evtRecPrimaryVertex->chi2() );
40 evtRecPrimaryVertex->setNdof( m_evtRecPrimaryVertex->ndof() );
41 evtRecPrimaryVertex->setFitMethod( m_evtRecPrimaryVertex->fitMethod() );
42
43 HepVector vtx( 3, 0 );
44 for ( Int_t i = 0; i < 3; i++ ) { vtx[i] = m_evtRecPrimaryVertex->vertex( i ); }
45
46 HepSymMatrix Evtx( 3, 0 );
47 Evtx[0][0] = m_evtRecPrimaryVertex->errorVertex( 0 );
48 Evtx[0][1] = Evtx[1][0] = m_evtRecPrimaryVertex->errorVertex( 1 );
49 Evtx[0][2] = Evtx[2][0] = m_evtRecPrimaryVertex->errorVertex( 2 );
50 Evtx[1][1] = m_evtRecPrimaryVertex->errorVertex( 3 );
51 Evtx[1][2] = Evtx[2][1] = m_evtRecPrimaryVertex->errorVertex( 4 );
52 Evtx[2][2] = m_evtRecPrimaryVertex->errorVertex( 5 );
53
54 evtRecPrimaryVertex->setVertex( vtx );
55 evtRecPrimaryVertex->setErrorVertex( Evtx );
56
57 delete m_evtRecPrimaryVertex;
58 m_evtRecPrimaryVertex = 0;
59 return StatusCode::SUCCESS;
60}
61
63 RootAddress* rootaddr ) {
64
65 MsgStream log( msgSvc(), "EvtRecPrimaryVertexCnv" );
66 log << MSG::DEBUG << "EvtRecPrimaryVertexCnv::DataObjectToTObject" << endmsg;
67
68 EvtRecPrimaryVertex* evtRecPrimaryVertex = dynamic_cast<EvtRecPrimaryVertex*>( obj );
69 if ( !evtRecPrimaryVertex )
70 {
71 log << MSG::ERROR << "Could not downcast to EvtRecPrimaryVertex" << endmsg;
72 return StatusCode::FAILURE;
73 }
74
75 DataObject* evt = NULL;
76 StatusCode sc = m_eds->findObject( EventModel::EvtRec::Event, evt );
77 if ( sc.isFailure() )
78 {
79 log << MSG::ERROR << "Could not get EvtRecObject in TDS" << endmsg;
80 return StatusCode::FAILURE;
81 }
82
83 EvtRecObject* devtTds = dynamic_cast<EvtRecObject*>( evt );
84 if ( !devtTds )
85 {
86 log << MSG::ERROR << "EvtRecPrimaryVertexCnv: Could not downcast to TDS EvtRecObject"
87 << endmsg;
88 }
89
90 IOpaqueAddress* addr;
91 m_cnvSvc->getEvtRecCnv()->createRep( evt, addr );
92 TEvtRecObject* recEvt = m_cnvSvc->getEvtRecCnv()->getWriteObject();
93
94 // recEvt->clearEvtRecPrimaryVertex();
95
96 TEvtRecPrimaryVertex* m_evtRecPrimaryVertex =
97 const_cast<TEvtRecPrimaryVertex*>( recEvt->getEvtRecPrimaryVertex() );
98
99 m_evtRecPrimaryVertex->setIsValid( evtRecPrimaryVertex->isValid() );
100 m_evtRecPrimaryVertex->setNTracks( evtRecPrimaryVertex->nTracks() );
101 m_evtRecPrimaryVertex->setTrackIdList( evtRecPrimaryVertex->trackIdList() );
102 m_evtRecPrimaryVertex->setChi2( evtRecPrimaryVertex->chi2() );
103 m_evtRecPrimaryVertex->setNdof( evtRecPrimaryVertex->ndof() );
104 m_evtRecPrimaryVertex->setFitMethod( evtRecPrimaryVertex->fitMethod() );
105
106 Double_t vtx[3];
107 for ( Int_t i = 0; i < 3; i++ ) { vtx[i] = evtRecPrimaryVertex->vertex()[i]; }
108 Double_t Evtx[6];
109 Evtx[0] = evtRecPrimaryVertex->errorVertex()[0][0];
110 Evtx[1] = evtRecPrimaryVertex->errorVertex()[0][1];
111 Evtx[2] = evtRecPrimaryVertex->errorVertex()[0][2];
112 Evtx[3] = evtRecPrimaryVertex->errorVertex()[1][1];
113 Evtx[4] = evtRecPrimaryVertex->errorVertex()[1][2];
114 Evtx[5] = evtRecPrimaryVertex->errorVertex()[2][2];
115 m_evtRecPrimaryVertex->setVertex( vtx );
116 m_evtRecPrimaryVertex->setErrorVertex( Evtx );
117
118 return StatusCode::SUCCESS;
119}
IMessageSvc * msgSvc()
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
EvtRecPrimaryVertexCnv(ISvcLocator *svc)
void setTrackIdList(const std::vector< int > &trackIdList)
Definition of a Root address, derived from IOpaqueAddress.
IDataProviderSvc * m_eds
pointer to eventdataservice
std::vector< void * > m_adresses
each converter knows the corresponding adresses
std::string m_rootBranchname
root branchname (may be concatenated of severals)
RootEventBaseCnv(const CLID &clid, ISvcLocator *svc)
const TEvtRecPrimaryVertex * getEvtRecPrimaryVertex() const