ATLAS Offline Software
PhysicsAnalysis
AnalysisCommon
IsolationSelection
Root
IsolationLowPtPLVTool.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include <
IsolationSelection/IsolationLowPtPLVTool.h
>
6
#include <
xAODBase/IParticleHelpers.h
>
7
#include <
xAODBase/ObjectType.h
>
8
9
// Tools includes:
10
#include <cmath>
11
12
#include "
PathResolver/PathResolver.h
"
13
#include "TMVA/MethodBDT.h"
14
#include "TMVA/Reader.h"
15
#include "TMVA/Tools.h"
16
17
namespace
CP
{
18
// Accessors for input variables
19
static
const
ShortAccessor
s_acc_TrackJetNTrack(
"PromptLeptonInput_TrackJetNTrack"
);
20
static
const
FloatAccessor
s_acc_DRlj(
"PromptLeptonInput_DRlj"
);
21
static
const
FloatAccessor
s_acc_PtRel(
"PromptLeptonInput_PtRel"
);
22
static
const
FloatAccessor
s_acc_PtFrac(
"PromptLeptonInput_PtFrac"
);
23
static
const
FloatAccessor
s_acc_topoetcone20(
"topoetcone20"
);
24
static
const
FloatAccessor
s_acc_ptvarcone20(
"ptvarcone20"
);
25
static
const
FloatAccessor
s_acc_ptvarcone30(
"ptvarcone30"
);
26
static
const
FloatDecorator
s_dec_iso_PLT(
"LowPtPLV"
);
27
28
constexpr
int
N_VARIABLES
= 6;
29
30
IsolationLowPtPLVTool::IsolationLowPtPLVTool
(
const
std::string& toolName) :
asg
::AsgTool(toolName) {}
31
32
StatusCode
IsolationLowPtPLVTool::initialize
() {
33
TMVA::Tools::Instance();
34
35
std::string fullPathToFile_Muon =
PathResolverFindCalibFile
(
m_muonCalibFile
);
36
std::string fullPathToFile_Elec =
PathResolverFindCalibFile
(
m_elecCalibFile
);
37
38
std::vector<std::string> BDT_vars_Muon{
"TrackJetNTrack"
,
"PtRel"
,
"PtFrac"
,
"DRlj"
,
"TopoEtCone20Rel"
,
"PtVarCone30Rel"
};
39
40
std::vector<std::string> BDT_vars_Elec{
"TrackJetNTrack"
,
"PtRel"
,
"PtFrac"
,
"DRlj"
,
"TopoEtCone20Rel"
,
"PtVarCone20Rel"
};
41
m_TMVAReader_Muon
= std::make_unique<TMVA::Reader>(BDT_vars_Muon,
"!Silent:Color"
);
42
m_TMVAReader_Elec
= std::make_unique<TMVA::Reader>(BDT_vars_Elec,
"!Silent:Color"
);
43
44
if
(fullPathToFile_Muon.empty()) {
45
ATH_MSG_ERROR
(
"Error! No xml file found for Muon LowPtPLV"
);
46
return
StatusCode::FAILURE;
47
}
48
m_TMVAReader_Muon
->BookMVA(
m_muonMethodName
.value(), fullPathToFile_Muon);
49
TMVA::MethodBDT* method_Muon_bdt =
dynamic_cast<
TMVA::MethodBDT*
>
(
m_TMVAReader_Muon
->FindMVA(
m_muonMethodName
.value()));
50
if
(!method_Muon_bdt) {
51
ATH_MSG_ERROR
(
"Error! No method found for Muon LowPtPLV"
);
52
return
StatusCode::FAILURE;
53
}
54
55
if
(fullPathToFile_Elec.empty()) {
56
ATH_MSG_ERROR
(
"Error! No xml file found for Electron LowPtPLV"
);
57
return
StatusCode::FAILURE;
58
}
59
m_TMVAReader_Elec
->BookMVA(
m_elecMethodName
.value(), fullPathToFile_Elec);
60
TMVA::MethodBDT* method_Elec_bdt =
dynamic_cast<
TMVA::MethodBDT*
>
(
m_TMVAReader_Elec
->FindMVA(
m_elecMethodName
.value()));
61
if
(!method_Elec_bdt) {
62
ATH_MSG_ERROR
(
"Error! No method found for Electron LowPtPLV"
);
63
return
StatusCode::FAILURE;
64
}
65
66
ATH_MSG_INFO
(
"Initialized IsolationLowPtPLVTool"
);
67
return
StatusCode::SUCCESS;
68
}
69
70
StatusCode
IsolationLowPtPLVTool::augmentPLV
(
const
xAOD::IParticle
&
Particle
) {
71
// Check if input variables exist
72
bool
inputvar_missing =
false
;
73
if
(!s_acc_TrackJetNTrack.
isAvailable
(
Particle
)) {
74
ATH_MSG_ERROR
(
"TrackJetNTrack not available"
);
75
inputvar_missing =
true
;
76
}
77
78
if
(!s_acc_DRlj.
isAvailable
(
Particle
)) {
79
ATH_MSG_ERROR
(
"DRlj not available"
);
80
inputvar_missing =
true
;
81
}
82
83
if
(!s_acc_PtRel.
isAvailable
(
Particle
)) {
84
ATH_MSG_ERROR
(
"PtRel not available"
);
85
inputvar_missing =
true
;
86
}
87
88
if
(!s_acc_PtFrac.
isAvailable
(
Particle
)) {
89
ATH_MSG_ERROR
(
"PtFrac not available"
);
90
inputvar_missing =
true
;
91
}
92
93
if
(!s_acc_topoetcone20.
isAvailable
(
Particle
)) {
94
ATH_MSG_ERROR
(
"topoetcone20 not available"
);
95
inputvar_missing =
true
;
96
}
97
98
if
(
Particle
.
type
() ==
xAOD::Type::ObjectType::Electron
&& !s_acc_ptvarcone20.
isAvailable
(
Particle
)) {
99
ATH_MSG_ERROR
(
"ptvarcone20 not available"
);
100
inputvar_missing =
true
;
101
}
102
103
if
(
Particle
.
type
() ==
xAOD::Type::ObjectType::Muon
&& !s_acc_ptvarcone30.
isAvailable
(
Particle
)) {
104
ATH_MSG_ERROR
(
"ptvarcone30 not available"
);
105
inputvar_missing =
true
;
106
}
107
108
if
(inputvar_missing) {
109
ATH_MSG_ERROR
(
"input variable(s) missing, augmenting fixed value 1.1"
);
110
s_dec_iso_PLT(
Particle
) = 1.1;
111
return
StatusCode::FAILURE;
112
}
113
114
short
TrackJetNTrack
= s_acc_TrackJetNTrack(
Particle
);
115
float
DRlj
= s_acc_DRlj(
Particle
);
116
float
PtRel
= s_acc_PtRel(
Particle
);
117
float
PtFrac
= s_acc_PtFrac(
Particle
);
118
float
topoetcone20
= s_acc_topoetcone20(
Particle
);
119
float
ptvarcone30
= 0;
120
float
ptvarcone20
= 0;
121
122
float
pt
=
Particle
.
pt
();
123
float
score
= 1.1;
124
std::vector<double> var_vector(
N_VARIABLES
, 0);
125
if
(
Particle
.
type
() ==
xAOD::Type::ObjectType::Muon
) {
126
ptvarcone30
= s_acc_ptvarcone30(
Particle
);
127
var_vector[0] =
TrackJetNTrack
;
128
var_vector[1] =
PtRel
;
129
var_vector[2] =
PtFrac
;
130
var_vector[3] =
DRlj
;
131
var_vector[4] =
topoetcone20
/
pt
;
132
var_vector[5] =
ptvarcone30
/
pt
;
133
score
=
m_TMVAReader_Muon
->EvaluateMVA(var_vector,
m_muonMethodName
.value());
134
}
else
if
(
Particle
.
type
() ==
xAOD::Type::ObjectType::Electron
) {
135
ptvarcone20
= s_acc_ptvarcone20(
Particle
);
136
var_vector[0] =
TrackJetNTrack
;
137
var_vector[1] =
PtRel
;
138
var_vector[2] =
PtFrac
;
139
var_vector[3] =
DRlj
;
140
var_vector[4] =
topoetcone20
/
pt
;
141
var_vector[5] =
ptvarcone20
/
pt
;
142
score
=
m_TMVAReader_Elec
->EvaluateMVA(var_vector,
m_elecMethodName
.value());
143
}
else
{
144
ATH_MSG_ERROR
(
"The function needs either a muon or an electron!"
);
145
return
StatusCode::FAILURE;
146
}
147
s_dec_iso_PLT(
Particle
) =
score
;
148
149
return
StatusCode::SUCCESS;
150
}
151
}
// namespace CP
xAOD::Iso::ptvarcone30
@ ptvarcone30
Definition:
IsolationType.h:56
CP::N_VARIABLES
constexpr int N_VARIABLES
Definition:
IsolationLowPtPLVTool.cxx:28
CP::IsolationLowPtPLVTool::IsolationLowPtPLVTool
IsolationLowPtPLVTool(const std::string &name)
Definition:
IsolationLowPtPLVTool.cxx:30
xAOD::Iso::topoetcone20
@ topoetcone20
Topo-cluster ET-sum.
Definition:
IsolationType.h:48
xAOD::Electron
Electron_v1 Electron
Definition of the current "egamma version".
Definition:
Event/xAOD/xAODEgamma/xAODEgamma/Electron.h:17
xAOD::Iso::ptvarcone20
@ ptvarcone20
Mini-Isolation http://arxiv.org/abs/1007.2221.
Definition:
IsolationType.h:55
CP::IsolationLowPtPLVTool::m_TMVAReader_Elec
std::unique_ptr< TMVA::Reader > m_TMVAReader_Elec
Definition:
IsolationLowPtPLVTool.h:34
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition:
AthMsgStreamMacros.h:31
CP::IsolationLowPtPLVTool::m_elecCalibFile
Gaudi::Property< std::string > m_elecCalibFile
Definition:
IsolationLowPtPLVTool.h:28
Prompt::Def::TrackJetNTrack
@ TrackJetNTrack
Definition:
VarHolder.h:69
asg
Definition:
DataHandleTestTool.h:28
test_pyathena.pt
pt
Definition:
test_pyathena.py:11
CP::IsolationLowPtPLVTool::initialize
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
Definition:
IsolationLowPtPLVTool.cxx:32
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition:
Event/xAOD/xAODBase/xAODBase/IParticle.h:41
Prompt::Def::DRlj
@ DRlj
Definition:
VarHolder.h:70
CP
Select isolated Photons, Electrons and Muons.
Definition:
Control/xAODRootAccess/xAODRootAccess/TEvent.h:48
CP::FloatDecorator
SG::AuxElement::Decorator< float > FloatDecorator
Definition:
PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/Defs.h:22
CP::IsolationLowPtPLVTool::augmentPLV
virtual StatusCode augmentPLV(const xAOD::IParticle &particle) override
This method adds the lowPT PLV score as decoration to the lepton.
Definition:
IsolationLowPtPLVTool.cxx:70
Prompt::Def::PtFrac
@ PtFrac
Definition:
VarHolder.h:71
CP::IsolationLowPtPLVTool::m_elecMethodName
Gaudi::Property< std::string > m_elecMethodName
Definition:
IsolationLowPtPLVTool.h:32
ObjectType.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition:
AthMsgStreamMacros.h:33
IsolationLowPtPLVTool.h
CP::IsolationLowPtPLVTool::m_muonMethodName
Gaudi::Property< std::string > m_muonMethodName
Definition:
IsolationLowPtPLVTool.h:31
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition:
PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
xAOD::Particle_v1
Description of a generic particle.
Definition:
Particle_v1.h:31
PathResolver.h
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition:
PathResolver.cxx:431
Muon
struct TBPatternUnitContext Muon
CP::IsolationLowPtPLVTool::m_TMVAReader_Muon
std::unique_ptr< TMVA::Reader > m_TMVAReader_Muon
Definition:
IsolationLowPtPLVTool.h:33
xAOD::score
@ score
Definition:
TrackingPrimitives.h:513
xAOD::Particle_v1::type
virtual Type::ObjectType type() const
The type of the object as a simple enumeration.
Definition:
Particle_v1.cxx:56
CP::FloatAccessor
SG::AuxElement::ConstAccessor< float > FloatAccessor
Definition:
PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/Defs.h:21
CP::IsolationLowPtPLVTool::m_muonCalibFile
Gaudi::Property< std::string > m_muonCalibFile
Definition:
IsolationLowPtPLVTool.h:25
Prompt::Def::PtRel
@ PtRel
Definition:
VarHolder.h:72
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
IParticleHelpers.h
CP::ShortAccessor
SG::AuxElement::ConstAccessor< short > ShortAccessor
Definition:
PhysicsAnalysis/AnalysisCommon/IsolationSelection/IsolationSelection/Defs.h:34
xAOD::Particle_v1::pt
virtual double pt() const
The transverse momentum ( ) of the particle.
Definition:
Particle_v1.cxx:26
Generated on Thu Nov 7 2024 21:17:30 for ATLAS Offline Software by
1.8.18