45 if (!part->production_vertex())
return false;
46 for (
const auto& iter: part->production_vertex()->particles_in()){
47 int parent_pdgid = iter->pdg_id();
50 if ( std::abs( parent_pdgid ) < 9 )
return true;
51 if ( parent_pdgid == part->pdg_id() )
return fromWZ( iter );
62 if (!part->production_vertex())
return false;
63 for (
const auto& iter: part->production_vertex()->particles_in()){
64 int parent_pdgid = iter->pdg_id();
65 if ( std::abs( parent_pdgid ) == 15 )
return true;
67 if ( parent_pdgid == part->pdg_id() )
return fromTau( iter );
75void classify(ToolHandle<IMCTruthClassifier>& classif,
77 unsigned int& particleOutCome,
81 unsigned int& particleOrigin )
84 std::pair<MCTruthPartClassifier::ParticleType, MCTruthPartClassifier::ParticleOrigin> classification = classif->particleTruthClassifier(theParticle, &info);
85 particleOutCome = info.particleOutCome;
87 result = (
unsigned int)std::get<0>(tpl);
88 hadron_pdg = std::get<1>(tpl)?std::get<1>(tpl)->pdg_id():0;
90 particleOrigin = classification.second;
static bool fromTau(const HepMC::ConstGenParticlePtr &part)
void classify(ToolHandle< IMCTruthClassifier > &m_classif, const xAOD::TruthParticle *theParticle, unsigned int &particleOutCome, unsigned int &result, int &hadron_pdg, unsigned int &particleType, unsigned int &particleOrigin)
bool fromWZorTau(const HepMC::ConstGenParticlePtr &part)
bool prompt(const xAOD::TruthParticle *part, ToolHandle< IMCTruthClassifier > &m_classif)
static bool fromWZ(const HepMC::ConstGenParticlePtr &part)
const GenParticle * ConstGenParticlePtr
std::tuple< unsigned int, T > defOrigOfParticle(T thePart)
bool isQuark(const T &p)
PDG rule 2: Quarks and leptons are numbered consecutively starting from 1 and 11 respectively; to do ...
bool isHadron(const T &p)
TruthParticle_v1 TruthParticle
Typedef to implementation.