00001 #pragma once
00002
00007
00008 #include "TruthUtils/PIDHelpers.h"
00009 #include "TruthUtils/TruthParticleHelpers.h"
00010 #include "MCUtils/HepMCUtils.h"
00011
00012
00013
00014 using HepMC::GenEvent;
00015 using HepMC::GenParticle;
00016 using HepMC::GenVertex;
00017
00018
00019
00020
00021 #include <boost/foreach.hpp>
00022 #ifndef foreach
00023 namespace boost { namespace BOOST_FOREACH = foreach; }
00024 #define foreach BOOST_FOREACH
00025 #endif
00026
00027
00028 namespace MC {
00029
00030
00031 using namespace MCUtils;
00032 using namespace HEPUtils;
00033
00034
00036
00037
00043 inline bool isGenStable(const HepMC::GenParticle* p) {
00044 return isGenStable(p->status(), p->barcode());
00045 }
00046
00047
00049
00050
00052 inline bool isSimStable(const HepMC::GenParticle* p) {
00053 if (p->status() != 1) return false;
00054 if (isGenStable(p)) return p->end_vertex() == NULL;
00055 return true;
00056 }
00057
00061 inline bool isGenSimulStable(const HepMC::GenParticle* p) {
00062 return isSimStable(p);
00063 }
00064
00065
00067 inline bool isNonInteracting(const HepMC::GenParticle* p) {
00068 return MC::isNonInteracting(p->pdg_id());
00069 }
00070
00073
00074
00075
00076
00078 inline bool isSimInteracting(const HepMC::GenParticle* p) {
00079 if (! MC::isGenStable(p)) return false;
00080 return !MC::isNonInteracting(p);
00081 }
00082
00085 inline bool isGenInteracting(const HepMC::GenParticle* p) {
00086 return isSimInteracting(p);
00087 }
00088
00090
00091
00092 }