CMS 3D CMS Logo

L1GtDefinitions.cc
Go to the documentation of this file.
1 
14 // this class header
16 
17 // system include files
18 #include <cstring>
19 
20 // user include files
22 namespace {
23  template <class T>
24  struct entry {
25  char const* label;
26  T value;
27  };
28 
29  constexpr bool same(char const* x, char const* y) {
30  return !*x && !*y ? true : /* default */ (*x == *y && same(x + 1, y + 1));
31  }
32 
33  template <class T>
34  constexpr T keyToValue(char const* label, entry<T> const* entries) {
35  return !entries->label ? entries->value
36  : same(entries->label, label) ? entries->value
37  : /*default*/ keyToValue(label, entries + 1);
38  }
39 
40  template <class T>
41  constexpr char const* valueToKey(T value, entry<T> const* entries) {
42  return !entries->label ? entries->label
43  : entries->value == value ? entries->label
44  : /*default*/ valueToKey(value, entries + 1);
45  }
46  constexpr entry<L1GtBoardType> l1GtBoardTypeStringToEnumMap[] = {{"GTFE", GTFE},
47  {"FDL", FDL},
48  {"PSB", PSB},
49  {"GMT", GMT},
50  {"TCS", TCS},
51  {"TIM", TIM},
52  {"BoardNull", BoardNull},
53  {nullptr, (L1GtBoardType)-1}};
54 
55  constexpr entry<L1GtPsbQuad> l1GtPsbQuadStringToEnumMap[] = {{"Free", Free},
56  {"TechTr", TechTr},
57  {"IsoEGQ", IsoEGQ},
58  {"NoIsoEGQ", NoIsoEGQ},
59  {"CenJetQ", CenJetQ},
60  {"ForJetQ", ForJetQ},
61  {"TauJetQ", TauJetQ},
62  {"ESumsQ", ESumsQ},
63  {"JetCountsQ", JetCountsQ},
64  {"MQB1", MQB1},
65  {"MQB2", MQB2},
66  {"MQF3", MQF3},
67  {"MQF4", MQF4},
68  {"MQB5", MQB5},
69  {"MQB6", MQB6},
70  {"MQF7", MQF7},
71  {"MQF8", MQF8},
72  {"MQB9", MQB9},
73  {"MQB10", MQB10},
74  {"MQF11", MQF11},
75  {"MQF12", MQF12},
76  {"CastorQ", CastorQ},
77  {"HfQ", HfQ},
78  {"BptxQ", BptxQ},
79  {"GtExternalQ", GtExternalQ},
80  {"PsbQuadNull", PsbQuadNull},
81  {nullptr, (L1GtPsbQuad)-1}};
82 
83  // L1GtConditionType
84  constexpr entry<L1GtConditionType> l1GtConditionTypeStringToEnumMap[] = {{"TypeNull", TypeNull},
85  {"Type1s", Type1s},
86  {"Type2s", Type2s},
87  {"Type2wsc", Type2wsc},
88  {"Type2cor", Type2cor},
89  {"Type3s", Type3s},
90  {"Type4s", Type4s},
91  {"TypeETM", TypeETM},
92  {"TypeETT", TypeETT},
93  {"TypeHTT", TypeHTT},
94  {"TypeHTM", TypeHTM},
95  {"TypeJetCounts", TypeJetCounts},
96  {"TypeCastor", TypeCastor},
97  {"TypeHfBitCounts", TypeHfBitCounts},
98  {"TypeHfRingEtSums", TypeHfRingEtSums},
99  {"TypeBptx", TypeBptx},
100  {"TypeExternal", TypeExternal},
101  {nullptr, (L1GtConditionType)-1}};
102 
103  // L1GtConditionCategory
104  constexpr entry<L1GtConditionCategory> l1GtConditionCategoryStringToEnumMap[] = {
105  {"CondNull", CondNull},
106  {"CondMuon", CondMuon},
107  {"CondCalo", CondCalo},
108  {"CondEnergySum", CondEnergySum},
109  {"CondJetCounts", CondJetCounts},
110  {"CondCorrelation", CondCorrelation},
111  {"CondCastor", CondCastor},
112  {"CondHfBitCounts", CondHfBitCounts},
113  {"CondHfRingEtSums", CondHfRingEtSums},
114  {"CondBptx", CondBptx},
115  {"CondExternal", CondExternal},
116  {nullptr, (L1GtConditionCategory)-1}};
117 
118 } // namespace
119 // L1GtBoardType
121  L1GtBoardType value = keyToValue(label.c_str(), l1GtBoardTypeStringToEnumMap);
122  if (value == (L1GtBoardType)-1) {
123  edm::LogInfo("L1GtDefinitions") << "\n '" << label << "' is not a recognized L1GtBoardType. \n Return BoardNull.";
124  value = BoardNull;
125  }
126 
127  if (value == BoardNull) {
128  edm::LogInfo("L1GtDefinitions") << "\n BoardNull means no valid board type defined!";
129  }
130 
131  return value;
132 }
133 
135  char const* result = valueToKey(boardType, l1GtBoardTypeStringToEnumMap);
136  if (boardType == BoardNull) {
137  edm::LogInfo("L1GtDefinitions") << "\n BoardNull means no valid board type defined!";
138  }
139  if (!result) {
140  edm::LogInfo("L1GtDefinitions") << "\n '" << boardType << "' is not a recognized L1GtBoardType. "
141  << "\n Return BoardNull, which means no valid board type defined!";
142  return "BoardNull";
143  }
144  return result;
145 }
146 
147 // L1GtPsbQuad
148 
150  L1GtPsbQuad value = keyToValue(label.c_str(), l1GtPsbQuadStringToEnumMap);
151  // in case of unrecognized L1GtPsbQuad, return PsbQuadNull
152  // to be dealt by the corresponding module
153  if (value == (L1GtPsbQuad)-1) {
154  edm::LogInfo("L1GtDefinitions") << "\n '" << label << "' is not a recognized L1GtPsbQuad. \n Return PsbQuadNull.";
155  value = PsbQuadNull;
156  }
157 
158  if (value == PsbQuadNull) {
159  edm::LogInfo("L1GtDefinitions") << "\n PsbQuadNull means no valid PSB quadruplet defined!";
160  }
161 
162  return value;
163 }
164 
166  char const* result = valueToKey(psbQuad, l1GtPsbQuadStringToEnumMap);
167  if (psbQuad == PsbQuadNull)
168  edm::LogInfo("L1GtDefinitions") << "\n PsbQuadNull means no valid PSB quadruplet defined!";
169  if (!result) {
170  result = "PsbQuadNull";
171  edm::LogInfo("L1GtDefinitions") << "\n '" << psbQuad << "' is not a recognized L1GtPsbQuad. "
172  << "\n Return PsbQuadNull, which means no valid PSB quadruplet defined!";
173  }
174 
175  return result;
176 }
177 
179  L1GtConditionType value = keyToValue(label.c_str(), l1GtConditionTypeStringToEnumMap);
180 
181  // in case of unrecognized L1GtConditionType, return TypeNull
182  // to be dealt by the corresponding module
183  if (value == (L1GtConditionType)-1) {
184  edm::LogInfo("L1GtDefinitions") << "\n '" << label
185  << "' is not a recognized L1GtConditionType. \n Return TypeNull.";
186 
187  value = TypeNull;
188  }
189 
190  if (value == TypeNull) {
191  edm::LogInfo("L1GtDefinitions") << "\n TypeNull means no valid condition type defined!";
192  }
193 
194  return value;
195 }
196 
198  const char* result = valueToKey(conditionType, l1GtConditionTypeStringToEnumMap);
199  if (conditionType == TypeNull)
200  edm::LogInfo("L1GtDefinitions") << "\n Return TypeNull, which means no valid condition type defined!";
201  if (!result) {
202  result = "TypeNull";
203  edm::LogInfo("L1GtDefinitions") << "\n '" << conditionType << "' is not a recognized L1GtConditionType. "
204  << "\n Return TypeNull, which means no valid condition type defined!";
205  }
206  return result;
207 }
208 
210  L1GtConditionCategory value = keyToValue(label.c_str(), l1GtConditionCategoryStringToEnumMap);
211  // in case of unrecognized L1GtConditionCategory, return CondNull
212  // to be dealt by the corresponding module
213  if (value == (L1GtConditionCategory)-1) {
214  edm::LogInfo("L1GtDefinitions") << "\n '" << label
215  << "' is not a recognized L1GtConditionCategory. \n Return CondNull.";
216 
217  value = CondNull;
218  }
219 
220  if (value == CondNull) {
221  edm::LogInfo("L1GtDefinitions") << "\n CondNull means no valid condition category defined!";
222  }
223 
224  return value;
225 }
226 
228  char const* result = valueToKey(conditionCategory, l1GtConditionCategoryStringToEnumMap);
229  if (conditionCategory == CondNull)
230  edm::LogInfo("L1GtDefinitions") << "\n Return CondNull, which means no valid condition category defined!";
231 
232  if (!result) {
233  result = "CondNull";
234  edm::LogInfo("L1GtDefinitions") << "\n '" << conditionCategory << "' is not a recognized L1GtConditionCategory. "
235  << "\n Return CondNull, which means no valid condition category defined!";
236  }
237 
238  return result;
239 }
L1GtConditionType l1GtConditionTypeStringToEnum(const std::string &label)
L1GtConditionType
std::string l1GtConditionTypeEnumToString(const L1GtConditionType &conditionType)
std::string l1GtBoardTypeEnumToString(const L1GtBoardType &boardType)
L1GtPsbQuad l1GtPsbQuadStringToEnum(const std::string &label)
char const * label
std::string l1GtConditionCategoryEnumToString(const L1GtConditionCategory &conditionCategory)
Definition: value.py:1
Log< level::Info, false > LogInfo
L1GtBoardType l1GtBoardTypeStringToEnum(const std::string &label)
std::string l1GtPsbQuadEnumToString(const L1GtPsbQuad &psbQuad)
L1GtBoardType
board types in GT
float x
L1GtPsbQuad
quadruples sent to GT via PSB
L1GtConditionCategory
condition categories
long double T
L1GtConditionCategory l1GtConditionCategoryStringToEnum(const std::string &label)