ATLAS Offline Software
JetGroupReducerTest.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "gtest/gtest.h"
7 #include <vector>
8 #include <map>
9 
10 using res = std::pair<std::vector<unsigned int>, bool>;
11 using vec = std::vector<unsigned int>;
12 
13 TEST(JetGroupReducerTester, empty) {
14  std::vector<std::size_t> siblings;
15  CondInd2JetGroupsInds satisfiedBy;
16  JetGroupInd2ElemInds jg2elem;
17 
18  auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
19 
20  JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
21 
22  EXPECT_TRUE(jgr.valid());
23  EXPECT_TRUE(jgr.next(collector).empty());
24 }
25 
26 TEST(JetGroupReducerTester, emptyCondition) {
27  std::vector<std::size_t> siblings{1, 2, 3};
28  CondInd2JetGroupsInds satisfiedBy;
29  satisfiedBy[0] = std::vector<std::size_t> {0, 1, 2};
30  satisfiedBy[1] = std::vector<std::size_t> {};
31  satisfiedBy[2] = std::vector<std::size_t> {3, 4, 5};
32  JetGroupInd2ElemInds jg2elem;
33 
34 
35 
36  auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
37 
38  JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
39 
40  EXPECT_TRUE(jgr.valid());
41  EXPECT_TRUE(jgr.next(collector).empty());
42 }
43 
44 
45 TEST(JetGroupReducerTester, one_condition_elem) {
46 
47  // condition is satisfied by an elementary jet group
48  std::vector<std::size_t> siblings{1};
49 
50  CondInd2JetGroupsInds satisfiedBy;
51  satisfiedBy[1] = std::vector<std::size_t> {0};
52  JetGroupInd2ElemInds jg2elem;
53  jg2elem[0] = std::vector<std::size_t> {0};
54  jg2elem[1] = std::vector<std::size_t> {1};
55  jg2elem[2] = std::vector<std::size_t> {0, 1};
56 
57 
58  auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
59 
60  JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
61 
62  auto exp = std::vector<std::size_t>{0};
63  EXPECT_EQ(jgr.next(collector), exp);
64  EXPECT_TRUE(jgr.next(collector).empty());
65 }
66 
67 
68 TEST(JetGroupReducerTester, one_condition_non_elem) {
69 
70  // condition is satisfied by an non-elementary jet group
71  std::vector<std::size_t> siblings{1};
72 
73  CondInd2JetGroupsInds satisfiedBy;
74  satisfiedBy[1] = std::vector<std::size_t> {2};
75  JetGroupInd2ElemInds jg2elem;
76  jg2elem[0] = std::vector<std::size_t> {0};
77  jg2elem[1] = std::vector<std::size_t> {1};
78  jg2elem[2] = std::vector<std::size_t> {0, 1};
79 
80 
81  auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
82 
83  JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
84 
85  auto exp = std::vector<std::size_t>{0, 1};
86  EXPECT_EQ(jgr.next(collector), exp);
87  EXPECT_TRUE(jgr.next(collector).empty());
88 }
89 
90 TEST(JetGroupReducerTester, two_conditions_nooverlap_elem_elem) {
91  std::vector<std::size_t> siblings{1, 2};
92 
93  CondInd2JetGroupsInds satisfiedBy;
94  satisfiedBy[1] = std::vector<std::size_t> {0, 1};
95  satisfiedBy[2] = std::vector<std::size_t> {2};
96  auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
97 
98  JetGroupInd2ElemInds jg2elem;
99 
100  jg2elem[0] = std::vector<std::size_t> {0};
101  jg2elem[1] = std::vector<std::size_t> {1};
102  jg2elem[2] = std::vector<std::size_t> {2};
103  jg2elem[3] = std::vector<std::size_t> {3};
104  jg2elem[4] = std::vector<std::size_t> {4};
105  jg2elem[5] = std::vector<std::size_t> {5};
106  jg2elem[6] = std::vector<std::size_t> {0, 1};
107  jg2elem[7] = std::vector<std::size_t> {2, 3};
108  jg2elem[8] = std::vector<std::size_t> {4, 5};
109 
110 
111  JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
112 
113  auto exp = std::vector<std::size_t>{0, 1, 2};
114  EXPECT_EQ(jgr.next(collector), exp);
115  EXPECT_TRUE(jgr.next(collector).empty());
116 }
117 
118 TEST(JetGroupReducerTester, two_conditions_nooverlap_elem_non_elem) {
119  std::vector<std::size_t> siblings{1, 2};
120 
121  CondInd2JetGroupsInds satisfiedBy;
122  satisfiedBy[1] = std::vector<std::size_t> {0, 1};
123  satisfiedBy[2] = std::vector<std::size_t> {7};
124  auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
125 
126  JetGroupInd2ElemInds jg2elem;
127 
128  jg2elem[0] = std::vector<std::size_t> {0};
129  jg2elem[1] = std::vector<std::size_t> {1};
130  jg2elem[2] = std::vector<std::size_t> {2};
131  jg2elem[3] = std::vector<std::size_t> {3};
132  jg2elem[4] = std::vector<std::size_t> {4};
133  jg2elem[5] = std::vector<std::size_t> {5};
134  jg2elem[6] = std::vector<std::size_t> {0, 1};
135  jg2elem[7] = std::vector<std::size_t> {2, 3};
136  jg2elem[8] = std::vector<std::size_t> {4, 5};
137 
138 
139  JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
140 
141  auto exp = std::vector<std::size_t>{0, 1, 2, 3};
142  EXPECT_EQ(jgr.next(collector), exp);
143  EXPECT_TRUE(jgr.next(collector).empty());
144 }
145 
146 TEST(JetGroupReducerTester, two_conditions_overlap_elem_non_elem) {
147  std::vector<std::size_t> siblings{1, 2};
148 
149  CondInd2JetGroupsInds satisfiedBy;
150  satisfiedBy[1] = std::vector<std::size_t> {0, 1};
151  satisfiedBy[2] = std::vector<std::size_t> {6};
152  auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
153 
154  JetGroupInd2ElemInds jg2elem;
155 
156  jg2elem[0] = std::vector<std::size_t> {0};
157  jg2elem[1] = std::vector<std::size_t> {1};
158  jg2elem[2] = std::vector<std::size_t> {2};
159  jg2elem[3] = std::vector<std::size_t> {3};
160  jg2elem[4] = std::vector<std::size_t> {4};
161  jg2elem[5] = std::vector<std::size_t> {5};
162  jg2elem[6] = std::vector<std::size_t> {0, 1};
163  jg2elem[7] = std::vector<std::size_t> {2, 3};
164  jg2elem[8] = std::vector<std::size_t> {4, 5};
165 
166 
167  JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
168 
169  auto exp = std::vector<std::size_t>{0, 1};
170  EXPECT_EQ(jgr.next(collector), exp);
171  EXPECT_TRUE(jgr.next(collector).empty());
172 }
173 
174 TEST(JetGroupReducerTester, two_conditions_no_overlap_non_elem_non_elem) {
175  std::vector<std::size_t> siblings{1, 2};
176 
177  CondInd2JetGroupsInds satisfiedBy;
178  satisfiedBy[1] = std::vector<std::size_t> {6, 7};
179  satisfiedBy[2] = std::vector<std::size_t> {8};
180  auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
181 
182  JetGroupInd2ElemInds jg2elem;
183 
184  jg2elem[0] = std::vector<std::size_t> {0};
185  jg2elem[1] = std::vector<std::size_t> {1};
186  jg2elem[2] = std::vector<std::size_t> {2};
187  jg2elem[3] = std::vector<std::size_t> {3};
188  jg2elem[4] = std::vector<std::size_t> {4};
189  jg2elem[5] = std::vector<std::size_t> {5};
190  jg2elem[6] = std::vector<std::size_t> {0, 1};
191  jg2elem[7] = std::vector<std::size_t> {2, 3};
192  jg2elem[8] = std::vector<std::size_t> {4, 5};
193 
194 
195  JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
196 
197  auto exp = std::vector<std::size_t>{0, 1, 2, 3, 4, 5};
198  EXPECT_EQ(jgr.next(collector), exp);
199  EXPECT_TRUE(jgr.next(collector).empty());
200 }
201 
202 TEST(JetGroupReducerTester, two_conditions_overlap_non_elem_non_elem) {
203  std::vector<std::size_t> siblings{1, 2};
204 
205  CondInd2JetGroupsInds satisfiedBy;
206  satisfiedBy[1] = std::vector<std::size_t> {6, 7};
207  satisfiedBy[2] = std::vector<std::size_t> {9};
208  auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
209 
210  JetGroupInd2ElemInds jg2elem;
211 
212  jg2elem[0] = std::vector<std::size_t> {0};
213  jg2elem[1] = std::vector<std::size_t> {1};
214  jg2elem[2] = std::vector<std::size_t> {2};
215  jg2elem[3] = std::vector<std::size_t> {3};
216  jg2elem[4] = std::vector<std::size_t> {4};
217  jg2elem[5] = std::vector<std::size_t> {5};
218  jg2elem[6] = std::vector<std::size_t> {0, 1};
219  jg2elem[7] = std::vector<std::size_t> {2, 3};
220  jg2elem[8] = std::vector<std::size_t> {4, 5};
221  jg2elem[9] = std::vector<std::size_t> {1, 5};
222 
223 
224  JetGroupReducer jgr(siblings, satisfiedBy, jg2elem);
225 
226  auto exp = std::vector<std::size_t>{0, 1, 2, 3, 5};
227  EXPECT_EQ(jgr.next(collector), exp);
228  EXPECT_TRUE(jgr.next(collector).empty());
229 }
230 
CondInd2JetGroupsInds
std::map< int, std::vector< std::size_t > > CondInd2JetGroupsInds
Definition: JetGroupProduct.h:15
JetGroupReducer.h
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:9
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
JetGroupReducer
Definition: JetGroupReducer.h:29
JetGroupInd2ElemInds
std::map< int, std::vector< std::size_t > > JetGroupInd2ElemInds
Definition: elementalJetGroups.h:11
res
std::pair< std::vector< unsigned int >, bool > res
Definition: JetGroupProductTest.cxx:11
TEST
TEST(JetGroupReducerTester, empty)
Definition: JetGroupReducerTest.cxx:13
JetGroupReducer::valid
virtual bool valid() const override
Definition: JetGroupReducer.cxx:93
JetGroupReducer::next
virtual std::vector< std::size_t > next(const Collector &) override
Definition: JetGroupReducer.cxx:77