ATLAS Offline Software
Reconstruction
egamma
egammaUtils
Root
EMFourMomBuilder.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
egammaUtils/EMFourMomBuilder.h
"
6
#include "
xAODEgamma/EgammaxAODHelpers.h
"
7
#include "
EventPrimitives/EventPrimitives.h
"
8
9
namespace
{
10
constexpr
float
el_mass = 0.510998;
11
constexpr
float
ph_mass = 0.0;
12
13
void
14
setFromCluster(
xAOD::Egamma
&
eg
)
15
{
16
17
const
xAOD::CaloCluster
* cluster =
eg
.caloCluster();
18
const
float
eta
= cluster->
eta
();
19
const
float
phi
= cluster->
phi
();
20
const
float
E
= cluster->
e
();
21
if
(
eg
.type() ==
xAOD::Type::Electron
) {
22
const
double
pt
=
23
E
> el_mass ? sqrt(
E
*
E
- el_mass * el_mass) / cosh(
eta
) : 0;
24
eg
.setP4(
pt
,
eta
,
phi
, el_mass);
25
}
else
{
26
eg
.setP4(
E
/ cosh(
eta
),
eta
,
phi
, ph_mass);
27
}
28
}
29
30
void
31
setFromTrkCluster(
xAOD::Electron
&
el
)
32
{
33
34
const
xAOD::CaloCluster
* cluster =
el
.caloCluster();
35
const
xAOD::TrackParticle
* trackParticle =
el
.trackParticle();
36
37
bool
goodTrack = (
xAOD::EgammaHelpers::numberOfSiHits
(trackParticle) >= 4);
38
const
float
E
= cluster->
e
();
39
const
float
eta
= goodTrack ? trackParticle->
eta
() : cluster->
eta
();
40
const
float
phi
= goodTrack ? trackParticle->
phi
() : cluster->
phi
();
41
42
const
double
pt
=
43
E
> el_mass ? sqrt(
E
*
E
- el_mass * el_mass) / cosh(
eta
) : 0;
44
el
.setP4(
pt
,
eta
,
phi
, el_mass);
45
}
46
47
void
48
setFromTrkCluster(
xAOD::Photon
& ph)
49
{
50
const
xAOD::CaloCluster
* cluster = ph.
caloCluster
();
51
float
E
= cluster->
e
();
52
float
eta
= cluster->
eta
();
53
float
phi
= cluster->
phi
();
54
Amg::Vector3D
momentumAtVertex
=
xAOD::EgammaHelpers::momentumAtVertex
(&ph);
55
if
(
momentumAtVertex
.mag() > 1
e
-5) {
// protection against p = 0
56
eta
=
momentumAtVertex
.eta();
57
phi
=
momentumAtVertex
.phi();
58
}
59
ph.
setP4
(
E
/ cosh(
eta
),
eta
,
phi
, ph_mass);
60
}
61
}
62
64
65
namespace
EMFourMomBuilder
66
{
67
void
68
calculate
(
xAOD::Electron
&
electron
) {
69
if
(
electron
.trackParticle()) {
70
return
setFromTrkCluster(
electron
);
71
}
else
{
72
setFromCluster(
electron
);
73
}
74
}
75
76
void
77
calculate
(
xAOD::Photon
&
photon
) {
78
if
(
xAOD::EgammaHelpers::conversionType
(&
photon
) ==
79
xAOD::EgammaParameters::doubleSi
) {
80
setFromTrkCluster(
photon
);
81
}
else
{
82
setFromCluster(
photon
);
83
}
84
}
85
}
86
xAOD::CaloCluster_v1::phi
virtual double phi() const
The azimuthal angle ( ) of the particle.
Definition:
CaloCluster_v1.cxx:256
AllowedVariables::e
e
Definition:
AsgElectronSelectorTool.cxx:37
EMFourMomBuilder
Definition:
EMFourMomBuilder.h:22
xAOD::Electron
Electron_v1 Electron
Definition of the current "egamma version".
Definition:
Event/xAOD/xAODEgamma/xAODEgamma/Electron.h:17
phi
Scalar phi() const
phi method
Definition:
AmgMatrixBasePlugin.h:67
ParticleTest.eg
eg
Definition:
ParticleTest.py:29
eta
Scalar eta() const
pseudorapidity method
Definition:
AmgMatrixBasePlugin.h:83
xAOD::TrackParticle_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition:
TrackParticle_v1.cxx:77
test_pyathena.pt
pt
Definition:
test_pyathena.py:11
xAOD::Egamma_v1
Definition:
Egamma_v1.h:56
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition:
CaloCluster_v1.h:59
EgammaxAODHelpers.h
xAOD::Egamma_v1::setP4
void setP4(float pt, float eta, float phi, float m)
set the 4-vec
Definition:
Egamma_v1.cxx:104
xAOD::CaloCluster_v1::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition:
CaloCluster_v1.cxx:251
xAOD::Egamma_v1::caloCluster
const xAOD::CaloCluster * caloCluster(size_t index=0) const
Pointer to the xAOD::CaloCluster/s that define the electron candidate.
Definition:
Egamma_v1.cxx:388
xAOD::EgammaHelpers::momentumAtVertex
Amg::Vector3D momentumAtVertex(const xAOD::Photon *, bool debug=false)
return the momentum at the vertex (which can be 0)
Definition:
PhotonxAODHelpers.cxx:88
xAOD::EgammaParameters::doubleSi
@ doubleSi
two tracks, both with Si hits
Definition:
EgammaEnums.h:279
plotIsoValidation.el
el
Definition:
plotIsoValidation.py:197
EMFourMomBuilder.h
EventPrimitives.h
EMFourMomBuilder::calculate
void calculate(xAOD::Electron &electron)
Definition:
EMFourMomBuilder.cxx:68
VP1PartSpect::E
@ E
Definition:
VP1PartSpectFlags.h:21
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition:
GeoPrimitives.h:47
xAOD::EgammaHelpers::numberOfSiHits
std::size_t numberOfSiHits(const xAOD::TrackParticle *tp)
return the number of Si hits in the track particle
Definition:
ElectronxAODHelpers.cxx:66
xAOD::Electron_v1
Definition:
Electron_v1.h:34
xAOD::photon
@ photon
Definition:
TrackingPrimitives.h:199
xAOD::Photon_v1
Definition:
Photon_v1.h:37
xAOD::EgammaParameters::electron
@ electron
Definition:
EgammaEnums.h:18
xAOD::EgammaHelpers::conversionType
xAOD::EgammaParameters::ConversionType conversionType(const xAOD::Photon *ph)
return the photon conversion type (see EgammaEnums)
Definition:
PhotonxAODHelpers.cxx:26
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition:
TrackParticle_v1.h:43
xAOD::CaloCluster_v1::e
virtual double e() const
The total energy of the particle.
Definition:
CaloCluster_v1.cxx:265
xAOD::TrackParticle_v1::phi
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
Generated on Thu Nov 7 2024 21:14:42 for ATLAS Offline Software by
1.8.18