ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
DerivationFramework
DerivationFrameworkHiggs
src
SkimmingToolHIGG5VBF.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3
*/
4
6
// SkimmingToolHIGG5VBF.cxx, (c) ATLAS Detector software
8
// Author: Yasu Okumura (yasuyuki.okumura@cern.ch)
9
// Based on DerivationFramework::SkimmingToolExample and DerivationFramework::SkimmingToolHIGG2
10
11
#include "
DerivationFrameworkHiggs/SkimmingToolHIGG5VBF.h
"
12
#include "
AthContainers/ConstAccessor.h
"
13
#include <vector>
14
#include <string>
15
16
#include "CLHEP/Units/SystemOfUnits.h"
17
18
// Constructor
19
DerivationFramework::SkimmingToolHIGG5VBF::SkimmingToolHIGG5VBF
(
const
std::string& t,
20
const
std::string& n,
21
const
IInterface* p) :
22
base_class(t, n, p),
23
m_trigDecisionTool
(
"Trig::TrigDecisionTool/TrigDecisionTool"
),
24
m_ntot
(0),
25
m_npass
(0)
26
{
27
28
// for jet multiplicity requirement
29
declareProperty(
"JetContainerKey"
,
m_jetSGKey
=
"AntiKt4EMTopoJets"
);
30
declareProperty(
"CalibedJetMomentKey"
,
m_calibedJetMomKey
=
"DFCommonJets_Calib"
);
31
32
// for jet multiplicity
33
declareProperty(
"ReqNAllJets"
,
m_reqNAllJets
=
false
);
34
declareProperty(
"NumberOfAllJets"
,
m_nAllJets
=4);
35
declareProperty(
"AllJetPtCut"
,
m_allJetPtCut
=40.*CLHEP::GeV);
36
declareProperty(
"AllJetEtaCut"
,
m_allJetEtaCut
=4.9);
37
38
declareProperty(
"ReqNCentralJets"
,
m_reqNCentralJets
=
false
);
39
declareProperty(
"NumberOfCentralJets"
,
m_nCentralJets
=2);
40
declareProperty(
"CentralJetPtCut"
,
m_centralJetPtCut
=40.*CLHEP::GeV);
41
declareProperty(
"CentralJetEtaCut"
,
m_centralJetEtaCut
=2.6);
42
43
// for trigger requirement
44
declareProperty(
"ReqTrigger"
,
m_reqTrigger
=
false
);
45
declareProperty(
"Triggers"
,
m_triggers
=std::vector<std::string>());
46
47
// for Mjj requirement ()
48
declareProperty(
"ReqVBFMjj"
,
m_reqVbfMjj
=
false
);
// logical "ORed" with ReqPhoton
49
declareProperty(
"MjjCut"
,
m_vbfMjjCut
=0.*CLHEP::GeV);
50
51
declareProperty(
"DoDebug"
,
m_debug
=
false
);
52
53
// photon requirement (p. rose)
54
declareProperty(
"PhotonContainerKey"
,
m_phSGKey
=
"Photons"
);
55
declareProperty(
"ReqPhoton"
,
m_reqPh
=
false
);
// logical "ORed" with ReqVBFMjj
56
declareProperty(
"PhotonPtCut"
,
m_phPtCut
=0.*CLHEP::GeV);
57
declareProperty(
"CentralPhotonEtaCut"
,
m_centralPhEtaCut
=2.6);
58
59
}
60
61
// Destructor
62
DerivationFramework::SkimmingToolHIGG5VBF::~SkimmingToolHIGG5VBF
() {
63
}
64
65
// Athena initialize and finalize
66
StatusCode
DerivationFramework::SkimmingToolHIGG5VBF::initialize
()
67
{
68
ATH_MSG_VERBOSE
(
"initialize() ..."
);
69
70
// trigger decision tool
71
if
(
m_trigDecisionTool
.retrieve(DisableTool{!m_reqTrigger}).isFailure()) {
72
ATH_MSG_FATAL
(
"Failed to retrieve tool: "
<<
m_trigDecisionTool
);
73
return
StatusCode::FAILURE;
74
}
75
ATH_MSG_INFO
(
"Retrieved tool: "
<<
m_trigDecisionTool
);
76
77
return
StatusCode::SUCCESS;
78
}
79
80
StatusCode
DerivationFramework::SkimmingToolHIGG5VBF::finalize
()
81
{
82
ATH_MSG_VERBOSE
(
"finalize() ..."
);
83
ATH_MSG_INFO
(
"Processed "
<<
m_ntot
<<
" events, "
<<
m_npass
<<
" events passed filter "
);
84
return
StatusCode::SUCCESS;
85
}
86
87
// The filter itself
88
bool
DerivationFramework::SkimmingToolHIGG5VBF::eventPassesFilter
(
const
EventContext&
/*ctx*/
)
const
89
{
90
m_ntot
++;
91
bool
acceptEvent(
true
);
92
93
StatusCode
sc
(StatusCode::SUCCESS);
94
95
bool
isTriggerFired(
m_triggers
.empty());
96
for
(
unsigned
int
i(0); i<
m_triggers
.size(); i++) {
97
if
(
m_trigDecisionTool
->isPassed(
m_triggers
.at(i))) {
98
isTriggerFired =
true
;
99
break
;
100
}
101
}
102
103
// (1) Count Jet Multiplicity
104
std::vector<TLorentzVector> goodAllJets;
105
std::vector<TLorentzVector> goodCentralJets;
106
107
const
xAOD::JetContainer
*jets(
nullptr
);
108
ATH_CHECK
(evtStore()->retrieve(jets,
m_jetSGKey
),
false
);
109
xAOD::JetContainer::const_iterator
jet_itr(jets->begin());
110
xAOD::JetContainer::const_iterator
jet_end(jets->end());
111
for
(; jet_itr != jet_end; ++jet_itr) {
112
TLorentzVector jetP4 =
getCalibedJets
( (*jet_itr) );
113
if
(this->
checkAllJetQuality
(jetP4)) { goodAllJets.push_back(jetP4); }
114
if
(this->
checkCentralJetQuality
(jetP4)) { goodCentralJets.push_back(jetP4); }
115
}
116
117
// (2) evaluate maximum Mjj in the event
118
double
maxM = 0.;
119
for
(
unsigned
int
jet_i = 0; jet_i<goodAllJets.size(); jet_i++) {
120
const
TLorentzVector& iP4 = goodAllJets.at(jet_i);
121
122
for
(
unsigned
int
jet_k=jet_i+1; jet_k<goodAllJets.size(); jet_k++) {
123
const
TLorentzVector& kP4 = goodAllJets.at(jet_k);
124
125
const
TLorentzVector jjP4 = iP4 + kP4;
126
const
double
jjM = jjP4.M();
127
128
if
(maxM<jjM) {maxM=jjM;}
129
}
130
}
131
132
//get max pt of any photon in the event (p. rose)
133
double
maxPhPt=0.;
134
if
(
m_reqPh
){
135
const
xAOD::PhotonContainer
*phots(
nullptr
);
136
ATH_CHECK
(evtStore()->retrieve(phots,
m_phSGKey
),
false
);
137
for
(
const
auto
* ph : *phots){
138
if
(abs(ph->eta())<
m_centralPhEtaCut
)
139
if
(ph->pt()>maxPhPt) maxPhPt = ph->pt();
140
}
//for
141
}
//if
142
143
144
145
const
bool
passNAllJet = (goodAllJets.size()>=
m_nAllJets
);
146
const
bool
passNCentralJet = (goodCentralJets.size()>=
m_nCentralJets
);
147
const
bool
passMjjCut = (maxM>
m_vbfMjjCut
);
148
const
bool
passPhPtCut = (maxPhPt>
m_phPtCut
);
149
150
if
(
m_reqNAllJets
) {
if
(not passNAllJet) {acceptEvent=
false
;} }
151
if
(
m_reqNCentralJets
) {
if
(not passNCentralJet) {acceptEvent=
false
;} }
152
//if (m_reqVbfMjj) { if (not passMjjCut) {acceptEvent=false;} }
153
if
(
m_reqTrigger
) {
if
(not isTriggerFired) {acceptEvent=
false
;} }
154
//vbf+gamma addition -- logical OR of mjj and phpt cut
155
if
(
m_reqVbfMjj
and not
m_reqPh
) {
if
(not passMjjCut) {acceptEvent=
false
;} }
156
if
(
m_reqPh
and not
m_reqVbfMjj
) {
if
(not passPhPtCut) {acceptEvent=
false
;} }
157
if
(
m_reqPh
and
m_reqVbfMjj
) {
if
(not (passMjjCut or passPhPtCut) ) {acceptEvent=
false
;} }
158
159
if
(acceptEvent) {
m_npass
++;}
160
161
if
(
m_debug
) {
162
printf(
"dbg> L%3d : event accepted [%s] "
163
"(NJets=%2d [%6s], NCentralJets=%2d [%6s] Mjj=%10.1f [%6s], Trigger [%6s]) \n"
,
164
__LINE__,
165
acceptEvent?
"Y"
:
"N"
,
166
(
int
)goodAllJets.size(), passNAllJet ?
"PASSED"
:
"FAILED"
,
167
(
int
)goodCentralJets.size(), passNCentralJet ?
"PASSED"
:
"FAILED"
,
168
maxM, passMjjCut ?
"PASSED"
:
"FAILED"
,
169
isTriggerFired ?
"PASSED"
:
"FAILED"
170
);
171
}
172
173
return
acceptEvent;
174
}
175
176
bool
DerivationFramework::SkimmingToolHIGG5VBF::checkAllJetQuality
(
const
TLorentzVector&
jet
)
const
177
{
178
if
(
jet
.Pt()<
m_allJetPtCut
)
return
false
;
179
if
(fabs(
jet
.Eta())>
m_allJetEtaCut
)
return
false
;
180
181
return
true
;
182
}
183
184
bool
DerivationFramework::SkimmingToolHIGG5VBF::checkCentralJetQuality
(
const
TLorentzVector&
jet
)
const
185
{
186
if
(
jet
.Pt()<
m_centralJetPtCut
)
return
false
;
187
if
(fabs(
jet
.Eta())>
m_centralJetEtaCut
)
return
false
;
188
189
return
true
;
190
}
191
192
TLorentzVector
193
DerivationFramework::SkimmingToolHIGG5VBF::getCalibedJets
(
const
xAOD::Jet
*
jet
)
const
194
{
195
TLorentzVector
rc
;
196
197
if
(!
jet
)
return
rc
;
198
199
SG::ConstAccessor<float>
ptAcc(
m_calibedJetMomKey
+
"_pt"
);
200
SG::ConstAccessor<float>
etaAcc(
m_calibedJetMomKey
+
"_eta"
);
201
SG::ConstAccessor<float>
phiAcc(
m_calibedJetMomKey
+
"_phi"
);
202
SG::ConstAccessor<float>
mAcc(
m_calibedJetMomKey
+
"_m"
);
203
const
float
& pt =ptAcc(*
jet
);
204
const
float
&
eta
=etaAcc(*
jet
);
205
const
float
&
phi
=phiAcc(*
jet
);
206
const
float
& m =mAcc(*
jet
);
207
208
rc
.SetPtEtaPhiM(pt,
eta
,
phi
, m);
209
210
return
rc
;
211
}
eta
Scalar eta() const
pseudorapidity method
Definition
AmgMatrixBasePlugin.h:83
phi
Scalar phi() const
phi method
Definition
AmgMatrixBasePlugin.h:67
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition
AthMsgStreamMacros.h:34
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition
AthMsgStreamMacros.h:28
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
sc
static Double_t sc
Definition
LArPhysWaveHECTool.cxx:37
rc
static Double_t rc
Definition
LArPhysWaveHECTool.cxx:37
SkimmingToolHIGG5VBF.h
DataVector< xAOD::Jet_v1 >::const_iterator
DataModel_detail::const_iterator< DataVector > const_iterator
Definition
DataVector.h:838
DerivationFramework::SkimmingToolHIGG5VBF::m_jetSGKey
std::string m_jetSGKey
Definition
SkimmingToolHIGG5VBF.h:58
DerivationFramework::SkimmingToolHIGG5VBF::m_calibedJetMomKey
std::string m_calibedJetMomKey
Definition
SkimmingToolHIGG5VBF.h:59
DerivationFramework::SkimmingToolHIGG5VBF::m_reqNCentralJets
bool m_reqNCentralJets
Definition
SkimmingToolHIGG5VBF.h:67
DerivationFramework::SkimmingToolHIGG5VBF::m_triggers
std::vector< std::string > m_triggers
Definition
SkimmingToolHIGG5VBF.h:74
DerivationFramework::SkimmingToolHIGG5VBF::m_reqPh
bool m_reqPh
Definition
SkimmingToolHIGG5VBF.h:86
DerivationFramework::SkimmingToolHIGG5VBF::m_centralPhEtaCut
double m_centralPhEtaCut
Definition
SkimmingToolHIGG5VBF.h:88
DerivationFramework::SkimmingToolHIGG5VBF::getCalibedJets
TLorentzVector getCalibedJets(const xAOD::Jet *jet) const
Definition
SkimmingToolHIGG5VBF.cxx:193
DerivationFramework::SkimmingToolHIGG5VBF::m_phPtCut
double m_phPtCut
Definition
SkimmingToolHIGG5VBF.h:87
DerivationFramework::SkimmingToolHIGG5VBF::m_phSGKey
std::string m_phSGKey
Definition
SkimmingToolHIGG5VBF.h:85
DerivationFramework::SkimmingToolHIGG5VBF::finalize
virtual StatusCode finalize() override
Definition
SkimmingToolHIGG5VBF.cxx:80
DerivationFramework::SkimmingToolHIGG5VBF::m_allJetEtaCut
double m_allJetEtaCut
Definition
SkimmingToolHIGG5VBF.h:65
DerivationFramework::SkimmingToolHIGG5VBF::m_debug
bool m_debug
Definition
SkimmingToolHIGG5VBF.h:51
DerivationFramework::SkimmingToolHIGG5VBF::m_centralJetPtCut
double m_centralJetPtCut
Definition
SkimmingToolHIGG5VBF.h:69
DerivationFramework::SkimmingToolHIGG5VBF::SkimmingToolHIGG5VBF
SkimmingToolHIGG5VBF(const std::string &t, const std::string &n, const IInterface *p)
Constructor with parameters.
Definition
SkimmingToolHIGG5VBF.cxx:19
DerivationFramework::SkimmingToolHIGG5VBF::~SkimmingToolHIGG5VBF
~SkimmingToolHIGG5VBF()
Destructor.
Definition
SkimmingToolHIGG5VBF.cxx:62
DerivationFramework::SkimmingToolHIGG5VBF::m_npass
std::atomic< unsigned int > m_npass
Definition
SkimmingToolHIGG5VBF.h:56
DerivationFramework::SkimmingToolHIGG5VBF::m_allJetPtCut
double m_allJetPtCut
Definition
SkimmingToolHIGG5VBF.h:64
DerivationFramework::SkimmingToolHIGG5VBF::initialize
virtual StatusCode initialize() override
Definition
SkimmingToolHIGG5VBF.cxx:66
DerivationFramework::SkimmingToolHIGG5VBF::eventPassesFilter
virtual bool eventPassesFilter(const EventContext &ctx) const override
Check that the current event passes this filter.
Definition
SkimmingToolHIGG5VBF.cxx:88
DerivationFramework::SkimmingToolHIGG5VBF::m_reqVbfMjj
bool m_reqVbfMjj
Definition
SkimmingToolHIGG5VBF.h:77
DerivationFramework::SkimmingToolHIGG5VBF::checkCentralJetQuality
bool checkCentralJetQuality(const TLorentzVector &jet) const
Definition
SkimmingToolHIGG5VBF.cxx:184
DerivationFramework::SkimmingToolHIGG5VBF::m_nCentralJets
unsigned int m_nCentralJets
Definition
SkimmingToolHIGG5VBF.h:68
DerivationFramework::SkimmingToolHIGG5VBF::m_nAllJets
unsigned int m_nAllJets
Definition
SkimmingToolHIGG5VBF.h:63
DerivationFramework::SkimmingToolHIGG5VBF::m_reqTrigger
bool m_reqTrigger
Definition
SkimmingToolHIGG5VBF.h:73
DerivationFramework::SkimmingToolHIGG5VBF::m_reqNAllJets
bool m_reqNAllJets
Definition
SkimmingToolHIGG5VBF.h:62
DerivationFramework::SkimmingToolHIGG5VBF::m_ntot
std::atomic< unsigned int > m_ntot
Definition
SkimmingToolHIGG5VBF.h:55
DerivationFramework::SkimmingToolHIGG5VBF::m_vbfMjjCut
double m_vbfMjjCut
Definition
SkimmingToolHIGG5VBF.h:78
DerivationFramework::SkimmingToolHIGG5VBF::checkAllJetQuality
bool checkAllJetQuality(const TLorentzVector &jet) const
Definition
SkimmingToolHIGG5VBF.cxx:176
DerivationFramework::SkimmingToolHIGG5VBF::m_centralJetEtaCut
double m_centralJetEtaCut
Definition
SkimmingToolHIGG5VBF.h:70
DerivationFramework::SkimmingToolHIGG5VBF::m_trigDecisionTool
ToolHandle< Trig::TrigDecisionTool > m_trigDecisionTool
Definition
SkimmingToolHIGG5VBF.h:53
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition
ConstAccessor.h:55
jet
Definition
JetCalibTools_PlotJESFactors.cxx:23
xAOD::Jet
Jet_v1 Jet
Definition of the current "jet version".
Definition
Event/xAOD/xAODJet/xAODJet/Jet.h:17
xAOD::PhotonContainer
PhotonContainer_v1 PhotonContainer
Definition of the current "photon container version".
Definition
Event/xAOD/xAODEgamma/xAODEgamma/PhotonContainer.h:17
xAOD::JetContainer
JetContainer_v1 JetContainer
Definition of the current "jet container version".
Definition
JetContainer.h:17
Generated on
for ATLAS Offline Software by
1.17.0