2#define MucMcHitCnv_CXX 1
4#include "GaudiKernel/DataObject.h"
5#include "GaudiKernel/MsgStream.h"
6#include "GaudiKernel/ObjectVector.h"
8#include "TClonesArray.h"
10#include "EventModel/EventModel.h"
11#include "McTruth/McEvent.h"
12#include "McTruth/MucMcHit.h"
13#include "RootCnvSvc/Mc/McCnv.h"
14#include "RootCnvSvc/Mc/MucMcHitCnv.h"
15#include "RootCnvSvc/RootAddress.h"
16#include "RootEventData/TMcEvent.h"
17#include "RootEventData/TMucMc.h"
26 MsgStream log(
msgSvc(),
"MucMcHitCnv" );
37 MsgStream log(
msgSvc(),
"MucMcHitCnv" );
38 log << MSG::DEBUG <<
"MucMcHitCnv::TObjectToDataObject" << endmsg;
39 StatusCode sc = StatusCode::SUCCESS;
43 refpObject = mucMcTdsCol;
46 if ( !m_mucMcHitCol )
return sc;
47 TIter mucMcIter( m_mucMcHitCol );
49 while ( ( mucMcRoot = (
TMucMc*)mucMcIter.Next() ) )
51 unsigned int id = mucMcRoot->
getId();
56 double px = mucMcRoot->
getPx();
57 double py = mucMcRoot->
getPy();
58 double pz = mucMcRoot->
getPz();
61 m_common.m_rootMucMcHitMap[mucMcRoot] = mucMcTds;
68 mucMcTds->
setPx( px );
69 mucMcTds->
setPy( py );
70 mucMcTds->
setPz( pz );
72 mucMcTdsCol->push_back( mucMcTds );
77 return StatusCode::SUCCESS;
82 MsgStream log(
msgSvc(),
"MucMcHitCnv" );
83 log << MSG::DEBUG <<
"MucMcHitCnv::DataObjectToTObject" << endmsg;
84 StatusCode sc = StatusCode::SUCCESS;
87 if ( !mucMcHitCnvTds )
89 log << MSG::ERROR <<
"Could not downcast to MucMcHitCol" << endmsg;
90 return StatusCode::FAILURE;
97 log << MSG::ERROR <<
"Could not get McEvent in TDS " << endmsg;
98 return StatusCode::FAILURE;
102 { log << MSG::ERROR <<
"MucMcHitCnv:Could not downcast to TDS McEvent" << endmsg; }
103 IOpaqueAddress* addr;
105 m_cnvSvc->getMcCnv()->createRep( evt, addr );
109 if ( !m_mucMcHitCol )
return sc;
112 MucMcHitCol::const_iterator mucMcTds;
114 for ( mucMcTds = mucMcHitCnvTds->begin(); mucMcTds != mucMcHitCnvTds->end(); mucMcTds++ )
116 UInt_t
id = ( ( *mucMcTds )->identify() ).get_value();
117 UInt_t trackIndex = ( *mucMcTds )->getTrackIndex();
118 Double_t xPosition = ( *mucMcTds )->getPositionX();
119 Double_t yPosition = ( *mucMcTds )->getPositionY();
120 Double_t zPosition = ( *mucMcTds )->getPositionZ();
121 Double_t px = ( *mucMcTds )->getPx();
122 Double_t py = ( *mucMcTds )->getPy();
123 Double_t pz = ( *mucMcTds )->getPz();
128 mucMcRoot->
setId(
id );
133 mucMcRoot->
setPx( px );
134 mucMcRoot->
setPy( py );
135 mucMcRoot->
setPz( pz );
140 return StatusCode::SUCCESS;
ObjectVector< MucMcHit > MucMcHitCol
MucMcHitCnv(ISvcLocator *svc)
static const CLID & classID()
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
void setPositionX(double positionX)
void setIdentifier(unsigned id)
void setPositionZ(double positionZ)
void setPositionY(double positionY)
void setTrackIndex(unsigned int trackIndex)
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)
void addMucMc(TMucMc *mcHit)
Muc.
const TObjArray * getMucMcHitCol() const
UInt_t getTrackIndex() const
void setPositionX(Double_t positionX)
Double_t getPositionY() const
Double_t getPositionZ() const
void setTrackIndex(UInt_t trackIndex)
void setPositionY(Double_t positionY)
void setPositionZ(Double_t positionZ)
Double_t getPositionX() const
_EXTERN_ std::string Event