00001
00002
00003 #ifndef XAOD_EGAMMATRUTHXAODHELPERS_H
00004 #define XAOD_EGAMMATRUTHXAODHELPERS_H
00005
00006 #include "xAODEgamma/EgammaFwd.h"
00007 #include "xAODEgamma/ElectronFwd.h"
00008 #include "xAODEgamma/PhotonFwd.h"
00009 #include "xAODTracking/TrackParticleFwd.h"
00010 #include "xAODTruth/TruthParticleContainer.h"
00011 #include "xAODTruth/TruthParticle.h"
00012
00013 #include <cstddef>
00014 #include <set>
00015
00016 namespace xAOD {
00017
00018 namespace EgammaHelpers{
00019
00021 template<class T>
00022 const T* getLink(const xAOD::IParticle* particle, std::string name){
00023 if (!particle) return 0;
00024 typedef ElementLink< DataVector<T> > Link_t;
00025
00026 if (!particle->isAvailable< Link_t >(name) ) {
00027 return 0;
00028 }
00029 const Link_t link = particle->auxdata<Link_t>(name);
00030 if (!link.isValid()) {
00031 return 0;
00032 }
00033 return *link;
00034 }
00035
00037 const xAOD::Electron* getRecoElectron(const xAOD::TruthParticle*);
00038
00040 const xAOD::Photon* getRecoPhoton(const xAOD::TruthParticle* particle);
00041
00043 bool isTrueConvertedPhoton(const xAOD::Photon* ph, float maxRadius = 800.);
00044
00046 bool isTrueConvertedPhoton(const xAOD::TruthParticle* truePh, float maxRadius = 800.);
00047
00050 const xAOD::TruthParticle* getBkgElectronMother(const xAOD::Electron* el,const unsigned int barcodecut=0);
00051
00063 const xAOD::TruthParticle* getBkgElectronMother(const xAOD::TruthParticle* truthel, const unsigned int barcodecut=0);
00064
00066 std::vector<const xAOD::TruthParticle*>
00067 getBkgElectronLineage(const xAOD::Electron* el,const unsigned int barcodecut=0);
00068
00078 std::vector<const xAOD::TruthParticle*>
00079 getBkgElectronLineage(const xAOD::TruthParticle* truthel,const unsigned int barcodecut=0);
00080
00081
00082 }
00083
00084 }
00085
00086 #endif // XAOD_EGAMMAXAODHELPERS_H