ATLAS Offline Software
Loading...
Searching...
No Matches
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
11using res = std::pair<std::vector<unsigned int>, bool>;
12using vec = std::vector<unsigned int>;
13
14TEST(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
28TEST(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
60TEST(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
93TEST(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
128TEST(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
std::vector< size_t > vec
TEST(JetGroupProductTester, empty)
std::pair< std::vector< unsigned int >, bool > res
std::map< int, std::vector< std::size_t > > CondInd2JetGroupsInds
static const Attributes_t empty
virtual std::vector< std::size_t > next(const Collector &) override
virtual bool valid() const override
std::map< int, std::vector< std::size_t > > JetGroupInd2ElemInds