File indexing completed on 2024-04-06 12:19:59
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include "CompareToObjectMapRecord.h"
0017
0018 #include <algorithm>
0019 #include <iostream>
0020 #include <string>
0021 #include <vector>
0022
0023 #include "DataFormats/Common/interface/Handle.h"
0024 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerObjectMap.h"
0025 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerObjectMapFwd.h"
0026 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerObjectMapRecord.h"
0027 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerObjectMaps.h"
0028 #include "DataFormats/L1GlobalTrigger/interface/L1GtLogicParser.h"
0029 #include "FWCore/Framework/interface/Event.h"
0030 #include "FWCore/Framework/interface/MakerMacros.h"
0031 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0032 #include "FWCore/ParameterSet/interface/Registry.h"
0033 #include "FWCore/Utilities/interface/Algorithms.h"
0034 #include "FWCore/Utilities/interface/Exception.h"
0035
0036 CompareToObjectMapRecord::CompareToObjectMapRecord(const edm::ParameterSet &pset)
0037 : m_l1GtObjectMapTag(pset.getParameter<edm::InputTag>("L1GtObjectMapTag")),
0038 m_l1GtObjectMapsTag(pset.getParameter<edm::InputTag>("L1GtObjectMapsTag")),
0039 verbose_(pset.getUntrackedParameter<bool>("verbose", false)) {}
0040
0041 CompareToObjectMapRecord::~CompareToObjectMapRecord() {}
0042
0043 void CompareToObjectMapRecord::analyze(edm::Event const &event, edm::EventSetup const &es) {
0044
0045 edm::Handle<L1GlobalTriggerObjectMapRecord> gtObjectMapRecord;
0046 event.getByLabel(m_l1GtObjectMapTag, gtObjectMapRecord);
0047
0048
0049 edm::Handle<L1GlobalTriggerObjectMaps> gtObjectMaps;
0050 event.getByLabel(m_l1GtObjectMapsTag, gtObjectMaps);
0051
0052
0053
0054 edm::pset::Registry *psetRegistry = edm::pset::Registry::instance();
0055 edm::ParameterSet const *pset = psetRegistry->getMapped(gtObjectMaps->namesParameterSetID());
0056 if (pset == nullptr) {
0057 cms::Exception ex("L1GlobalTrigger");
0058 ex << "Could not find L1 trigger names ParameterSet in the registry";
0059 ex.addContext("Calling CompareToObjectMapRecord::analyze");
0060 throw ex;
0061 }
0062
0063
0064 std::vector<int> algoBitNumbers1;
0065 std::vector<L1GlobalTriggerObjectMap> const &vectorInRecord = gtObjectMapRecord->gtObjectMap();
0066 algoBitNumbers1.reserve(vectorInRecord.size());
0067 for (std::vector<L1GlobalTriggerObjectMap>::const_iterator i = vectorInRecord.begin(), iEnd = vectorInRecord.end();
0068 i != iEnd;
0069 ++i) {
0070 algoBitNumbers1.push_back(i->algoBitNumber());
0071 if (verbose_) {
0072
0073
0074 i->print(std::cout);
0075 }
0076 }
0077 edm::sort_all(algoBitNumbers1);
0078
0079 std::vector<int> algoBitNumbers2;
0080 gtObjectMaps->getAlgorithmBitNumbers(algoBitNumbers2);
0081 if (algoBitNumbers1 != algoBitNumbers2) {
0082 cms::Exception ex("L1GlobalTrigger");
0083 ex << "Algorithm bit numbers do not match";
0084 ex.addContext("Calling CompareToObjectMapRecord::analyze");
0085 throw ex;
0086 }
0087
0088
0089 std::vector<std::string> algoNames2 = pset->getParameter<std::vector<std::string>>("@algorithmNames");
0090
0091
0092
0093
0094 for (int i = 0; i < static_cast<int>(algoNames2.size()); ++i) {
0095 if (!std::binary_search(algoBitNumbers1.begin(), algoBitNumbers1.end(), i)) {
0096 if (algoNames2[i] != std::string("")) {
0097 cms::Exception ex("L1GlobalTrigger");
0098 ex << "Undefined algorithm should have empty name";
0099 ex.addContext("Calling CompareToObjectMapRecord::analyze");
0100 throw ex;
0101 }
0102 }
0103 }
0104
0105
0106 for (std::vector<int>::const_iterator iBit = algoBitNumbers1.begin(), endBits = algoBitNumbers1.end();
0107 iBit != endBits;
0108 ++iBit) {
0109 L1GlobalTriggerObjectMap const *objMap = gtObjectMapRecord->getObjectMap(*iBit);
0110 const std::string &algoName1 = objMap->algoName();
0111
0112 if (algoName1 != algoNames2.at(*iBit)) {
0113 cms::Exception ex("L1GlobalTrigger");
0114 ex << "Algorithm names do not match";
0115 ex.addContext("Calling CompareToObjectMapRecord::analyze");
0116 throw ex;
0117 }
0118
0119
0120 if (objMap->algoGtlResult() != gtObjectMaps->algorithmResult(*iBit)) {
0121 cms::Exception ex("L1GlobalTrigger");
0122 ex << "Algorithm results do not match";
0123 ex.addContext("Calling CompareToObjectMapRecord::analyze");
0124 throw ex;
0125 }
0126
0127 std::vector<L1GtLogicParser::OperandToken> const &operandTokens1 = objMap->operandTokenVector();
0128
0129 L1GlobalTriggerObjectMaps::ConditionsInAlgorithm conditions2 = gtObjectMaps->getConditionsInAlgorithm(*iBit);
0130 if (conditions2.nConditions() != operandTokens1.size()) {
0131 cms::Exception ex("L1GlobalTrigger");
0132 ex << "Number of conditions does not match";
0133 ex.addContext("Calling CompareToObjectMapRecord::analyze");
0134 throw ex;
0135 }
0136
0137 std::vector<std::string> conditionNames2;
0138 conditionNames2 = pset->getParameter<std::vector<std::string>>(algoNames2.at(*iBit));
0139
0140
0141 if (verbose_) {
0142 std::cout << *iBit << " " << algoNames2[*iBit] << " " << gtObjectMaps->algorithmResult(*iBit) << "\n";
0143
0144 for (unsigned j = 0; j < gtObjectMaps->getNumberOfConditions(*iBit); ++j) {
0145 L1GlobalTriggerObjectMaps::ConditionsInAlgorithm conditions = gtObjectMaps->getConditionsInAlgorithm(*iBit);
0146 std::cout << " " << j << " " << conditionNames2[j] << " " << conditions.getConditionResult(j) << "\n";
0147 L1GlobalTriggerObjectMaps::CombinationsInCondition combinations =
0148 gtObjectMaps->getCombinationsInCondition(*iBit, j);
0149 for (unsigned m = 0; m < combinations.nCombinations(); ++m) {
0150 std::cout << " ";
0151 for (unsigned n = 0; n < combinations.nObjectsPerCombination(); ++n) {
0152 std::cout << " " << static_cast<unsigned>(combinations.getObjectIndex(m, n));
0153 }
0154 std::cout << "\n";
0155 }
0156 }
0157 }
0158
0159
0160 unsigned iCondition = 0;
0161 for (std::vector<L1GtLogicParser::OperandToken>::const_iterator iToken1 = operandTokens1.begin(),
0162 endTokens1 = operandTokens1.end();
0163 iToken1 != endTokens1;
0164 ++iToken1, ++iCondition) {
0165
0166 if (iToken1->tokenNumber != static_cast<int>(iCondition)) {
0167 cms::Exception ex("L1GlobalTrigger");
0168 ex << "Token numbers not sequential";
0169 ex.addContext("Calling CompareToObjectMapRecord::analyze");
0170 throw ex;
0171 }
0172
0173
0174 if (iToken1->tokenResult != conditions2.getConditionResult(iCondition)) {
0175 cms::Exception ex("L1GlobalTrigger");
0176 ex << "Condition results do not match";
0177 ex.addContext("Calling CompareToObjectMapRecord::analyze");
0178 throw ex;
0179 }
0180
0181
0182 if (iToken1->tokenName != conditionNames2.at(iCondition)) {
0183 cms::Exception ex("L1GlobalTrigger");
0184 ex << "Condition names do not match";
0185 ex.addContext("Calling CompareToObjectMapRecord::analyze");
0186 throw ex;
0187 }
0188
0189
0190 L1GlobalTriggerObjectMaps::CombinationsInCondition combinations2 =
0191 gtObjectMaps->getCombinationsInCondition(*iBit, iCondition);
0192
0193 CombinationsInCond const *combinations1 = objMap->getCombinationsInCond(iToken1->tokenNumber);
0194 if (combinations1->size() != combinations2.nCombinations()) {
0195 cms::Exception ex("L1GlobalTrigger");
0196 ex << "The number of combinations in a condition does not match";
0197 ex.addContext("Calling CompareToObjectMapRecord::analyze");
0198 throw ex;
0199 }
0200
0201 for (CombinationsInCond::const_iterator iCombo = combinations1->begin(), endCombos = combinations1->end();
0202 iCombo != endCombos;
0203 ++iCombo) {
0204 if (iCombo->size() != combinations2.nObjectsPerCombination()) {
0205 cms::Exception ex("L1GlobalTrigger");
0206 ex << "The number of indexes in a combination does not match";
0207 ex.addContext("Calling CompareToObjectMapRecord::analyze");
0208 throw ex;
0209 }
0210
0211 for (std::vector<int>::const_iterator iIndex = iCombo->begin(), endIndexes = iCombo->end();
0212 iIndex != endIndexes;
0213 ++iIndex) {
0214 if (*iIndex != combinations2.getObjectIndex(iCombo - combinations1->begin(), iIndex - iCombo->begin())) {
0215 cms::Exception ex("L1GlobalTrigger");
0216 ex << "Object index does not match";
0217 ex.addContext("Calling CompareToObjectMapRecord::analyze");
0218 throw ex;
0219 }
0220 }
0221 }
0222 }
0223 }
0224 }
0225
0226 DEFINE_FWK_MODULE(CompareToObjectMapRecord);