1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
#define CATCH_CONFIG_MAIN
#include "catch.hpp"
#include <algorithm>
#include <string>
#include "DataFormats/L1TGlobal/interface/GlobalObject.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
namespace {
bool hasNoDuplicateEnums() {
std::vector<l1t::GlobalObject> vec;
vec.reserve(l1t::kGlobalObjectEnumStringPairs.size());
for (auto const& [value, name] : l1t::kGlobalObjectEnumStringPairs) {
vec.emplace_back(value);
}
std::sort(vec.begin(), vec.end());
auto const it = std::unique(vec.begin(), vec.end());
return (it == vec.end());
}
bool hasNoDuplicateStrings() {
std::vector<std::string> vec;
vec.reserve(l1t::kGlobalObjectEnumStringPairs.size());
for (auto const& [value, name] : l1t::kGlobalObjectEnumStringPairs) {
vec.emplace_back(name);
}
std::sort(vec.begin(), vec.end());
auto const it = std::unique(vec.begin(), vec.end());
return (it == vec.end());
}
bool isValidGlobalObject(unsigned int const idx, l1t::GlobalObject const& obj, std::string const& label) {
if (idx != obj) {
edm::LogError("testL1TGlobalObjectCatch2")
<< "Index (" << idx << ") and Enum (" << obj << ") do not match (Label = \"" << label << "\")";
return false;
}
auto const enumToString = l1t::GlobalObjectEnumToString(obj);
if (enumToString != label) {
edm::LogError("testL1TGlobalObjectCatch2")
<< "EnumToString (\"" << enumToString << "\") and Label (\"" << label << "\") do not match"
<< " (Index = " << idx << ", Enum = " << obj << ") !!";
return false;
}
auto const stringToEnum = l1t::GlobalObjectStringToEnum(label);
if (stringToEnum != obj) {
edm::LogError("testL1TGlobalObjectCatch2")
<< "StringToEnum (\"" << stringToEnum << "\") and Enum (" << obj << ") do not match"
<< " (Index = " << idx << ", Label = \"" << label << "\") !!";
return false;
}
return true;
}
} // namespace
TEST_CASE("Test l1t::GlobalObject", "[l1tGlobalObject]") {
// verify that the enums in l1t::kGlobalObjectEnumStringPairs are all unique
SECTION("NoDuplicateEnums") { REQUIRE(hasNoDuplicateEnums()); }
// verify that the strings in l1t::kGlobalObjectEnumStringPairs are all unique
SECTION("NoDuplicateStrings") { REQUIRE(hasNoDuplicateStrings()); }
// verify correctness of index, enum and string of every GlobalObject
SECTION("TestGlobalObjects") {
REQUIRE(isValidGlobalObject(0, l1t::gtMu, "Mu")); // 0
REQUIRE(isValidGlobalObject(1, l1t::gtMuShower, "MuShower")); // 1
REQUIRE(isValidGlobalObject(2, l1t::gtEG, "EG")); // 2
REQUIRE(isValidGlobalObject(3, l1t::gtJet, "Jet")); // 3
REQUIRE(isValidGlobalObject(4, l1t::gtTau, "Tau")); // 4
REQUIRE(isValidGlobalObject(5, l1t::gtETM, "ETM")); // 5
REQUIRE(isValidGlobalObject(6, l1t::gtETT, "ETT")); // 6
REQUIRE(isValidGlobalObject(7, l1t::gtHTT, "HTT")); // 7
REQUIRE(isValidGlobalObject(8, l1t::gtHTM, "HTM")); // 8
REQUIRE(isValidGlobalObject(9, l1t::gtETMHF, "ETMHF")); // 9
REQUIRE(isValidGlobalObject(10, l1t::gtTowerCount, "TowerCount")); // 10
REQUIRE(isValidGlobalObject(11, l1t::gtMinBiasHFP0, "MinBiasHFP0")); // 11
REQUIRE(isValidGlobalObject(12, l1t::gtMinBiasHFM0, "MinBiasHFM0")); // 12
REQUIRE(isValidGlobalObject(13, l1t::gtMinBiasHFP1, "MinBiasHFP1")); // 13
REQUIRE(isValidGlobalObject(14, l1t::gtMinBiasHFM1, "MinBiasHFM1")); // 14
REQUIRE(isValidGlobalObject(15, l1t::gtETTem, "ETTem")); // 15
REQUIRE(isValidGlobalObject(16, l1t::gtAsymmetryEt, "AsymEt")); // 16
REQUIRE(isValidGlobalObject(17, l1t::gtAsymmetryHt, "AsymHt")); // 17
REQUIRE(isValidGlobalObject(18, l1t::gtAsymmetryEtHF, "AsymEtHF")); // 18
REQUIRE(isValidGlobalObject(19, l1t::gtAsymmetryHtHF, "AsymHtHF")); // 19
REQUIRE(isValidGlobalObject(20, l1t::gtCentrality0, "CENT0")); // 20
REQUIRE(isValidGlobalObject(21, l1t::gtCentrality1, "CENT1")); // 21
REQUIRE(isValidGlobalObject(22, l1t::gtCentrality2, "CENT2")); // 22
REQUIRE(isValidGlobalObject(23, l1t::gtCentrality3, "CENT3")); // 23
REQUIRE(isValidGlobalObject(24, l1t::gtCentrality4, "CENT4")); // 24
REQUIRE(isValidGlobalObject(25, l1t::gtCentrality5, "CENT5")); // 25
REQUIRE(isValidGlobalObject(26, l1t::gtCentrality6, "CENT6")); // 26
REQUIRE(isValidGlobalObject(27, l1t::gtCentrality7, "CENT7")); // 27
REQUIRE(isValidGlobalObject(28, l1t::gtExternal, "External")); // 28
REQUIRE(isValidGlobalObject(29, l1t::gtZDCP, "ZDCP")); // 29
REQUIRE(isValidGlobalObject(30, l1t::gtZDCM, "ZDCM")); // 30
REQUIRE(isValidGlobalObject(31, l1t::ObjNull, "ObjNull")); // 31
REQUIRE(isValidGlobalObject(32, l1t::gtHTMHF, "HTMHF")); // 32
}
}
|