ATLAS Offline Software
JetGroupProductTest.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"
8 #include <vector>
9 #include <map>
10 
11 using res = std::pair<std::vector<unsigned int>, bool>;
12 using vec = std::vector<unsigned int>;
13 
14 TEST(JetGroupProductTester, empty) {
15  std::vector<std::size_t> siblings;
16  CondInd2JetGroupsInds satisfiedBy;
17  std::vector<std::size_t> condMult;
18  JetGroupInd2ElemInds jg2elemjgs;
19 
20  JetGroupProduct jgp(siblings, satisfiedBy, condMult, jg2elemjgs);
21  auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
22 
23  EXPECT_FALSE(jgp.valid());
24  EXPECT_TRUE((jgp.next(collector)).empty());
25 }
26 
27 
28 TEST(JetGroupProductTester, onecondition) {
29  std::vector<std::size_t> siblings{1};
30 
31  CondInd2JetGroupsInds satisfiedBy;
32  satisfiedBy[0] = std::vector<std::size_t>();
33  satisfiedBy[1] = std::vector<std::size_t> {0, 1, 2};
34 
35  std::vector<std::size_t> condMult{0, 1};
36 
37  JetGroupInd2ElemInds jg2elemjgs;
38  jg2elemjgs[0] = std::vector<std::size_t> {0};
39  jg2elemjgs[1] = std::vector<std::size_t> {1};
40  jg2elemjgs[2] = std::vector<std::size_t> {2};
41 
42  JetGroupProduct jgp(siblings, satisfiedBy, condMult, jg2elemjgs);
43 
44  auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
45 
46  EXPECT_TRUE(jgp.valid());
47 
48  auto exp = std::vector<std::size_t>{0};
49  EXPECT_EQ(jgp.next(collector), exp);
50 
51  exp = std::vector<std::size_t>{1};
52  EXPECT_EQ(jgp.next(collector), exp);
53 
54  exp = std::vector<std::size_t>{2};
55  EXPECT_EQ(jgp.next(collector), exp);
56 
57  EXPECT_TRUE(jgp.next(collector).empty());
58 }
59 
60 TEST(JetGroupProductTester, repeatedcond) {
61  std::vector<std::size_t> siblings{1};
62 
63  CondInd2JetGroupsInds satisfiedBy;
64  satisfiedBy[0] = std::vector<std::size_t>();
65  satisfiedBy[1] = std::vector<std::size_t> {0, 1, 2};
66 
67  std::vector<std::size_t> condMult{1, 2};
68 
69  JetGroupInd2ElemInds jg2elemjgs;
70  jg2elemjgs[0] = std::vector<std::size_t> {0};
71  jg2elemjgs[1] = std::vector<std::size_t> {1};
72  jg2elemjgs[2] = std::vector<std::size_t> {2};
73 
74  JetGroupProduct jgp(siblings, satisfiedBy, condMult, jg2elemjgs);
75 
76  auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
77 
78  EXPECT_TRUE(jgp.valid());
79 
80  auto exp = std::vector<std::size_t>{0, 1};
81  EXPECT_EQ(jgp.next(collector), exp);
82 
83  exp = std::vector<std::size_t>{0, 2};
84  EXPECT_EQ(jgp.next(collector), exp);
85 
86 
87  exp = std::vector<std::size_t>{1, 2};
88  EXPECT_EQ(jgp.next(collector), exp);
89 
90  EXPECT_TRUE(jgp.next(collector).empty());
91 }
92 
93 TEST(JetGroupProductTester, twocond) {
94  std::vector<std::size_t> siblings{1, 2};
95 
96  CondInd2JetGroupsInds satisfiedBy;
97  satisfiedBy[0] = std::vector<std::size_t>();
98  satisfiedBy[1] = std::vector<std::size_t> {0, 1, 2};
99  satisfiedBy[2] = std::vector<std::size_t> {0, 1, 2};
100 
101  std::vector<std::size_t> condMult{1, 1, 1};
102 
103  JetGroupInd2ElemInds jg2elemjgs;
104  jg2elemjgs[0] = std::vector<std::size_t> {0};
105  jg2elemjgs[1] = std::vector<std::size_t> {1};
106  jg2elemjgs[2] = std::vector<std::size_t> {2};
107 
108  JetGroupProduct jgp(siblings, satisfiedBy, condMult, jg2elemjgs);
109 
110  auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
111 
112  EXPECT_TRUE(jgp.valid());
113 
114  auto exp = std::vector<std::size_t>{0, 1};
115  EXPECT_EQ(jgp.next(collector), exp);
116 
117  exp = std::vector<std::size_t>{0, 2};
118  EXPECT_EQ(jgp.next(collector), exp);
119 
120  exp = std::vector<std::size_t>{1, 2};
121  EXPECT_EQ(jgp.next(collector), exp);
122 
123  EXPECT_TRUE(jgp.next(collector).empty());
124  if(collector) {collector->write();}
125 
126 }
127 
128 TEST(JetGroupProductTester, reallife) {
129  std::vector<std::size_t> siblings{1, 2};
130 
131  CondInd2JetGroupsInds satisfiedBy;
132  satisfiedBy[0] = std::vector<std::size_t>();
133  satisfiedBy[1] = std::vector<std::size_t> {0, 1, 2};
134  satisfiedBy[2] = std::vector<std::size_t> {
135  0, 1, 2, 3, 4, 6, 7, 9, 10, 11, 12, 13,
136  14, 15, 17, 19, 21, 25, 26, 29, 33};
137 
138  std::vector<std::size_t> condMult{1, 1, 3};
139 
140  JetGroupInd2ElemInds jg2elemjgs;
141  for (const auto& i : satisfiedBy[2]){
142  jg2elemjgs[i] = std::vector<std::size_t> {i};
143  }
144  JetGroupProduct jgp(siblings, satisfiedBy, condMult, jg2elemjgs);
145 
146  auto collector = std::unique_ptr<ITrigJetHypoInfoCollector>(nullptr);
147 
148  EXPECT_TRUE(jgp.valid());
149 
150  std::size_t ipass{0};
151 
152  while (true) {
153  auto indices = jgp.next(collector);
154  if (indices.empty()){break;}
155  ++ipass;
156  }
157 
158  // 2925 = 3*C(21,3) - overlaps and duplicates
159  EXPECT_EQ (ipass, 2925u);
160 
161 }
162 
JetGroupProduct.h
CondInd2JetGroupsInds
std::map< int, std::vector< std::size_t > > CondInd2JetGroupsInds
Definition: JetGroupProduct.h:15
Trk::indices
std::pair< long int, long int > indices
Definition: AlSymMatBase.h:24
JetGroupProduct
Definition: JetGroupProduct.h:20
vec
std::vector< size_t > vec
Definition: CombinationsGeneratorTest.cxx:9
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
JetGroupProduct::valid
virtual bool valid() const override
Definition: JetGroupProduct.cxx:127
lumiFormat.i
int i
Definition: lumiFormat.py:85
JetGroupInd2ElemInds
std::map< int, std::vector< std::size_t > > JetGroupInd2ElemInds
Definition: elementalJetGroups.h:11
DebugInfoCollector.h
res
std::pair< std::vector< unsigned int >, bool > res
Definition: JetGroupProductTest.cxx:11
TEST
TEST(JetGroupProductTester, empty)
Definition: JetGroupProductTest.cxx:14
JetGroupProduct::next
virtual std::vector< std::size_t > next(const Collector &) override
Definition: JetGroupProduct.cxx:60