ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
Algorithms
EventSelectionAlgorithms
Root
MissingETPlusTransverseMassSelectorAlg.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
6
7
#include "
EventSelectionAlgorithms/MissingETPlusTransverseMassSelectorAlg.h
"
8
9
namespace
CP
{
10
11
MissingETPlusTransverseMassSelectorAlg::MissingETPlusTransverseMassSelectorAlg
(
const
std::string &
name
, ISvcLocator *pSvcLocator)
12
:
EL
::
AnaAlgorithm
(
name
, pSvcLocator)
13
{}
14
15
StatusCode
MissingETPlusTransverseMassSelectorAlg::initialize
() {
16
ANA_CHECK
(
m_metHandle
.initialize(
m_systematicsList
));
17
ANA_CHECK
(
m_electronsHandle
.initialize(
m_systematicsList
,
SG::AllowEmpty
));
18
ANA_CHECK
(
m_electronSelection
.initialize(
m_systematicsList
,
m_electronsHandle
,
SG::AllowEmpty
));
19
ANA_CHECK
(
m_muonsHandle
.initialize(
m_systematicsList
,
SG::AllowEmpty
));
20
ANA_CHECK
(
m_muonSelection
.initialize(
m_systematicsList
,
m_muonsHandle
,
SG::AllowEmpty
));
21
ANA_CHECK
(
m_eventInfoHandle
.initialize(
m_systematicsList
));
22
23
ANA_CHECK
(
m_preselection
.initialize(
m_systematicsList
,
m_eventInfoHandle
,
SG::AllowEmpty
));
24
ANA_CHECK
(
m_decoration
.initialize(
m_systematicsList
,
m_eventInfoHandle
));
25
ANA_CHECK
(
m_systematicsList
.initialize());
26
27
m_signEnum
=
SignEnum::stringToOperator
.at(
m_sign
);
28
29
return
StatusCode::SUCCESS;
30
}
31
32
StatusCode
MissingETPlusTransverseMassSelectorAlg::execute
(
const
EventContext& ctx) {
33
// accessors
34
static
const
SG::ConstAccessor<float>
acc_pt_dressed(
"pt_dressed"
);
35
static
const
SG::ConstAccessor<float>
acc_phi_dressed(
"phi_dressed"
);
36
37
for
(
const
auto
&sys :
m_systematicsList
.systematicsVector()) {
38
// retrieve the EventInfo
39
const
xAOD::EventInfo
*evtInfo =
nullptr
;
40
ANA_CHECK
(
m_eventInfoHandle
.retrieve(evtInfo, sys, ctx));
41
42
// default-decorate EventInfo
43
m_decoration
.setBool(*evtInfo, 0, sys);
44
45
// check the preselection
46
if
(
m_preselection
&& !
m_preselection
.getBool(*evtInfo, sys))
47
continue
;
48
49
// retrieve the MET container
50
const
xAOD::MissingETContainer
*
met
=
nullptr
;
51
ANA_CHECK
(
m_metHandle
.retrieve(
met
, sys, ctx));
52
// retrieve the electron container
53
const
xAOD::IParticleContainer
*electrons =
nullptr
;
54
if
(
m_electronsHandle
)
55
ANA_CHECK
(
m_electronsHandle
.retrieve(electrons, sys, ctx));
56
// retrieve the electron container
57
const
xAOD::IParticleContainer
*muons =
nullptr
;
58
if
(
m_muonsHandle
)
59
ANA_CHECK
(
m_muonsHandle
.retrieve(muons, sys, ctx));
60
61
// compute the W boson transverse mass
62
if
((*
met
)[
m_metTerm
.value()] ==
nullptr
) {
63
ANA_MSG_ERROR
(
"The MET term "
<<
m_metTerm
.value() <<
" doesn't exist! Aborting."
);
64
return
StatusCode::FAILURE;
65
}
66
float
etmiss_pt = (*met)[
m_metTerm
.value()]->met();
67
float
etmiss_phi = (*met)[
m_metTerm
.value()]->phi();
68
float
lep_pt, lep_phi;
69
int
lep_count = 0;
70
71
if
(
m_electronsHandle
) {
72
for
(
const
xAOD::IParticle
*el : *electrons) {
73
if
(!
m_electronSelection
||
m_electronSelection
.getBool(*el, sys)){
74
if
(
m_useDressedProperties
) {
75
lep_pt = acc_pt_dressed(*el);
76
lep_phi = acc_phi_dressed(*el);
77
}
else
{
78
lep_pt = el->pt();
79
lep_phi = el->phi();
80
}
81
lep_count++;
82
break
;
83
}
84
}
85
}
86
if
(
m_muonsHandle
) {
87
for
(
const
xAOD::IParticle
*mu : *muons) {
88
if
(!
m_muonSelection
||
m_muonSelection
.getBool(*mu, sys)) {
89
if
(
m_useDressedProperties
) {
90
lep_pt = acc_pt_dressed(*mu);
91
lep_phi = acc_phi_dressed(*mu);
92
}
else
{
93
lep_pt = mu->pt();
94
lep_phi = mu->phi();
95
}
96
lep_count++;
97
break
;
98
}
99
}
100
}
101
102
if
(lep_count == 0){
103
ATH_MSG_ERROR
(
"No charged lepton in the event, cannot compute MWT!"
);
104
return
StatusCode::FAILURE;
105
}
106
107
if
(lep_count > 1){
108
ATH_MSG_ERROR
(
"More than one lepton is associated with this event - cannot determine which is the W decay lepton."
);
109
return
StatusCode::FAILURE;
110
}
111
112
float
mwt = sqrt(2. * lep_pt * etmiss_pt * (1. - std::cos(lep_phi - etmiss_phi)));
113
114
// compute the sum
115
float
sum = etmiss_pt + mwt;
116
117
// calculate decision
118
bool
decision =
SignEnum::checkValue
(
m_sumref
.value(),
m_signEnum
, sum);
119
m_decoration
.setBool(*evtInfo, decision, sys);
120
}
121
return
StatusCode::SUCCESS;
122
}
123
}
// namespace CP
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition
AthMsgStreamMacros.h:33
ANA_MSG_ERROR
#define ANA_MSG_ERROR(xmsg)
Macro printing error messages.
Definition
Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:294
ANA_CHECK
#define ANA_CHECK(EXP)
check whether the given expression was successful
Definition
Control/AthToolSupport/AsgMessaging/AsgMessaging/MessageCheck.h:324
MissingETPlusTransverseMassSelectorAlg.h
CP::MissingETPlusTransverseMassSelectorAlg::m_systematicsList
CP::SysListHandle m_systematicsList
the systematics
Definition
MissingETPlusTransverseMassSelectorAlg.h:54
CP::MissingETPlusTransverseMassSelectorAlg::MissingETPlusTransverseMassSelectorAlg
MissingETPlusTransverseMassSelectorAlg(const std::string &name, ISvcLocator *pSvcLocator)
the standard constructor
Definition
MissingETPlusTransverseMassSelectorAlg.cxx:11
CP::MissingETPlusTransverseMassSelectorAlg::initialize
virtual StatusCode initialize() override
Definition
MissingETPlusTransverseMassSelectorAlg.cxx:15
CP::MissingETPlusTransverseMassSelectorAlg::m_muonSelection
CP::SysReadSelectionHandle m_muonSelection
the muon selection
Definition
MissingETPlusTransverseMassSelectorAlg.h:72
CP::MissingETPlusTransverseMassSelectorAlg::m_muonsHandle
CP::SysReadHandle< xAOD::IParticleContainer > m_muonsHandle
the muon input handle
Definition
MissingETPlusTransverseMassSelectorAlg.h:67
CP::MissingETPlusTransverseMassSelectorAlg::m_decoration
CP::SysWriteSelectionHandle m_decoration
the output selection decoration
Definition
MissingETPlusTransverseMassSelectorAlg.h:95
CP::MissingETPlusTransverseMassSelectorAlg::m_eventInfoHandle
CP::SysReadHandle< xAOD::EventInfo > m_eventInfoHandle
the event info handle
Definition
MissingETPlusTransverseMassSelectorAlg.h:85
CP::MissingETPlusTransverseMassSelectorAlg::m_signEnum
SignEnum::ComparisonOperator m_signEnum
the operator version of the comparison (>, <, etc)
Definition
MissingETPlusTransverseMassSelectorAlg.h:46
CP::MissingETPlusTransverseMassSelectorAlg::m_metTerm
Gaudi::Property< std::string > m_metTerm
the MET term
Definition
MissingETPlusTransverseMassSelectorAlg.h:82
CP::MissingETPlusTransverseMassSelectorAlg::m_metHandle
CP::SysReadHandle< xAOD::MissingETContainer > m_metHandle
the MET handle
Definition
MissingETPlusTransverseMassSelectorAlg.h:77
CP::MissingETPlusTransverseMassSelectorAlg::m_sign
Gaudi::Property< std::string > m_sign
the comparison (GT, LT, etc)
Definition
MissingETPlusTransverseMassSelectorAlg.h:43
CP::MissingETPlusTransverseMassSelectorAlg::m_useDressedProperties
Gaudi::Property< bool > m_useDressedProperties
use dressed kinematics
Definition
MissingETPlusTransverseMassSelectorAlg.h:49
CP::MissingETPlusTransverseMassSelectorAlg::m_electronSelection
CP::SysReadSelectionHandle m_electronSelection
the electrons selection
Definition
MissingETPlusTransverseMassSelectorAlg.h:62
CP::MissingETPlusTransverseMassSelectorAlg::m_preselection
CP::SysReadSelectionHandle m_preselection
the preselection
Definition
MissingETPlusTransverseMassSelectorAlg.h:90
CP::MissingETPlusTransverseMassSelectorAlg::m_sumref
Gaudi::Property< float > m_sumref
the MET+MWT threshold against which to compare
Definition
MissingETPlusTransverseMassSelectorAlg.h:40
CP::MissingETPlusTransverseMassSelectorAlg::m_electronsHandle
CP::SysReadHandle< xAOD::IParticleContainer > m_electronsHandle
the electron input handle
Definition
MissingETPlusTransverseMassSelectorAlg.h:57
EL::AnaAlgorithm::AnaAlgorithm
AnaAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
constructor with parameters
Definition
AnaAlgorithm.cxx:40
EL::AnaAlgorithm::execute
virtual::StatusCode execute()
execute this algorithm
Definition
AnaAlgorithm.cxx:315
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition
ConstAccessor.h:55
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition
Event/xAOD/xAODBase/xAODBase/IParticle.h:41
CP
Select isolated Photons, Electrons and Muons.
Definition
Control/xAODRootAccess/xAODRootAccess/TEvent.h:27
EL
This module defines the arguments passed from the BATCH driver to the BATCH worker.
Definition
AsgComponentFactories.h:16
SG::AllowEmpty
@ AllowEmpty
Definition
StoreGate/StoreGate/VarHandleKey.h:27
SignEnum::checkValue
bool checkValue(T reference, ComparisonOperator sign, T test)
the comparison test given the specified sign and two test values
Definition
SignEnums.h:37
SignEnum::stringToOperator
static const std::map< std::string, ComparisonOperator > stringToOperator
the map between user inputs and comparison operators
Definition
SignEnums.h:27
met
Definition
IMETSignificance.h:24
xAOD::name
name
Definition
TriggerMenuJson_v1.cxx:29
xAOD::EventInfo
EventInfo_v1 EventInfo
Definition of the latest event info version.
Definition
IEventInfoCnvTool.h:16
xAOD::MissingETContainer
MissingETContainer_v1 MissingETContainer
Definition
Event/xAOD/xAODMissingET/xAODMissingET/MissingETContainer.h:16
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