ATLAS Offline Software
Loading...
Searching...
No Matches
FatVertex.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4#ifndef PARTICLEJETTOOLS_FATVERTEX_H
5#define PARTICLEJETTOOLS_FATVERTEX_H
6
7#include <TLorentzVector.h>
8#include <optional>
9
14
16
17 namespace FatVertex{
18
19 TLorentzVector sum_4vec(const std::vector<const xAOD::TruthParticle*>& parts);
20 float vertex_distance(const xAOD::TruthVertex* v1, const xAOD::TruthVertex* v2);
21 float vertex_distance_xy(const xAOD::TruthVertex* v1, const xAOD::TruthVertex* v2);
23 bool has_valid_child(const xAOD::TruthParticle* part);
24 std::vector<const xAOD::TruthParticle*> get_valid_children_by_pt(const xAOD::TruthParticle* part);
25
26 // -1 represents invalid, -2 represents pileup, and -3 is fake
66
67 struct VertexType{
71 switch(detailedType){
72
75
78
82
86
95
98
107
113 default:
115
116 };
117 }
118 };
119
120 struct FatVertex{
121 std::vector<const xAOD::TruthParticle*> inparts;
122 std::vector<const xAOD::TruthParticle*> internal;
123 std::vector<const xAOD::TruthParticle*> outparts;
124 bool is_pv;
125 const FatVertex* parent=nullptr;
126 std::vector<const FatVertex*> children;
127
128 FatVertex(std::vector<const xAOD::TruthParticle*> in_parts, std::vector<const xAOD::TruthParticle*> intern, std::vector<const xAOD::TruthParticle*> out_parts, bool pv) :
129 inparts(std::move(in_parts)), internal(std::move(intern)),
130 outparts(std::move(out_parts)), is_pv(pv) {}
131
132 float getPT() const;
133 void doParentChildLinks(std::vector<FatVertex>& vertices);
134 int getNumChargedDecays(float minPt=0.0) const;
135 int getNumNeutralDecays(float minPt=0.0, bool include_neutrinos=false) const;
137 const SG::ConstAccessor<int>& uid_accessor
138 ) const;
139
140 bool operator<(const FatVertex& other) const;
141 bool operator==(const FatVertex& other) const;
142
143 private:
144 std::optional<DetailedVertexType> classifyTauVertex(
145 DetailedVertexType parent_type, bool has_parent) const;
146 std::optional<DetailedVertexType> classifyStrangeVertex(
147 DetailedVertexType parent_type, bool has_parent) const;
148 std::optional<DetailedVertexType> classifyPhotonVertex(
149 size_t truth_out_parts, size_t truth_valid_out_parts,
150 const std::vector<const xAOD::TruthParticle*>& truth_children) const;
151 std::optional<DetailedVertexType> classifyLeptonVertex(
152 const SG::ConstAccessor<int>& uid_accessor,
153 size_t truth_out_parts, size_t truth_valid_out_parts,
154 const std::vector<const xAOD::TruthParticle*>& truth_children) const;
155 };
157 const xAOD::TruthVertex* vertex,
158 std::vector<const xAOD::TruthParticle*>& fat_inparts,
159 std::vector<const xAOD::TruthParticle*>& fat_internal,
160 std::vector<const xAOD::TruthParticle*>& fat_outparts,
161 bool internal,
162 const float truthVertexMergeDistance,
163 const std::vector<const xAOD::TruthParticle*>& additional_in_parts = std::vector<const xAOD::TruthParticle*>()
164 ) ;
165 std::vector<FatVertex> generateFatVertices(
166 const xAOD::TruthVertex* pv,
167 const float truthVertexMergeDistance,
168 const std::vector<const xAOD::TruthParticle*>& truth_particles
169 );
170 } // End of FatVertex namespace
171} // End of ParticleJetTools namespace
172
173#endif // PARTICLEJETTOOLS_FATVERTEX_H
Base class for elements of a container that can have aux data.
@ PionDecay
Helper class to provide constant type-safe access to aux data.
bool has_valid_child(const xAOD::TruthParticle *part)
Definition FatVertex.cxx:33
TLorentzVector sum_4vec(const std::vector< const xAOD::TruthParticle * > &parts)
Definition FatVertex.cxx:14
float vertex_distance(const xAOD::TruthVertex *v1, const xAOD::TruthVertex *v2)
Definition FatVertex.cxx:53
std::vector< const xAOD::TruthParticle * > get_valid_children_by_pt(const xAOD::TruthParticle *part)
Definition FatVertex.cxx:42
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...
Definition FatVertex.cxx:77
int num_valid_children(const xAOD::TruthParticle *part)
Definition FatVertex.cxx:23
float vertex_distance_xy(const xAOD::TruthVertex *v1, const xAOD::TruthVertex *v2)
Definition FatVertex.cxx:61
std::vector< FatVertex > generateFatVertices(const xAOD::TruthVertex *pv, const float truthVertexMergeDistance, const std::vector< const xAOD::TruthParticle * > &truth_particles)
STL namespace.
TruthVertex_v1 TruthVertex
Typedef to implementation.
Definition TruthVertex.h:15
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
Definition FatVertex.h:121
FatVertex(std::vector< const xAOD::TruthParticle * > in_parts, std::vector< const xAOD::TruthParticle * > intern, std::vector< const xAOD::TruthParticle * > out_parts, bool pv)
Definition FatVertex.h:128
bool operator==(const FatVertex &other) const
std::vector< const xAOD::TruthParticle * > internal
Definition FatVertex.h:122
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
Definition FatVertex.h:126
std::optional< DetailedVertexType > classifyTauVertex(DetailedVertexType parent_type, bool has_parent) const
std::vector< const xAOD::TruthParticle * > outparts
Definition FatVertex.h:123
VertexType(DetailedVertexType dt)
Definition FatVertex.h:69
SimpleVertexType getSimpleType() const
Definition FatVertex.h:70