4#ifndef PARTICLEJETTOOLS_FATVERTEX_H
5#define PARTICLEJETTOOLS_FATVERTEX_H
7#include <TLorentzVector.h>
19 TLorentzVector
sum_4vec(
const std::vector<const xAOD::TruthParticle*>& parts);
121 std::vector<const xAOD::TruthParticle*>
inparts;
128 FatVertex(std::vector<const xAOD::TruthParticle*> in_parts, std::vector<const xAOD::TruthParticle*> intern, std::vector<const xAOD::TruthParticle*> out_parts,
bool pv) :
149 size_t truth_out_parts,
size_t truth_valid_out_parts,
150 const std::vector<const xAOD::TruthParticle*>& truth_children)
const;
153 size_t truth_out_parts,
size_t truth_valid_out_parts,
154 const std::vector<const xAOD::TruthParticle*>& truth_children)
const;
158 std::vector<const xAOD::TruthParticle*>& fat_inparts,
159 std::vector<const xAOD::TruthParticle*>& fat_internal,
160 std::vector<const xAOD::TruthParticle*>& fat_outparts,
162 const float truthVertexMergeDistance,
163 const std::vector<const xAOD::TruthParticle*>& additional_in_parts = std::vector<const xAOD::TruthParticle*>()
167 const float truthVertexMergeDistance,
168 const std::vector<const xAOD::TruthParticle*>& truth_particles
Base class for elements of a container that can have aux data.
Helper class to provide constant type-safe access to aux data.
bool has_valid_child(const xAOD::TruthParticle *part)
TLorentzVector sum_4vec(const std::vector< const xAOD::TruthParticle * > &parts)
float vertex_distance(const xAOD::TruthVertex *v1, const xAOD::TruthVertex *v2)
std::vector< const xAOD::TruthParticle * > get_valid_children_by_pt(const xAOD::TruthParticle *part)
void generateFatVertex(const xAOD::TruthVertex *vertex, std::vector< const xAOD::TruthParticle * > &fat_inparts, std::vector< const xAOD::TruthParticle * > &fat_internal, std::vector< const xAOD::TruthParticle * > &fat_outparts, bool internal, const float truthVertexMergeDistance, const std::vector< const xAOD::TruthParticle * > &additional_in_parts=std::vector< const xAOD::TruthParticle * >())
Generates a fat vertex by recursively searching children of the provided truth vertex and adding them...
int num_valid_children(const xAOD::TruthParticle *part)
@ StrangeFromTauFromBHadron
@ CHadronDecayFromBHadron
@ MaybeMaterialInteraction
@ StrangeFromCFromBHadron
float vertex_distance_xy(const xAOD::TruthVertex *v1, const xAOD::TruthVertex *v2)
std::vector< FatVertex > generateFatVertices(const xAOD::TruthVertex *pv, const float truthVertexMergeDistance, const std::vector< const xAOD::TruthParticle * > &truth_particles)
TruthVertex_v1 TruthVertex
Typedef to implementation.
TruthParticle_v1 TruthParticle
Typedef to implementation.
void doParentChildLinks(std::vector< FatVertex > &vertices)
VertexType getType(const SG::ConstAccessor< int > &uid_accessor) const
bool operator<(const FatVertex &other) const
int getNumChargedDecays(float minPt=0.0) const
std::vector< const xAOD::TruthParticle * > inparts
FatVertex(std::vector< const xAOD::TruthParticle * > in_parts, std::vector< const xAOD::TruthParticle * > intern, std::vector< const xAOD::TruthParticle * > out_parts, bool pv)
bool operator==(const FatVertex &other) const
std::vector< const xAOD::TruthParticle * > internal
std::optional< DetailedVertexType > classifyPhotonVertex(size_t truth_out_parts, size_t truth_valid_out_parts, const std::vector< const xAOD::TruthParticle * > &truth_children) const
std::optional< DetailedVertexType > classifyLeptonVertex(const SG::ConstAccessor< int > &uid_accessor, size_t truth_out_parts, size_t truth_valid_out_parts, const std::vector< const xAOD::TruthParticle * > &truth_children) const
int getNumNeutralDecays(float minPt=0.0, bool include_neutrinos=false) const
std::optional< DetailedVertexType > classifyStrangeVertex(DetailedVertexType parent_type, bool has_parent) const
std::vector< const FatVertex * > children
std::optional< DetailedVertexType > classifyTauVertex(DetailedVertexType parent_type, bool has_parent) const
std::vector< const xAOD::TruthParticle * > outparts
VertexType(DetailedVertexType dt)
SimpleVertexType getSimpleType() const
DetailedVertexType detailedType