ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Reconstruction
Jet
JetRec
src
JetSoftDropTools.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
JetRec/JetSoftDropTools.h
"
6
7
#include "fastjet/PseudoJet.hh"
8
#include "fastjet/tools/Filter.hh"
9
#include "fastjet/contrib/SoftDrop.hh"
10
#include "fastjet/contrib/RecursiveSoftDrop.hh"
11
#include "fastjet/contrib/BottomUpSoftDrop.hh"
12
#include "fastjet/Selector.hh"
13
14
#include "
JetEDM/PseudoJetVector.h
"
15
16
#include "
JetRec/PseudoJetTranslator.h
"
17
18
using namespace
JetGrooming
;
19
20
namespace
{
21
// tool implementing the operations to convert fastjet::PseudoJet -> xAOD::Jet
22
const
static
PseudoJetTranslator
s_pjTranslator(
false
,
false
);
// false => do not save jet areas
23
24
25
27
template
<
typename
SDHELPER>
28
xAOD::Jet
& buildAndInsertSDJet(SDHELPER& sdhelper,
const
xAOD::Jet
& parentjet,
const
PseudoJetContainer
& inpjcont,
xAOD::JetContainer
& outcont,
PseudoJetVector
& groomedpjvec ){
29
30
const
static
SG::Accessor<const fastjet::PseudoJet*>
s_pjAcc(
"PseudoJet"
);
31
const
static
SG::ConstAccessor<const fastjet::PseudoJet*>
s_pjConstAcc(
"PseudoJet"
);
32
33
// retrieve the PseudoJet from the parent :
34
const
fastjet::PseudoJet& parentPJ = *s_pjConstAcc(parentjet);
35
36
// call the sdhelper to build the groomed PSeudoJet
37
fastjet::PseudoJet groomedPJ = sdhelper(parentPJ);
38
39
// build the xAOD::Jet from the PseudoJet, and put it in the container
40
xAOD::Jet
&
jet
= s_pjTranslator.translate(groomedPJ, inpjcont, outcont, parentjet);
41
42
// now assign the groomedPJ to its vector
43
// Note: the caller (JetGroomer) guarantees groomedpjvec has the correct size,
44
// however, it is not 100% sure (?) that parentjet.index()==jet.index(), so we can't assign before
45
groomedpjvec[
jet
.index()] = groomedPJ;
46
47
// decorate with the pointer to the PJ we keep in the evt store.
48
// (the decoration is done in the PseudoJetTranslator but we have to redo-it here since we must point to
49
// the instance instance inside groomedpjvec)
50
s_pjAcc(
jet
) = & groomedpjvec[
jet
.index()];
51
52
return
jet
;
53
}
54
}
55
56
// a shortcut to check variable range with a 1-liner (We can't use CheckedProperty...)
57
#define CHECK_VAR_RANGE( name, var, expr ) \
58
if( ! ( expr ) ) { \
59
ATH_MSG_ERROR("Property "<< name << " = "<< var << " out of range"); \
60
return StatusCode::SUCCESS; }
61
62
//**********************************************************************
63
64
StatusCode
SoftDrop::initialize
() {
65
ATH_CHECK
(
JetGroomer::initialize
() );
66
67
CHECK_VAR_RANGE
(
"ZCut"
,
m_zcut
, (
m_zcut
>=0)&&(
m_zcut
<=10.) );
68
CHECK_VAR_RANGE
(
"beta"
,
m_beta
, (
m_beta
>=0)&&(
m_beta
<=10.) );
69
CHECK_VAR_RANGE
(
"R0"
,
m_R0
, (
m_R0
>=0)&&(
m_R0
<=10.) );
70
71
return
StatusCode::SUCCESS;
72
}
73
74
75
//**********************************************************************
76
StatusCode
RecSoftDrop::initialize
() {
77
ATH_CHECK
(
SoftDrop::initialize
() );
78
CHECK_VAR_RANGE
(
"N"
,
m_N
, (
m_zcut
>-1) );
79
return
StatusCode::SUCCESS;
80
}
81
82
83
void
SoftDrop::insertGroomedJet
(
const
xAOD::Jet
& parentjet,
const
PseudoJetContainer
& inpjcont,
xAOD::JetContainer
& outcont,
PseudoJetVector
& groomedpjvec)
const
{
84
85
//configure soft drop tool
86
// see http://fastjet.hepforge.org/svn/contrib/contribs/RecursiveTools/tags/1.0.0/SoftDrop.hh
87
fastjet::contrib::SoftDrop softdropper(
m_beta
,
m_zcut
,
m_R0
);
88
89
xAOD::Jet
&
jet
= buildAndInsertSDJet(softdropper,
90
parentjet, inpjcont, outcont, groomedpjvec);
91
92
if
(
m_saveSDatt
) {
93
setSoftDropAttributes
(
jet
, groomedpjvec[
jet
.index()].pieces().size() );
94
}
95
}
96
97
void
SoftDrop::setSoftDropAttributes
(
xAOD::Jet
& groomedjet,
int
nsdsubjets)
const
{
98
groomedjet.
setAttribute
<
float
>(
"ZCut"
,
m_zcut
);
99
groomedjet.
setAttribute
<
float
>(
"SoftDropBeta"
,
m_beta
);
100
groomedjet.
setAttribute
<
float
>(
"SoftDropR0"
,
m_R0
);
101
groomedjet.
setAttribute
<
int
>(
"NSoftDropSubjets"
, nsdsubjets);
102
}
103
104
105
106
107
//**********************************************************************
108
109
void
RecSoftDrop::insertGroomedJet
(
const
xAOD::Jet
& parentjet,
const
PseudoJetContainer
& inpjcont,
xAOD::JetContainer
& outcont,
PseudoJetVector
& groomedpjvec)
const
{
110
111
//configure recursive soft drop tool
112
//https://fastjet.hepforge.org/trac/browser/contrib/contribs/RecursiveTools/tags/2.0.0-beta1
113
fastjet::contrib::RecursiveSoftDrop softdropper(
m_beta
,
m_zcut
,
m_N
,
m_R0
);
114
115
xAOD::Jet
&
jet
= buildAndInsertSDJet(softdropper,
116
parentjet, inpjcont, outcont, groomedpjvec);
117
118
if
(
m_saveSDatt
) {
119
setSoftDropAttributes
(
jet
, groomedpjvec[
jet
.index()].pieces().size() );
120
jet
.setAttribute<
int
>(
"RSoftDropN"
,
m_N
);
121
}
122
}
123
124
125
126
//**********************************************************************
127
void
BottomUpSoftDrop::insertGroomedJet
(
const
xAOD::Jet
& parentjet,
const
PseudoJetContainer
& inpjcont,
xAOD::JetContainer
& outcont,
PseudoJetVector
& groomedpjvec)
const
{
128
129
//configure recursive soft drop tool
130
//https://fastjet.hepforge.org/trac/browser/contrib/contribs/RecursiveTools/tags/2.0.0-beta1
131
fastjet::contrib::BottomUpSoftDrop softdropper(
m_beta
,
m_zcut
,
m_R0
);
132
133
xAOD::Jet
&
jet
= buildAndInsertSDJet(softdropper,
134
parentjet, inpjcont, outcont, groomedpjvec);
135
136
if
(
m_saveSDatt
) {
137
setSoftDropAttributes
(
jet
, groomedpjvec[
jet
.index()].pieces().size() );
138
}
139
}
140
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
PseudoJetVector
std::vector< fastjet::PseudoJet > PseudoJetVector
Definition
JetConstituentFiller.cxx:17
CHECK_VAR_RANGE
#define CHECK_VAR_RANGE(name, var, expr)
Definition
JetSoftDropTools.cxx:57
JetSoftDropTools.h
PseudoJetTranslator.h
PseudoJetVector.h
JetGrooming::BottomUpSoftDrop::insertGroomedJet
virtual void insertGroomedJet(const xAOD::Jet &, const PseudoJetContainer &, xAOD::JetContainer &, PseudoJetVector &) const override final
Definition
JetSoftDropTools.cxx:127
JetGrooming::JetGroomer::initialize
virtual StatusCode initialize() override
Dummy implementation of the initialisation function.
Definition
JetGroomer.cxx:16
JetGrooming::RecSoftDrop::m_N
Gaudi::Property< int > m_N
Definition
JetSoftDropTools.h:74
JetGrooming::RecSoftDrop::initialize
StatusCode initialize() override final
Dummy implementation of the initialisation function.
Definition
JetSoftDropTools.cxx:76
JetGrooming::RecSoftDrop::insertGroomedJet
virtual void insertGroomedJet(const xAOD::Jet &, const PseudoJetContainer &, xAOD::JetContainer &, PseudoJetVector &) const override final
Definition
JetSoftDropTools.cxx:109
JetGrooming::SoftDrop::m_R0
Gaudi::Property< float > m_R0
Definition
JetSoftDropTools.h:53
JetGrooming::SoftDrop::insertGroomedJet
virtual void insertGroomedJet(const xAOD::Jet &, const PseudoJetContainer &, xAOD::JetContainer &, PseudoJetVector &) const override
Definition
JetSoftDropTools.cxx:83
JetGrooming::SoftDrop::m_beta
Gaudi::Property< float > m_beta
Definition
JetSoftDropTools.h:52
JetGrooming::SoftDrop::setSoftDropAttributes
void setSoftDropAttributes(xAOD::Jet &groomedjet, int nsdsubjets) const
Definition
JetSoftDropTools.cxx:97
JetGrooming::SoftDrop::initialize
StatusCode initialize() override
Dummy implementation of the initialisation function.
Definition
JetSoftDropTools.cxx:64
JetGrooming::SoftDrop::m_saveSDatt
Gaudi::Property< bool > m_saveSDatt
Definition
JetSoftDropTools.h:55
JetGrooming::SoftDrop::m_zcut
Gaudi::Property< float > m_zcut
Definition
JetSoftDropTools.h:51
PseudoJetContainer
Definition
PseudoJetContainer.h:48
PseudoJetTranslator
Definition
PseudoJetTranslator.h:12
SG::Accessor
Helper class to provide type-safe access to aux data.
Definition
Control/AthContainers/AthContainers/Accessor.h:68
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition
ConstAccessor.h:55
xAOD::Jet_v1::setAttribute
void setAttribute(const std::string &name, const T &v)
JetGrooming
Definition
JetGroomer.h:33
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::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