ATLAS Offline Software
Loading...
Searching...
No Matches
Trigger
TrigSteer
TrigCompositeUtils
Root
Combinations.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
TrigCompositeUtils/Combinations.h
"
6
#include <tuple>
7
#include <algorithm>
8
#include <numeric>
9
10
namespace
TrigCompositeUtils
11
{
12
Combinations::Combinations
(
13
const
std::vector<std::size_t> &legMultiplicities,
14
const
std::vector<VecLInfo_t> &legFeatures,
15
const
IPartCombItr::FilterFunc_t
&filter)
16
:
m_filter
(filter),
17
m_legMultiplicities
(legMultiplicities),
18
m_legFeatures
(legFeatures)
19
{
20
if
(legMultiplicities.size() != legFeatures.size())
21
throw
std::invalid_argument(
"Different numbers of multiplicities and features provided"
);
22
}
23
24
Combinations::Combinations
(
25
const
std::vector<std::size_t> &legMultiplicities,
26
const
std::vector<VecLInfo_t> &legFeatures,
27
FilterType
filter)
28
:
Combinations
(legMultiplicities, legFeatures,
IPartCombItr
::
getFilter
(filter))
29
{
30
}
31
32
Combinations::Combinations
(
const
IPartCombItr::FilterFunc_t
&filter)
33
:
Combinations
(
std
::
vector
<
std
::size_t>{}, std::vector<VecLInfo_t>{}, filter)
34
{
35
}
36
37
Combinations::Combinations
(
FilterType
filter) :
Combinations
(
IPartCombItr
::
getFilter
(filter)) {}
38
39
void
Combinations::reserve
(std::size_t capacity)
40
{
41
m_legMultiplicities
.reserve(capacity);
42
m_legFeatures
.reserve(capacity);
43
}
44
45
bool
Combinations::empty
()
const
46
{
47
return
begin
() ==
end
();
48
}
49
50
std::size_t
Combinations::size
()
const
51
{
52
return
std::accumulate(
m_legMultiplicities
.begin(),
m_legMultiplicities
.end(), std::size_t(0));
53
}
54
55
void
Combinations::addLeg
(std::size_t multiplicity,
const
VecLInfo_t
&features)
56
{
57
m_legMultiplicities
.push_back(multiplicity);
58
m_legFeatures
.push_back(features);
59
}
60
61
void
Combinations::addLeg
(std::size_t multiplicity,
VecLInfo_t
&& features)
62
{
63
m_legMultiplicities
.push_back(multiplicity);
64
m_legFeatures
.push_back(std::move(features));
65
}
66
67
void
Combinations::addLeg
(
const
VecLInfo_t
&features)
68
{
69
addLeg
(1, features);
70
}
71
72
void
Combinations::addLeg
(
VecLInfo_t
&& features)
73
{
74
addLeg
(1, std::move(features));
75
}
76
77
IPartCombItr
Combinations::begin
()
const
78
{
79
// Build up the constructor arguments
80
std::vector<std::tuple<std::size_t, VecLInfo_t::const_iterator, VecLInfo_t::const_iterator>> args;
81
for
(std::size_t ii = 0; ii <
m_legFeatures
.size(); ++ii)
82
args.push_back(std::make_tuple(
83
m_legMultiplicities
.at(ii),
84
m_legFeatures
.at(ii).begin(),
85
m_legFeatures
.at(ii).end()));
86
return
IPartCombItr
(args,
m_filter
);
87
}
88
89
IPartCombItr
Combinations::end
()
const
90
{
91
return
IPartCombItr
();
92
}
93
}
// namespace TrigCompositeUtils
Combinations.h
TrigCompositeUtils::Combinations::VecLInfo_t
IPartCombItr::VecLInfo_t VecLInfo_t
Definition
Combinations.h:20
TrigCompositeUtils::Combinations::empty
bool empty() const
Definition
Combinations.cxx:45
TrigCompositeUtils::Combinations::end
IPartCombItr end() const
Definition
Combinations.cxx:89
TrigCompositeUtils::Combinations::m_filter
IPartCombItr::FilterFunc_t m_filter
Definition
Combinations.h:51
TrigCompositeUtils::Combinations::reserve
void reserve(std::size_t capacity)
Definition
Combinations.cxx:39
TrigCompositeUtils::Combinations::begin
IPartCombItr begin() const
Definition
Combinations.cxx:77
TrigCompositeUtils::Combinations::addLeg
void addLeg(std::size_t multiplicity, const VecLInfo_t &features)
Definition
Combinations.cxx:55
TrigCompositeUtils::Combinations::m_legFeatures
std::vector< VecLInfo_t > m_legFeatures
Definition
Combinations.h:53
TrigCompositeUtils::Combinations::Combinations
Combinations(const std::vector< std::size_t > &legMultiplicities, const std::vector< VecLInfo_t > &legFeatures, const IPartCombItr::FilterFunc_t &filter)
Definition
Combinations.cxx:12
TrigCompositeUtils::Combinations::size
std::size_t size() const
Definition
Combinations.cxx:50
TrigCompositeUtils::Combinations::m_legMultiplicities
std::vector< std::size_t > m_legMultiplicities
Definition
Combinations.h:52
TrigCompositeUtils::IPartCombItr
Definition
IPartCombItr.h:41
TrigCompositeUtils::IPartCombItr::FilterFunc_t
std::function< bool(const IPartCombItr::VecLInfo_t &)> FilterFunc_t
Definition
IPartCombItr.h:45
vector
Definition
MultiHisto.h:13
TrigCompositeUtils
Definition
Event/xAOD/xAODTrigger/xAODTrigger/TrigComposite.h:19
TrigCompositeUtils::FilterType
FilterType
Definition
IPartCombItr.h:23
std
STL namespace.
getFilter
TrackFilter * getFilter(const std::string &refname, int pdgId, TrackFilter *foff, TrackFilter *fmu, TrackFilter *ftruth)
This is awful code, passing in lots of filter pointers just so that they can be assigned neatly ?
Definition
rmain.cxx:404
Generated on
for ATLAS Offline Software by
1.16.1