2#define EmcMcHitCnv_CXX 1
4#include "GaudiKernel/DataObject.h"
5#include "GaudiKernel/MsgStream.h"
6#include "GaudiKernel/ObjectVector.h"
8#include "TClonesArray.h"
10#include "Identifier/Identifier.h"
12#include "EventModel/EventModel.h"
13#include "McTruth/EmcMcHit.h"
14#include "McTruth/McEvent.h"
15#include "RootCnvSvc/Mc/EmcMcHitCnv.h"
16#include "RootCnvSvc/Mc/McCnv.h"
17#include "RootCnvSvc/RootAddress.h"
18#include "RootEventData/TEmcMc.h"
19#include "RootEventData/TMcEvent.h"
28 MsgStream log(
msgSvc(),
"EmcMcHitCnv" );
39 MsgStream log(
msgSvc(),
"EmcMcHitCnv" );
40 log << MSG::DEBUG <<
"EmcMcHitCnv::TObjectToDataObject" << endmsg;
41 StatusCode sc = StatusCode::SUCCESS;
45 refpObject = emcMcTdsCol;
48 if ( !m_emcMcHitCol )
return sc;
49 TIter emcMcIter( m_emcMcHitCol );
51 while ( ( emcMcRoot = (
TEmcMc*)emcMcIter.Next() ) )
55 unsigned int id_root = emcMcRoot->
getId();
67 double px = emcMcRoot->
getPx();
68 double py = emcMcRoot->
getPy();
69 double pz = emcMcRoot->
getPz();
73 m_common.m_rootEmcMcHitMap[emcMcRoot] = emcMcTds;
81 for ( iHitMap = HitMap.begin(); iHitMap != HitMap.end(); iHitMap++ )
85 pair<Identifier, Double_t> TdsHit(
id, iHitMap->second );
86 TdshitMap.insert( TdsHit );
114 emcMcTds->
setPx( px );
115 emcMcTds->
setPy( py );
116 emcMcTds->
setPz( pz );
119 emcMcTdsCol->push_back( emcMcTds );
122 delete m_emcMcHitCol;
124 return StatusCode::SUCCESS;
129 MsgStream log(
msgSvc(),
"EmcMcHitCnv" );
130 log << MSG::DEBUG <<
"EmcMcHitCnv::DataObjectToTObject" << endmsg;
131 StatusCode sc = StatusCode::SUCCESS;
134 if ( !emcMcHitCnvTds )
136 log << MSG::ERROR <<
"Could not downcast to EmcMcHitCol" << endmsg;
137 return StatusCode::FAILURE;
144 log << MSG::ERROR <<
"Could not get McEvent in TDS " << endmsg;
145 return StatusCode::FAILURE;
149 { log << MSG::ERROR <<
"EmcMcHitCnv:Could not downcast to TDS McEvent" << endmsg; }
150 IOpaqueAddress* addr;
152 m_cnvSvc->getMcCnv()->createRep( evt, addr );
156 if ( !m_emcMcHitCol )
return sc;
159 EmcMcHitCol::const_iterator emcMcTds;
161 for ( emcMcTds = emcMcHitCnvTds->begin(); emcMcTds != emcMcHitCnvTds->end(); emcMcTds++ )
163 UInt_t
id = ( ( *emcMcTds )->identify() ).get_value();
164 UInt_t trackIndex = ( *emcMcTds )->getTrackIndex();
166 int hitEmc = ( *emcMcTds )->getHitEmc();
167 int PDGCode = ( *emcMcTds )->getPDGCode();
168 double PDGCharge = ( *emcMcTds )->getPDGCharge();
169 double time = ( *emcMcTds )->getTime();
170 std::map<Identifier, Double_t> TdshitMap = ( *emcMcTds )->getHitMap();
174 for ( iHitMap = TdshitMap.begin(); iHitMap != TdshitMap.end(); iHitMap++ )
177 Int_t id( iHitMap->first.get_value() );
178 pair<Int_t, Double_t> Hit(
id, iHitMap->second );
179 HitMap.insert( Hit );
197 Double_t xPosition = ( *emcMcTds )->getPositionX();
198 Double_t yPosition = ( *emcMcTds )->getPositionY();
199 Double_t zPosition = ( *emcMcTds )->getPositionZ();
200 Double_t px = ( *emcMcTds )->getPx();
201 Double_t py = ( *emcMcTds )->getPy();
202 Double_t pz = ( *emcMcTds )->getPz();
203 Double_t depositEnergy = ( *emcMcTds )->getDepositEnergy();
208 emcMcRoot->
setId(
id );
221 emcMcRoot->
setPx( px );
222 emcMcRoot->
setPy( py );
223 emcMcRoot->
setPz( pz );
229 return StatusCode::SUCCESS;
ObjectVector< EmcMcHit > EmcMcHitCol
EmcMcHitCnv(ISvcLocator *svc)
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
static const CLID & classID()
void setPDGCode(int code)
void setPositionX(double positionX)
void setPDGCharge(double charge)
void setTime(double time)
void setDepositEnergy(double depositEnergy)
void setHitMap(std::map< Identifier, double > &hitMap)
void setTrackIndex(unsigned int trackIndex)
void setIdentifier(Identifier &id)
void setPositionY(double positionY)
void setPositionZ(double positionZ)
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)
Double_t getPositionY() const
void setPositionZ(Double_t positionZ)
void setTrackIndex(UInt_t trackIndex)
void setPDGCode(int PDGCode)
void setHitMap(std::map< Int_t, Double_t > hitMap)
double getPDGCharge() const
void setHitEmc(int hitEmc)
UInt_t getTrackIndex() const
void setPositionY(Double_t positionY)
void setPDGCharge(double PDGCharge)
Double_t getPositionX() const
Double_t getDepositEnergy() const
std::map< Int_t, Double_t > getHitMap() const
void setPositionX(Double_t positionX)
void setTime(double time)
Double_t getPositionZ() const
void setDepositEnergy(Double_t depositEnergy)
const TObjArray * getEmcMcHitCol() const
void addEmcMc(TEmcMc *mcHit)
Emc.
_EXTERN_ std::string Event