ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
Algorithms
AsgAnalysisAlgorithms
Root
ObjectCutFlowHistAlg.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
7
8
9
//
10
// includes
11
//
12
13
#include <
AsgAnalysisAlgorithms/ObjectCutFlowHistAlg.h
>
14
15
#include <TH1.h>
16
17
//
18
// method implementations
19
//
20
21
namespace
CP
22
{
23
24
StatusCode ObjectCutFlowHistAlg ::
25
initialize ()
26
{
27
ANA_CHECK
(
m_inputHandle
.initialize (
m_systematicsList
));
28
ANA_CHECK
(
m_preselection
.initialize (
m_systematicsList
,
m_inputHandle
,
SG::AllowEmpty
));
29
ANA_CHECK
(
m_selections
.initialize (
m_systematicsList
,
m_inputHandle
));
30
ANA_CHECK
(
m_systematicsList
.initialize());
31
32
// Total label
33
m_labels
.push_back (
"total"
);
34
// Individual labels
35
for
(
size_t
i{}; i <
m_selections
.size(); i++) {
36
std::string
label
=
m_selections
.at(i).getSelectionName();
37
// Check if the string ends with "_%SYS%"
38
if
(
label
.size() >= 6 &&
label
.substr(
label
.size() - 6) ==
"_%SYS%"
) {
39
// Remove "_%SYS%" from the end of the string
40
label
.erase(
label
.size() - 6);
41
}
42
m_labels
.push_back (std::move(
label
));
43
m_allCutsNum
++;
44
}
45
assert (
m_allCutsNum
+1 ==
m_labels
.size());
46
47
return
StatusCode::SUCCESS;
48
}
49
50
StatusCode ObjectCutFlowHistAlg ::
51
execute (
const
EventContext& ctx)
52
{
53
for
(
const
auto
& sys :
m_systematicsList
.systematicsVector())
54
{
55
const
xAOD::IParticleContainer
*input =
nullptr
;
56
ANA_CHECK
(
m_inputHandle
.retrieve (input, sys, ctx));
57
58
auto
histIter =
m_hist
.find (sys);
59
if
(histIter ==
m_hist
.end())
60
{
61
std::string
name
;
62
ANA_CHECK
(
m_systematicsList
.service().makeSystematicsName (
name
,
m_histPattern
, sys));
63
64
std::string title =
m_histTitle
.value();
65
if
(!sys.empty())
66
title +=
" ("
+ sys.name() +
")"
;
67
ANA_CHECK
(
book
(TH1F (
name
.c_str(), title.c_str(),
m_allCutsNum
+1, 0,
m_allCutsNum
+1)));
68
69
m_hist
.insert (std::make_pair (sys,
hist
(
name
)));
70
histIter =
m_hist
.find (sys);
71
assert (histIter !=
m_hist
.end());
72
73
for
(
unsigned
i = 0; i <
m_allCutsNum
+1; i++)
74
{
75
histIter->second->GetXaxis()->SetBinLabel(i + 1,
m_labels
[i].c_str());
76
}
77
}
78
79
for
(
const
xAOD::IParticle
*particle : *input) {
80
if
(
m_preselection
.getBool (*particle, sys)) {
81
unsigned
cutIndex = 1;
82
histIter->second->Fill (0);
83
bool
selected{
true
};
84
for
(
size_t
i{}; i <
m_selections
.size(); i++) {
85
if
((!
m_forceCutSequence
.value() || selected) &&
m_selections
.at(i).getBool (*particle, sys)) {
86
histIter->second->Fill (cutIndex);
87
}
else
{
88
selected =
false
;
89
}
90
cutIndex++;
91
}
92
}
93
}
94
95
}
96
return
StatusCode::SUCCESS;
97
}
98
}
ANA_CHECK
#define ANA_CHECK(EXP)
check whether the given expression was successful
Definition
Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:325
ObjectCutFlowHistAlg.h
AthHistogramming::hist
TH1 * hist(std::string_view histName, std::string_view tDir="", std::string_view stream="")
Simplify the retrieval of registered histograms of any type.
Definition
AthHistogramming.cxx:182
AthHistogramming::book
StatusCode book(const TH1 &hist, std::string_view tDir="", std::string_view stream="")
Simplify the booking and registering (into THistSvc) of histograms.
Definition
AthHistogramming.h:297
CP::ObjectCutFlowHistAlg::m_labels
std::vector< std::string > m_labels
histogram bin labels
Definition
ObjectCutFlowHistAlg.h:74
CP::ObjectCutFlowHistAlg::m_selections
SysReadSelectionHandleArray m_selections
the input object selections for which to create a cutflow
Definition
ObjectCutFlowHistAlg.h:56
CP::ObjectCutFlowHistAlg::m_allCutsNum
unsigned m_allCutsNum
the total number of cuts configured (needed to configure histograms)
Definition
ObjectCutFlowHistAlg.h:66
CP::ObjectCutFlowHistAlg::m_forceCutSequence
Gaudi::Property< bool > m_forceCutSequence
force cut sequence
Definition
ObjectCutFlowHistAlg.h:61
CP::ObjectCutFlowHistAlg::m_inputHandle
SysReadHandle< xAOD::IParticleContainer > m_inputHandle
the particle collection we run on
Definition
ObjectCutFlowHistAlg.h:38
CP::ObjectCutFlowHistAlg::m_histTitle
Gaudi::Property< std::string > m_histTitle
the histogram title to use
Definition
ObjectCutFlowHistAlg.h:52
CP::ObjectCutFlowHistAlg::m_preselection
SysReadSelectionHandle m_preselection
the preselection we apply to our input
Definition
ObjectCutFlowHistAlg.h:43
CP::ObjectCutFlowHistAlg::m_systematicsList
SysListHandle m_systematicsList
the systematics list we run
Definition
ObjectCutFlowHistAlg.h:34
CP::ObjectCutFlowHistAlg::m_hist
std::unordered_map< CP::SystematicSet, TH1 * > m_hist
the created histograms
Definition
ObjectCutFlowHistAlg.h:70
CP::ObjectCutFlowHistAlg::m_histPattern
Gaudi::Property< std::string > m_histPattern
the pattern for histogram names
Definition
ObjectCutFlowHistAlg.h:48
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition
Event/xAOD/xAODBase/xAODBase/IParticle.h:41
label
std::string label(const std::string &format, int i)
Definition
label.h:19
CP
Select isolated Photons, Electrons and Muons.
Definition
Control/xAODRootAccess/xAODRootAccess/TEvent.h:27
SG::AllowEmpty
@ AllowEmpty
Definition
StoreGate/StoreGate/VarHandleKey.h:29
xAOD::name
name
Definition
TriggerMenuJson_v1.cxx:29
xAOD::IParticleContainer
DataVector< IParticle > IParticleContainer
Simple convenience declaration of IParticleContainer.
Definition
xAOD/xAODBase/xAODBase/IParticleContainer.h:32
Generated on
for ATLAS Offline Software by
1.17.0