File indexing completed on 2024-07-02 00:53:54
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #include "L1Trigger/L1TGlobal/interface/GlobalDefinitions.h"
0018
0019
0020 #include <cstring>
0021
0022
0023 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0024 namespace {
0025 template <class T>
0026 struct entry {
0027 char const *label;
0028 T value;
0029 };
0030
0031 constexpr bool same(char const *x, char const *y) {
0032 return !*x && !*y ? true : (*x == *y && same(x + 1, y + 1));
0033 }
0034
0035 template <class T>
0036 constexpr T keyToValue(char const *label, entry<T> const *entries) {
0037 return !entries->label ? entries->value
0038 : same(entries->label, label) ? entries->value
0039 : keyToValue(label, entries + 1);
0040 }
0041
0042 template <class T>
0043 constexpr char const *valueToKey(T value, entry<T> const *entries) {
0044 return !entries->label ? entries->label
0045 : entries->value == value ? entries->label
0046 : valueToKey(value, entries + 1);
0047 }
0048 constexpr entry<l1t::L1GtBoardType> l1GtBoardTypeStringToEnumMap[] = {
0049 {"l1t::MP7", l1t::MP7}, {"l1t::BoardNull", l1t::BoardNull}, {nullptr, (l1t::L1GtBoardType)-1}};
0050
0051
0052 constexpr entry<l1t::GtConditionType> l1GtConditionTypeStringToEnumMap[] = {
0053 {"l1t::TypeNull", l1t::TypeNull},
0054 {"l1t::Type1s", l1t::Type1s},
0055 {"l1t::Type2s", l1t::Type2s},
0056 {"l1t::Type2wsc", l1t::Type2wsc},
0057 {"l1t::Type2cor", l1t::Type2cor},
0058 {"l1t::Type3s", l1t::Type3s},
0059 {"l1t::Type4s", l1t::Type4s},
0060 {"l1t::TypeETM", l1t::TypeETM},
0061 {"l1t::TypeETT", l1t::TypeETT},
0062 {"l1t::TypeHTT", l1t::TypeHTT},
0063 {"l1t::TypeHTM", l1t::TypeHTM},
0064 {"l1t::TypeETMHF", l1t::TypeETMHF},
0065 {"l1t::TypeHTMHF", l1t::TypeHTMHF},
0066 {"l1t::TypeTowerCount", l1t::TypeTowerCount},
0067 {"l1t::TypeMinBiasHFP0", l1t::TypeMinBiasHFP0},
0068 {"l1t::TypeMinBiasHFM0", l1t::TypeMinBiasHFM0},
0069 {"l1t::TypeMinBiasHFP1", l1t::TypeMinBiasHFP1},
0070 {"l1t::TypeMinBiasHFM1", l1t::TypeMinBiasHFM1},
0071 {"l1t::TypeZDCP", l1t::TypeZDCP},
0072 {"l1t::TypeZDCM", l1t::TypeZDCM},
0073 {"l1t::TypeAXOL1TL", l1t::TypeAXOL1TL},
0074 {"l1t::TypeCICADA", l1t::TypeCICADA},
0075 {"l1t::TypeExternal", l1t::TypeExternal},
0076 {nullptr, (l1t::GtConditionType)-1},
0077 {"l1t::Type2corWithOverlapRemoval", l1t::Type2corWithOverlapRemoval},
0078 {"l1t::TypeCent0", l1t::TypeCent0},
0079 {"l1t::TypeCent1", l1t::TypeCent1},
0080 {"l1t::TypeCent2", l1t::TypeCent2},
0081 {"l1t::TypeCent3", l1t::TypeCent3},
0082 {"l1t::TypeCent4", l1t::TypeCent4},
0083 {"l1t::TypeCent5", l1t::TypeCent5},
0084 {"l1t::TypeCent6", l1t::TypeCent6},
0085 {"l1t::TypeCent7", l1t::TypeCent7},
0086 {"l1t::TypeAsymEt", l1t::TypeAsymEt},
0087 {"l1t::TypeAsymHt", l1t::TypeAsymHt},
0088 {"l1t::TypeAsymEtHF", l1t::TypeAsymEtHF},
0089 {"l1t::TypeAsymHtHF", l1t::TypeAsymHtHF}};
0090
0091
0092 constexpr entry<l1t::GtConditionCategory> l1GtConditionCategoryStringToEnumMap[] = {
0093 {"l1t::CondNull", l1t::CondNull},
0094 {"l1t::CondMuon", l1t::CondMuon},
0095 {"l1t::CondCalo", l1t::CondCalo},
0096 {"l1t::CondEnergySum", l1t::CondEnergySum},
0097 {"l1t::CondEnergySumZdc", l1t::CondEnergySumZdc},
0098 {"l1t::CondAXOL1TL", l1t::CondAXOL1TL},
0099 {"l1t::CondCICADA", l1t::CondCICADA},
0100 {"l1t::CondCorrelation", l1t::CondCorrelation},
0101 {"l1t::CondCorrelationThreeBody", l1t::CondCorrelationThreeBody},
0102 {"l1t::CondCorrelationWithOverlapRemoval", l1t::CondCorrelationWithOverlapRemoval},
0103 {"l1t::CondExternal", l1t::CondExternal},
0104 {nullptr, (l1t::GtConditionCategory)-1}};
0105
0106 }
0107
0108 l1t::L1GtBoardType l1t::l1GtBoardTypeStringToEnum(const std::string &label) {
0109 l1t::L1GtBoardType value = keyToValue(label.c_str(), l1GtBoardTypeStringToEnumMap);
0110 if (value == (l1t::L1GtBoardType)-1) {
0111 edm::LogInfo("L1TGlobal") << "\n '" << label
0112 << "' is not a recognized l1t::L1GtBoardType. \n Return l1t::BoardNull.";
0113 value = l1t::BoardNull;
0114 }
0115
0116 if (value == l1t::BoardNull) {
0117 edm::LogInfo("L1TGlobal") << "\n l1t::BoardNull means no valid board type defined!";
0118 }
0119
0120 return value;
0121 }
0122
0123 std::string l1t::l1GtBoardTypeEnumToString(const l1t::L1GtBoardType &boardType) {
0124 char const *result = valueToKey(boardType, l1GtBoardTypeStringToEnumMap);
0125 if (boardType == l1t::BoardNull) {
0126 edm::LogInfo("L1TGlobal") << "\n l1t::BoardNull means no valid board type defined!";
0127 }
0128 if (!result) {
0129 edm::LogInfo("L1TGlobal") << "\n '" << boardType << "' is not a recognized l1t::L1GtBoardType. "
0130 << "\n Return l1t::BoardNull, which means no valid board type defined!";
0131 return "l1t::BoardNull";
0132 }
0133 return result;
0134 }
0135
0136 l1t::GtConditionType l1t::l1GtConditionTypeStringToEnum(const std::string &label) {
0137 l1t::GtConditionType value = keyToValue(label.c_str(), l1GtConditionTypeStringToEnumMap);
0138
0139
0140
0141 if (value == (l1t::GtConditionType)-1) {
0142 edm::LogInfo("L1TGlobal") << "\n '" << label
0143 << "' is not a recognized l1t::GtConditionType. \n Return l1t::TypeNull.";
0144
0145 value = l1t::TypeNull;
0146 }
0147
0148 if (value == l1t::TypeNull) {
0149 edm::LogInfo("L1TGlobal") << "\n l1t::TypeNull means no valid condition type defined!";
0150 }
0151
0152 return value;
0153 }
0154
0155 std::string l1t::l1GtConditionTypeEnumToString(const l1t::GtConditionType &conditionType) {
0156 const char *result = valueToKey(conditionType, l1GtConditionTypeStringToEnumMap);
0157 if (conditionType == l1t::TypeNull)
0158 edm::LogInfo("L1TGlobal") << "\n Return l1t::TypeNull, which means no valid condition type defined!";
0159 if (!result) {
0160 result = "l1t::TypeNull";
0161 edm::LogInfo("L1TGlobal") << "\n '" << conditionType << "' is not a recognized l1t::GtConditionType. "
0162 << "\n Return l1t::TypeNull, which means no valid condition type defined!";
0163 }
0164 return result;
0165 }
0166
0167 l1t::GtConditionCategory l1t::l1GtConditionCategoryStringToEnum(const std::string &label) {
0168 l1t::GtConditionCategory value = keyToValue(label.c_str(), l1GtConditionCategoryStringToEnumMap);
0169
0170
0171 if (value == (l1t::GtConditionCategory)-1) {
0172 edm::LogInfo("L1TGlobal") << "\n '" << label
0173 << "' is not a recognized l1t::GtConditionCategory. \n Return l1t::CondNull.";
0174
0175 value = l1t::CondNull;
0176 }
0177
0178 if (value == l1t::CondNull) {
0179 edm::LogInfo("L1TGlobal") << "\n l1t::CondNull means no valid condition category defined!";
0180 }
0181
0182 return value;
0183 }
0184
0185 std::string l1t::l1GtConditionCategoryEnumToString(const l1t::GtConditionCategory &conditionCategory) {
0186 char const *result = valueToKey(conditionCategory, l1GtConditionCategoryStringToEnumMap);
0187 if (conditionCategory == l1t::CondNull)
0188 edm::LogInfo("L1TGlobal") << "\n Return l1t::CondNull, which means no valid condition category defined!";
0189
0190 if (!result) {
0191 result = "l1t::CondNull";
0192 edm::LogInfo("L1TGlobal") << "\n '" << conditionCategory << "' is not a recognized l1t::GtConditionCategory. "
0193 << "\n Return l1t::CondNull, which means no valid condition category defined!";
0194 }
0195
0196 return result;
0197 }