ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
PhysicsAnalysis
AnalysisCommon
AssociationUtils
AssociationUtils
OverlapLinkHelper.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_OVERLAPLINKHELPER_H
6
#define ASSOCIATIONUTILS_OVERLAPLINKHELPER_H
7
8
// Framework includes
9
#include "
AsgMessaging/StatusCode.h
"
10
11
// EDM includes
12
#include "
xAODBase/IParticleContainer.h
"
13
14
// Columnar includes
15
#include "
ColumnarCore/ColumnAccessor.h
"
16
#include "
ColumnarCore/ColumnarTool.h
"
17
#include "
ColumnarCore/LinkColumn.h
"
18
#include "
ColumnarVariant/VariantLinkColumn.h
"
19
20
// Local includes
21
#include "
AssociationUtils/OverlapRemovalDefs.h
"
22
23
namespace
ORUtils
24
{
25
40
template
<columnar::ContainerIdConcept CI>
41
class
OverlapLinkHelper
:
public
columnar::ColumnarTool
<>
42
{
43
44
public
:
45
47
OverlapLinkHelper
(
const
std::string& linkLabel);
48
50
template
<columnar::ContainerIdConcept LT>
51
StatusCode
addObjectLink
(
columnar::ObjectId<CI>
p1,
52
columnar::ObjectId<LT>
p2)
const
;
53
56
template
<columnar::ContainerIdConcept LT>
57
columnar::OptObjectId<LT>
getObjectLink
(
columnar::ObjectId<CI>
p,
columnar::ObjectRange<LT>
container)
const
;
58
59
private
:
60
61
// we need to use a columnar variant link here, because other
62
// tools may send a link to a container we are not listing here.
63
// however, at the same time having a variant link here also means
64
// I can point to either of my two containers without extra
65
// effort.
66
using
LTDef
=
columnar::VariantContainerId<columnar::Particle1Def,columnar::Particle1Def,columnar::Particle2Def>
;
67
69
columnar::ColumnDecorator<CI,columnar::ObjectLink<LTDef>
>
m_linkDecorator
;
71
columnar::ColumnAccessor<CI,columnar::ObjectLink<LTDef>
>
m_linkAccessor
;
72
73
};
// class OverlapLinkHelper
74
75
//---------------------------------------------------------------------------
76
// Constructor
77
//---------------------------------------------------------------------------
78
template
<columnar::ContainerIdConcept CI>
79
OverlapLinkHelper<CI>::OverlapLinkHelper
(
const
std::string& linkLabel)
80
:
m_linkDecorator
(*this,linkLabel),
81
m_linkAccessor
(*this,linkLabel)
82
{}
83
84
//---------------------------------------------------------------------------
85
// Link p1 to p2
86
//---------------------------------------------------------------------------
87
template
<columnar::ContainerIdConcept CI>
template
<columnar::ContainerIdConcept LT>
88
StatusCode
OverlapLinkHelper<CI>::addObjectLink
89
(
columnar::ObjectId<CI>
p1,
columnar::ObjectId<LT>
p2)
const
90
{
91
m_linkDecorator
.set (p1, p2);
92
return
StatusCode::SUCCESS;
93
}
94
95
//---------------------------------------------------------------------------
96
// Retrieve an overlap-linked particle or null.
97
//---------------------------------------------------------------------------
98
template
<columnar::ContainerIdConcept CI>
template
<columnar::ContainerIdConcept LT>
99
columnar::OptObjectId<LT>
OverlapLinkHelper<CI>::getObjectLink
100
(
columnar::ObjectId<CI>
p,
columnar::ObjectRange<LT>
container)
const
101
{
102
// Check if the decoration is present and valid
103
if
(!
m_linkAccessor
.isAvailable(p))
104
return
{};
105
auto
link =
m_linkAccessor
(p);
106
if
(!link)
107
return
{};
108
if
constexpr
(
columnar::ColumnarModeDefault::isXAOD
)
109
{
110
if
(link.getXAODObject()->container() != &container.getXAODObject())
111
return
{};
112
}
113
return
link.template tryGetVariant<LT>();
114
}
115
116
}
// namespace ORUtils
117
118
#endif
ColumnAccessor.h
ColumnarTool.h
StatusCode.h
LinkColumn.h
OverlapRemovalDefs.h
VariantLinkColumn.h
ORUtils::OverlapLinkHelper::m_linkAccessor
columnar::ColumnAccessor< CI, columnar::ObjectLink< LTDef > > m_linkAccessor
Corresponding object link accessor (for reading only).
Definition
OverlapLinkHelper.h:71
ORUtils::OverlapLinkHelper::LTDef
columnar::VariantContainerId< columnar::Particle1Def, columnar::Particle1Def, columnar::Particle2Def > LTDef
Definition
OverlapLinkHelper.h:66
ORUtils::OverlapLinkHelper::OverlapLinkHelper
OverlapLinkHelper(const std::string &linkLabel)
Constructor.
Definition
OverlapLinkHelper.h:79
ORUtils::OverlapLinkHelper::m_linkDecorator
columnar::ColumnDecorator< CI, columnar::ObjectLink< LTDef > > m_linkDecorator
Object link decorator.
Definition
OverlapLinkHelper.h:69
ORUtils::OverlapLinkHelper::getObjectLink
columnar::OptObjectId< LT > getObjectLink(columnar::ObjectId< CI > p, columnar::ObjectRange< LT > container) const
Retrieve an overlap-linked particle.
Definition
OverlapLinkHelper.h:100
ORUtils::OverlapLinkHelper::addObjectLink
StatusCode addObjectLink(columnar::ObjectId< CI > p1, columnar::ObjectId< LT > p2) const
Decorate p1 with an overlap object link to p2.
Definition
OverlapLinkHelper.h:89
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
columnar::OptObjectId
a class representing a single optional object (electron, muons, etc.)
Definition
ContainerId.h:206
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
columnar::ColumnarModeXAOD::isXAOD
static constexpr bool isXAOD
Whether this is the xAOD mode.
Definition
ColumnarCore/ColumnarCore/ColumnarDef.h:23
columnar::VariantContainerId
a "variant" ContainerId
Definition
VariantDef.h:98
IParticleContainer.h
Generated on
for ATLAS Offline Software by
1.17.0