ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
AnalysisCommon
AssociationUtils
AssociationUtils
OverlapDecorationHelper.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#ifndef ASSOCIATIONUTILS_OVERLAPDECORATIONHELPER_H
6
#define ASSOCIATIONUTILS_OVERLAPDECORATIONHELPER_H
7
8
// EDM includes
9
#include "
xAODBase/IParticleContainer.h
"
10
11
// Columnar includes
12
#include "
ColumnarCore/ColumnAccessor.h
"
13
#include "
ColumnarCore/ColumnarTool.h
"
14
#include "
ColumnarCore/ObjectRange.h
"
15
16
// Local includes
17
#include "
AssociationUtils/OverlapRemovalDefs.h
"
18
19
namespace
ORUtils
20
{
21
31
template
<columnar::ContainerIdConcept CI>
32
class
OverlapDecorationHelper
:
public
columnar::ColumnarTool
<>
33
{
34
35
public
:
36
44
OverlapDecorationHelper
(
const
std::string&
inputLabel
,
45
const
std::string&
outputLabel
,
46
bool
outputPassValue
=
false
);
47
49
bool
isInputObject
(
columnar::ObjectId<CI>
obj)
const
;
50
52
bool
isRejectedObject
(
columnar::ObjectId<CI>
obj)
const
;
53
55
bool
isSurvivingObject
(
columnar::ObjectId<CI>
obj)
const
;
56
58
char
getObjectPriority
(
columnar::ObjectId<CI>
obj)
const
;
59
61
void
setOverlapDecoration
(
columnar::ObjectId<CI>
obj,
bool
result)
const
;
62
64
void
setObjectPass
(
columnar::ObjectId<CI>
obj)
const
;
65
67
void
setObjectFail
(
columnar::ObjectId<CI>
obj)
const
;
68
72
bool
isDecorated
(
columnar::ObjectRange<CI>
container)
const
;
73
76
void
initializeDecorations
(
columnar::ObjectRange<CI>
container)
const
;
77
79
void
resetDecorations
(
columnar::ObjectRange<CI>
container)
const
;
80
81
private
:
82
84
bool
m_useInputLabel
;
85
87
columnar::ColumnAccessor<CI,char>
m_inputAccessor
;
89
columnar::ColumnDecorator<CI,char>
m_outputDecorator
;
90
92
bool
m_outputPassValue
;
93
94
};
// class OverlapDecorationHelper
95
96
//---------------------------------------------------------------------------
97
// Constructor
98
//---------------------------------------------------------------------------
99
template
<columnar::ContainerIdConcept CI>
100
OverlapDecorationHelper<CI>::
101
OverlapDecorationHelper
(
const
std::string&
inputLabel
,
102
const
std::string&
outputLabel
,
103
bool
outputPassValue
)
104
:
m_useInputLabel
(!
inputLabel
.
empty
()),
105
m_outputDecorator
(*this,
outputLabel
),
106
m_outputPassValue
(
outputPassValue
)
107
{
108
if
(
m_useInputLabel
)
109
resetAccessor (
m_inputAccessor
, *
this
,
inputLabel
);
110
}
111
112
//---------------------------------------------------------------------------
113
// Determine if object is currently OK for input to OR
114
//---------------------------------------------------------------------------
115
template
<columnar::ContainerIdConcept CI>
116
bool
OverlapDecorationHelper<CI>::isInputObject
117
(
columnar::ObjectId<CI>
obj)
const
118
{
119
// Input label is turned off if empty string
120
if
(!
m_useInputLabel
)
return
true
;
121
return
m_inputAccessor
(obj);
122
}
123
124
//---------------------------------------------------------------------------
125
// Determine if object is currently rejected by OR
126
//---------------------------------------------------------------------------
127
template
<columnar::ContainerIdConcept CI>
128
bool
OverlapDecorationHelper<CI>::isRejectedObject
129
(
columnar::ObjectId<CI>
obj)
const
130
{
131
// isRejected = isInput && (output == fail)
132
return
isInputObject
(obj) && (
m_outputDecorator
(obj) !=
m_outputPassValue
);
133
}
134
//---------------------------------------------------------------------------
135
// Determine if object is NOT currently rejected by OR (is surviving)
136
//---------------------------------------------------------------------------
137
template
<columnar::ContainerIdConcept CI>
138
bool
OverlapDecorationHelper<CI>::isSurvivingObject
139
(
columnar::ObjectId<CI>
obj)
const
140
{
141
// isSurviving = isInput && (output == pass)
142
return
isInputObject
(obj) && (
m_outputDecorator
(obj) ==
m_outputPassValue
);
143
}
144
//---------------------------------------------------------------------------
145
// Retrieve the user-defined object priority
146
//---------------------------------------------------------------------------
147
template
<columnar::ContainerIdConcept CI>
148
char
OverlapDecorationHelper<CI>::
149
getObjectPriority
(
columnar::ObjectId<CI>
obj)
const
150
{
151
// We current reuse the input decoration as the priority score
152
return
m_inputAccessor
(obj);
153
}
154
155
//---------------------------------------------------------------------------
156
// Set the overlap (output) decoration
157
//---------------------------------------------------------------------------
158
template
<columnar::ContainerIdConcept CI>
159
void
OverlapDecorationHelper<CI>::setOverlapDecoration
160
(
columnar::ObjectId<CI>
obj,
bool
result)
const
161
{
162
m_outputDecorator
(obj) = result;
163
}
164
//---------------------------------------------------------------------------
165
template
<columnar::ContainerIdConcept CI>
166
void
OverlapDecorationHelper<CI>::setObjectPass
(
columnar::ObjectId<CI>
obj)
const
167
{
168
setOverlapDecoration
(obj,
m_outputPassValue
);
169
}
170
//---------------------------------------------------------------------------
171
template
<columnar::ContainerIdConcept CI>
172
void
OverlapDecorationHelper<CI>::setObjectFail
(
columnar::ObjectId<CI>
obj)
const
173
{
174
setOverlapDecoration
(obj, !
m_outputPassValue
);
175
}
176
177
//---------------------------------------------------------------------------
178
// Check if output decoration has been applied to a container
179
//---------------------------------------------------------------------------
180
template
<columnar::ContainerIdConcept CI>
181
bool
OverlapDecorationHelper<CI>::isDecorated
182
(
columnar::ObjectRange<CI>
container)
const
183
{
184
return
container.size() > 0 &&
185
m_outputDecorator
.isAvailable(container[0]);
186
}
187
188
//---------------------------------------------------------------------------
189
// Initialize output decoration
190
//---------------------------------------------------------------------------
191
template
<columnar::ContainerIdConcept CI>
192
void
OverlapDecorationHelper<CI>::initializeDecorations
193
(
columnar::ObjectRange<CI>
container)
const
194
{
195
if
(!
isDecorated
(container))
196
resetDecorations
(container);
197
}
198
199
//---------------------------------------------------------------------------
200
// Reset output decoration
201
//---------------------------------------------------------------------------
202
template
<columnar::ContainerIdConcept CI>
203
void
OverlapDecorationHelper<CI>::resetDecorations
204
(
columnar::ObjectRange<CI>
container)
const
205
{
206
for
(
auto
obj : container){
207
// This isn't terrible intuitive, but in order to support both output
208
// logic modes in a reasonable way, we initialize the output flag to the
209
// logical AND of isInput and outputPassValue. This results in non-input
210
// objects being initialized to 'false' regardless of output logic.
211
bool
result = (
isInputObject
(obj) &&
m_outputPassValue
);
212
setOverlapDecoration
(obj, result);
213
}
214
//for(auto obj : container) setObjectPass(obj);
215
}
216
217
}
// namespace ORUtils
218
219
#endif
ColumnAccessor.h
ColumnarTool.h
ObjectRange.h
OverlapRemovalDefs.h
outputLabel
const std::string outputLabel
Definition
OverlapRemovalTester.cxx:69
outputPassValue
const bool outputPassValue
Definition
OverlapRemovalTester.cxx:67
inputLabel
const std::string inputLabel
Definition
OverlapRemovalTester.cxx:68
empty
static const Attributes_t empty
Definition
XmlStreamer.cxx:16
ORUtils::OverlapDecorationHelper::m_outputPassValue
bool m_outputPassValue
Output decoration logic.
Definition
OverlapDecorationHelper.h:92
ORUtils::OverlapDecorationHelper::getObjectPriority
char getObjectPriority(columnar::ObjectId< CI > obj) const
Get the user priority score, which is currently the input decoration.
Definition
OverlapDecorationHelper.h:149
ORUtils::OverlapDecorationHelper::isInputObject
bool isInputObject(columnar::ObjectId< CI > obj) const
Check if object is flagged as input for OR.
Definition
OverlapDecorationHelper.h:117
ORUtils::OverlapDecorationHelper::m_inputAccessor
columnar::ColumnAccessor< CI, char > m_inputAccessor
Input label accessor.
Definition
OverlapDecorationHelper.h:87
ORUtils::OverlapDecorationHelper::initializeDecorations
void initializeDecorations(columnar::ObjectRange< CI > container) const
Initialize decorations for a container to "pass".
Definition
OverlapDecorationHelper.h:193
ORUtils::OverlapDecorationHelper::OverlapDecorationHelper
OverlapDecorationHelper(const std::string &inputLabel, const std::string &outputLabel, bool outputPassValue=false)
Constructor.
Definition
OverlapDecorationHelper.h:101
ORUtils::OverlapDecorationHelper::resetDecorations
void resetDecorations(columnar::ObjectRange< CI > container) const
Helper method for setting all objects as passing.
Definition
OverlapDecorationHelper.h:204
ORUtils::OverlapDecorationHelper::isSurvivingObject
bool isSurvivingObject(columnar::ObjectId< CI > obj) const
Check if object is surviving OR thus far.
Definition
OverlapDecorationHelper.h:139
ORUtils::OverlapDecorationHelper::isRejectedObject
bool isRejectedObject(columnar::ObjectId< CI > obj) const
Check if an object has been rejected by decoration.
Definition
OverlapDecorationHelper.h:129
ORUtils::OverlapDecorationHelper::setObjectPass
void setObjectPass(columnar::ObjectId< CI > obj) const
Shorthand way to set an object as passing overlap removal.
Definition
OverlapDecorationHelper.h:166
ORUtils::OverlapDecorationHelper::m_outputDecorator
columnar::ColumnDecorator< CI, char > m_outputDecorator
Output decorator.
Definition
OverlapDecorationHelper.h:89
ORUtils::OverlapDecorationHelper::isDecorated
bool isDecorated(columnar::ObjectRange< CI > container) const
Check if output decoration has been applied to a container.
Definition
OverlapDecorationHelper.h:182
ORUtils::OverlapDecorationHelper::setOverlapDecoration
void setOverlapDecoration(columnar::ObjectId< CI > obj, bool result) const
Set output decoration on object, pass or fail.
Definition
OverlapDecorationHelper.h:160
ORUtils::OverlapDecorationHelper::setObjectFail
void setObjectFail(columnar::ObjectId< CI > obj) const
Shorthand way to set an object as failing overlap removal.
Definition
OverlapDecorationHelper.h:172
ORUtils::OverlapDecorationHelper::m_useInputLabel
bool m_useInputLabel
Toggle usage of input label.
Definition
OverlapDecorationHelper.h:84
columnar::ColumnarTool
the base class for all columnar components
Definition
ColumnAccessorDataArray.h:17
columnar::ObjectId
a class representing a single object (electron, muons, etc.)
Definition
ContainerId.h:205
columnar::ObjectRange
a class representing a continuous sequence of objects (a.k.a. a container)
Definition
ContainerId.h:204
ORUtils
Definition
AltMuJetOverlapTool.h:30
columnar::ColumnAccessor
AccessorTemplate< CI, CT, ColumnAccessMode::input, CM > ColumnAccessor
Definition
ColumnAccessor.h:274
columnar::ColumnDecorator
AccessorTemplate< CI, CT, ColumnAccessMode::output, CM > ColumnDecorator
Definition
ColumnAccessor.h:275
IParticleContainer.h
Generated on
for ATLAS Offline Software by
1.17.0