ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigHypothesis
TrigHLTJetHypo
src
CombinationsIterator.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#ifndef TRIG_HLTJETHYPO_COMBINATIONSITERATOR_H
6
#define TRIG_HLTJETHYPO_COMBINATIONSITERATOR_H
7
8
#include "
CombinationsGenerator.h
"
9
#include "
TrigHLTJetHypo/TrigHLTJetHypoUtils/HypoJetDefs.h
"
10
11
#include <vector>
12
#include <iterator>
13
#include <iosfwd>
14
15
/*
16
* CombinatonsIterator is a forward iterator. It iterates over
17
* combinations (n choose k) gnerated by a CombinationsGenerator instance.
18
* of a HypoJetVector.
19
*
20
* Dereferencing the iterator returns a HypoJetVector corresponding
21
* to the current combination.
22
*
23
* CombinationsIterator can generates the
24
* end of iteration CombinationsIterator
25
*/
26
27
class
CombinationsIterator
{
28
29
public
:
30
using
iterator_category
= std::forward_iterator_tag;
31
using
difference_type
= std::ptrdiff_t;
32
using
value_type
=
HypoJetVector
;
33
using
reference
=
HypoJetVector
&;
34
using
pointer
=
HypoJetVector
*;
35
36
37
friend
std::ostream&
operator <<
(std::ostream&,
const
CombinationsIterator
&);
38
CombinationsIterator
(std::size_t k,
39
const
HypoJetVector
& input_vals,
40
bool
end=
false
);
41
42
CombinationsIterator
() {}
43
44
45
reference
operator*
() {
return
m_vals
;}
46
47
48
pointer
operator->
() {
return
&
m_vals
;}
49
50
// pre-increment
51
CombinationsIterator
&
operator++
() {
52
m_end
=
m_gen
.bump();
53
auto
indices =
m_gen
.get();
54
55
// overwrite m_vals according to the combinations indicies
56
std::transform(indices.cbegin(),
57
indices.cend(),
58
m_vals
.begin(),
59
[iv = this->m_input_vals](
const
auto
& ind) {
60
return iv.at(ind);
61
});
62
63
return
*
this
;
64
}
65
66
// post-increment
67
CombinationsIterator
operator++
(
int
) {
68
CombinationsIterator
tmp = *
this
;
69
++(*this);
70
return
tmp;
71
}
72
73
74
// create an end of iteration marker from a CombinationsIterator
75
CombinationsIterator
endIter
()
const
;
76
77
// enable an equality test with an end iterator
78
friend
bool
operator==
(
const
CombinationsIterator
&
a
,
79
const
CombinationsIterator
& b) {
80
return
a
.m_end == b.m_end and
81
a
.m_k == b.m_k and
82
a
.m_input_vals == b.m_input_vals;
83
84
85
}
86
87
88
// enable an inequality test with an end iterator
89
friend
bool
operator!=
(
const
CombinationsIterator
&
a
,
90
const
CombinationsIterator
& b) {
91
return
!(
a
==b);
92
}
93
94
95
private
:
96
CombinationsGenerator
m_gen
{0,0};
97
std::size_t
m_k
{0};
98
99
HypoJetVector
m_input_vals
;
100
HypoJetVector
m_vals
;
101
102
bool
m_end
{
false
};
103
};
104
105
std::ostream&
operator <<
(std::ostream& os,
const
CombinationsIterator
& iter);
106
107
108
#endif
109
CombinationsGenerator.h
operator<<
std::ostream & operator<<(std::ostream &os, const CombinationsIterator &iter)
Definition
CombinationsIterator.cxx:7
HypoJetDefs.h
HypoJetVector
std::vector< pHypoJet > HypoJetVector
Definition
HypoJetDefs.h:27
a
static Double_t a
Definition
LArPhysWaveHECTool.cxx:38
CombinationsGenerator
generate all possible combinations of objects
CombinationsIterator
Definition
CombinationsIterator.h:27
CombinationsIterator::operator<<
friend std::ostream & operator<<(std::ostream &, const CombinationsIterator &)
Definition
CombinationsIterator.cxx:7
CombinationsIterator::m_k
std::size_t m_k
Definition
CombinationsIterator.h:97
CombinationsIterator::m_input_vals
HypoJetVector m_input_vals
Definition
CombinationsIterator.h:99
CombinationsIterator::operator*
reference operator*()
Definition
CombinationsIterator.h:45
CombinationsIterator::operator++
CombinationsIterator operator++(int)
Definition
CombinationsIterator.h:67
CombinationsIterator::m_end
bool m_end
Definition
CombinationsIterator.h:102
CombinationsIterator::iterator_category
std::forward_iterator_tag iterator_category
Definition
CombinationsIterator.h:30
CombinationsIterator::CombinationsIterator
CombinationsIterator(std::size_t k, const HypoJetVector &input_vals, bool end=false)
Definition
CombinationsIterator.cxx:25
CombinationsIterator::CombinationsIterator
CombinationsIterator()
Definition
CombinationsIterator.h:42
CombinationsIterator::difference_type
std::ptrdiff_t difference_type
Definition
CombinationsIterator.h:31
CombinationsIterator::operator==
friend bool operator==(const CombinationsIterator &a, const CombinationsIterator &b)
Definition
CombinationsIterator.h:78
CombinationsIterator::operator->
pointer operator->()
Definition
CombinationsIterator.h:48
CombinationsIterator::operator!=
friend bool operator!=(const CombinationsIterator &a, const CombinationsIterator &b)
Definition
CombinationsIterator.h:89
CombinationsIterator::value_type
HypoJetVector value_type
Definition
CombinationsIterator.h:32
CombinationsIterator::m_vals
HypoJetVector m_vals
Definition
CombinationsIterator.h:100
CombinationsIterator::m_gen
CombinationsGenerator m_gen
Definition
CombinationsIterator.h:96
CombinationsIterator::endIter
CombinationsIterator endIter() const
Definition
CombinationsIterator.cxx:43
CombinationsIterator::operator++
CombinationsIterator & operator++()
Definition
CombinationsIterator.h:51
CombinationsIterator::reference
HypoJetVector & reference
Definition
CombinationsIterator.h:33
CombinationsIterator::pointer
HypoJetVector * pointer
Definition
CombinationsIterator.h:34
Generated on
for ATLAS Offline Software by
1.17.0