ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
AnalysisCommon
ParticleJetTools
ParticleJetTools
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
10
#include "
AthContainers/AuxElement.h
"
11
#include "
xAODTruth/TruthParticleContainer.h
"
12
#include "
xAODTruth/TruthParticle.h
"
13
#include "
xAODTruth/TruthVertexContainerFwd.h
"
14
15
namespace
ParticleJetTools
{
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);
22
int
num_valid_children
(
const
xAOD::TruthParticle
* part);
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
27
enum class
DetailedVertexType
{
28
PrimaryVertex
,
29
BHadronDecay
,
30
CHadronDecay
,
31
CHadronDecayFromBHadron
,
32
TauDecay
,
33
TauDecayFromBHadron
,
34
StrangeDecay
,
35
StrangeFromBHadron
,
36
StrangeFromCHadron
,
37
StrangeFromCFromBHadron
,
38
StrangeFromTau
,
39
StrangeFromTauFromBHadron
,
40
PionDecay
,
41
MaterialInteraction
,
42
MaybeMaterialInteraction
,
43
StrangeOscillation
,
44
OtherSecondaryVertex
,
45
PhotoelectricEmission
,
46
ComptonScattering
,
47
EPAnnihilation
,
48
Bremsstrahlung
,
49
Conversion
,
50
Other
,
51
OtherNInparts
,
52
OtherNoOutparts
,
53
OtherSingleOutpart
,
54
};
55
enum class
SimpleVertexType
{
56
PrimaryVertex
,
57
BHadronDecay
,
58
CHadronDecay
,
59
TauDecay
,
60
StrangeDecay
,
61
PionDecay
,
62
MaterialInteraction
,
63
OtherSecondaryVertex
,
64
Other
,
65
};
66
67
struct
VertexType
{
68
DetailedVertexType
detailedType
;
69
VertexType
(
DetailedVertexType
dt) :
detailedType
(dt) {}
70
SimpleVertexType
getSimpleType
()
const
{
71
switch
(
detailedType
){
72
73
case
DetailedVertexType::PrimaryVertex
:
74
return
SimpleVertexType::PrimaryVertex
;
75
76
case
DetailedVertexType::BHadronDecay
:
77
return
SimpleVertexType::BHadronDecay
;
78
79
case
DetailedVertexType::CHadronDecay
:
80
case
DetailedVertexType::CHadronDecayFromBHadron
:
81
return
SimpleVertexType::CHadronDecay
;
82
83
case
DetailedVertexType::TauDecay
:
84
case
DetailedVertexType::TauDecayFromBHadron
:
85
return
SimpleVertexType::TauDecay
;
86
87
case
DetailedVertexType::StrangeDecay
:
88
case
DetailedVertexType::StrangeOscillation
:
89
case
DetailedVertexType::StrangeFromBHadron
:
90
case
DetailedVertexType::StrangeFromCHadron
:
91
case
DetailedVertexType::StrangeFromCFromBHadron
:
92
case
DetailedVertexType::StrangeFromTau
:
93
case
DetailedVertexType::StrangeFromTauFromBHadron
:
94
return
SimpleVertexType::StrangeDecay
;
95
96
case
DetailedVertexType::PionDecay
:
97
return
SimpleVertexType::PionDecay
;
98
99
case
DetailedVertexType::MaterialInteraction
:
100
case
DetailedVertexType::MaybeMaterialInteraction
:
101
case
DetailedVertexType::PhotoelectricEmission
:
102
case
DetailedVertexType::ComptonScattering
:
103
case
DetailedVertexType::EPAnnihilation
:
104
case
DetailedVertexType::Bremsstrahlung
:
105
case
DetailedVertexType::Conversion
:
106
return
SimpleVertexType::MaterialInteraction
;
107
108
case
DetailedVertexType::Other
:
109
case
DetailedVertexType::OtherNInparts
:
110
case
DetailedVertexType::OtherNoOutparts
:
111
case
DetailedVertexType::OtherSingleOutpart
:
112
return
SimpleVertexType::Other
;
113
default
:
114
return
SimpleVertexType::Other
;
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
;
136
VertexType
getType
(
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
};
156
void
generateFatVertex
(
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
AuxElement.h
Base class for elements of a container that can have aux data.
TruthParticleContainer.h
TruthParticle.h
TruthVertexContainerFwd.h
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition
ConstAccessor.h:55
ParticleJetTools::FatVertex::has_valid_child
bool has_valid_child(const xAOD::TruthParticle *part)
Definition
FatVertex.cxx:33
ParticleJetTools::FatVertex::sum_4vec
TLorentzVector sum_4vec(const std::vector< const xAOD::TruthParticle * > &parts)
Definition
FatVertex.cxx:14
ParticleJetTools::FatVertex::vertex_distance
float vertex_distance(const xAOD::TruthVertex *v1, const xAOD::TruthVertex *v2)
Definition
FatVertex.cxx:53
ParticleJetTools::FatVertex::get_valid_children_by_pt
std::vector< const xAOD::TruthParticle * > get_valid_children_by_pt(const xAOD::TruthParticle *part)
Definition
FatVertex.cxx:42
ParticleJetTools::FatVertex::generateFatVertex
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
ParticleJetTools::FatVertex::num_valid_children
int num_valid_children(const xAOD::TruthParticle *part)
Definition
FatVertex.cxx:23
ParticleJetTools::FatVertex::DetailedVertexType
DetailedVertexType
Definition
FatVertex.h:27
ParticleJetTools::FatVertex::DetailedVertexType::MaterialInteraction
@ MaterialInteraction
Definition
FatVertex.h:41
ParticleJetTools::FatVertex::DetailedVertexType::PrimaryVertex
@ PrimaryVertex
Definition
FatVertex.h:28
ParticleJetTools::FatVertex::DetailedVertexType::StrangeFromTauFromBHadron
@ StrangeFromTauFromBHadron
Definition
FatVertex.h:39
ParticleJetTools::FatVertex::DetailedVertexType::CHadronDecayFromBHadron
@ CHadronDecayFromBHadron
Definition
FatVertex.h:31
ParticleJetTools::FatVertex::DetailedVertexType::CHadronDecay
@ CHadronDecay
Definition
FatVertex.h:30
ParticleJetTools::FatVertex::DetailedVertexType::OtherSecondaryVertex
@ OtherSecondaryVertex
Definition
FatVertex.h:44
ParticleJetTools::FatVertex::DetailedVertexType::Conversion
@ Conversion
Definition
FatVertex.h:49
ParticleJetTools::FatVertex::DetailedVertexType::StrangeOscillation
@ StrangeOscillation
Definition
FatVertex.h:43
ParticleJetTools::FatVertex::DetailedVertexType::Bremsstrahlung
@ Bremsstrahlung
Definition
FatVertex.h:48
ParticleJetTools::FatVertex::DetailedVertexType::StrangeFromTau
@ StrangeFromTau
Definition
FatVertex.h:38
ParticleJetTools::FatVertex::DetailedVertexType::Other
@ Other
Definition
FatVertex.h:50
ParticleJetTools::FatVertex::DetailedVertexType::PhotoelectricEmission
@ PhotoelectricEmission
Definition
FatVertex.h:45
ParticleJetTools::FatVertex::DetailedVertexType::StrangeFromBHadron
@ StrangeFromBHadron
Definition
FatVertex.h:35
ParticleJetTools::FatVertex::DetailedVertexType::BHadronDecay
@ BHadronDecay
Definition
FatVertex.h:29
ParticleJetTools::FatVertex::DetailedVertexType::OtherNInparts
@ OtherNInparts
Definition
FatVertex.h:51
ParticleJetTools::FatVertex::DetailedVertexType::EPAnnihilation
@ EPAnnihilation
Definition
FatVertex.h:47
ParticleJetTools::FatVertex::DetailedVertexType::OtherNoOutparts
@ OtherNoOutparts
Definition
FatVertex.h:52
ParticleJetTools::FatVertex::DetailedVertexType::StrangeDecay
@ StrangeDecay
Definition
FatVertex.h:34
ParticleJetTools::FatVertex::DetailedVertexType::StrangeFromCHadron
@ StrangeFromCHadron
Definition
FatVertex.h:36
ParticleJetTools::FatVertex::DetailedVertexType::TauDecay
@ TauDecay
Definition
FatVertex.h:32
ParticleJetTools::FatVertex::DetailedVertexType::MaybeMaterialInteraction
@ MaybeMaterialInteraction
Definition
FatVertex.h:42
ParticleJetTools::FatVertex::DetailedVertexType::PionDecay
@ PionDecay
Definition
FatVertex.h:40
ParticleJetTools::FatVertex::DetailedVertexType::OtherSingleOutpart
@ OtherSingleOutpart
Definition
FatVertex.h:53
ParticleJetTools::FatVertex::DetailedVertexType::StrangeFromCFromBHadron
@ StrangeFromCFromBHadron
Definition
FatVertex.h:37
ParticleJetTools::FatVertex::DetailedVertexType::ComptonScattering
@ ComptonScattering
Definition
FatVertex.h:46
ParticleJetTools::FatVertex::DetailedVertexType::TauDecayFromBHadron
@ TauDecayFromBHadron
Definition
FatVertex.h:33
ParticleJetTools::FatVertex::SimpleVertexType
SimpleVertexType
Definition
FatVertex.h:55
ParticleJetTools::FatVertex::SimpleVertexType::MaterialInteraction
@ MaterialInteraction
Definition
FatVertex.h:62
ParticleJetTools::FatVertex::SimpleVertexType::PrimaryVertex
@ PrimaryVertex
Definition
FatVertex.h:56
ParticleJetTools::FatVertex::SimpleVertexType::CHadronDecay
@ CHadronDecay
Definition
FatVertex.h:58
ParticleJetTools::FatVertex::SimpleVertexType::Other
@ Other
Definition
FatVertex.h:64
ParticleJetTools::FatVertex::SimpleVertexType::BHadronDecay
@ BHadronDecay
Definition
FatVertex.h:57
ParticleJetTools::FatVertex::SimpleVertexType::StrangeDecay
@ StrangeDecay
Definition
FatVertex.h:60
ParticleJetTools::FatVertex::SimpleVertexType::TauDecay
@ TauDecay
Definition
FatVertex.h:59
ParticleJetTools::FatVertex::SimpleVertexType::PionDecay
@ PionDecay
Definition
FatVertex.h:61
ParticleJetTools::FatVertex::vertex_distance_xy
float vertex_distance_xy(const xAOD::TruthVertex *v1, const xAOD::TruthVertex *v2)
Definition
FatVertex.cxx:61
ParticleJetTools::FatVertex::generateFatVertices
std::vector< FatVertex > generateFatVertices(const xAOD::TruthVertex *pv, const float truthVertexMergeDistance, const std::vector< const xAOD::TruthParticle * > &truth_particles)
Definition
FatVertex.cxx:192
ParticleJetTools
Definition
FatVertex.h:15
std
STL namespace.
xAOD::TruthVertex
TruthVertex_v1 TruthVertex
Typedef to implementation.
Definition
TruthVertex.h:15
xAOD::TruthParticle
TruthParticle_v1 TruthParticle
Typedef to implementation.
Definition
Event/xAOD/xAODTruth/xAODTruth/TruthParticle.h:15
ParticleJetTools::FatVertex::FatVertex
Definition
FatVertex.h:120
ParticleJetTools::FatVertex::FatVertex::doParentChildLinks
void doParentChildLinks(std::vector< FatVertex > &vertices)
Definition
FatVertex.cxx:558
ParticleJetTools::FatVertex::FatVertex::getType
VertexType getType(const SG::ConstAccessor< int > &uid_accessor) const
Definition
FatVertex.cxx:302
ParticleJetTools::FatVertex::FatVertex::operator<
bool operator<(const FatVertex &other) const
Definition
FatVertex.cxx:542
ParticleJetTools::FatVertex::FatVertex::getNumChargedDecays
int getNumChargedDecays(float minPt=0.0) const
Definition
FatVertex.cxx:285
ParticleJetTools::FatVertex::FatVertex::inparts
std::vector< const xAOD::TruthParticle * > inparts
Definition
FatVertex.h:121
ParticleJetTools::FatVertex::FatVertex::FatVertex
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
ParticleJetTools::FatVertex::FatVertex::operator==
bool operator==(const FatVertex &other) const
Definition
FatVertex.cxx:552
ParticleJetTools::FatVertex::FatVertex::internal
std::vector< const xAOD::TruthParticle * > internal
Definition
FatVertex.h:122
ParticleJetTools::FatVertex::FatVertex::classifyPhotonVertex
std::optional< DetailedVertexType > classifyPhotonVertex(size_t truth_out_parts, size_t truth_valid_out_parts, const std::vector< const xAOD::TruthParticle * > &truth_children) const
Definition
FatVertex.cxx:452
ParticleJetTools::FatVertex::FatVertex::classifyLeptonVertex
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
Definition
FatVertex.cxx:495
ParticleJetTools::FatVertex::FatVertex::getPT
float getPT() const
Definition
FatVertex.cxx:280
ParticleJetTools::FatVertex::FatVertex::getNumNeutralDecays
int getNumNeutralDecays(float minPt=0.0, bool include_neutrinos=false) const
Definition
FatVertex.cxx:293
ParticleJetTools::FatVertex::FatVertex::parent
const FatVertex * parent
Definition
FatVertex.h:125
ParticleJetTools::FatVertex::FatVertex::classifyStrangeVertex
std::optional< DetailedVertexType > classifyStrangeVertex(DetailedVertexType parent_type, bool has_parent) const
Definition
FatVertex.cxx:430
ParticleJetTools::FatVertex::FatVertex::children
std::vector< const FatVertex * > children
Definition
FatVertex.h:126
ParticleJetTools::FatVertex::FatVertex::classifyTauVertex
std::optional< DetailedVertexType > classifyTauVertex(DetailedVertexType parent_type, bool has_parent) const
Definition
FatVertex.cxx:411
ParticleJetTools::FatVertex::FatVertex::outparts
std::vector< const xAOD::TruthParticle * > outparts
Definition
FatVertex.h:123
ParticleJetTools::FatVertex::FatVertex::is_pv
bool is_pv
Definition
FatVertex.h:124
ParticleJetTools::FatVertex::VertexType
Definition
FatVertex.h:67
ParticleJetTools::FatVertex::VertexType::VertexType
VertexType(DetailedVertexType dt)
Definition
FatVertex.h:69
ParticleJetTools::FatVertex::VertexType::getSimpleType
SimpleVertexType getSimpleType() const
Definition
FatVertex.h:70
ParticleJetTools::FatVertex::VertexType::detailedType
DetailedVertexType detailedType
Definition
FatVertex.h:68
Generated on
for ATLAS Offline Software by
1.17.0