File indexing completed on 2023-10-25 09:55:05
0001
0002
0003
0004
0005
0006 #include <iostream>
0007 #include <unistd.h>
0008 #include <cstdio>
0009 #include <cstdlib>
0010
0011 #include "tmEventSetup/tmEventSetup.hh"
0012
0013 #include "CondFormats/L1TObjects/interface/L1TUtmTriggerMenu.h"
0014 #include "CondFormats/L1TObjects/interface/L1TUtmAlgorithm.h"
0015 #include "CondFormats/L1TObjects/interface/L1TUtmCondition.h"
0016 #include "CondFormats/L1TObjects/interface/L1TUtmObject.h"
0017 #include "CondFormats/L1TObjects/interface/L1TUtmCut.h"
0018 #include "CondFormats/L1TObjects/interface/L1TUtmScale.h"
0019 #include "tmGrammar/Algorithm.hh"
0020
0021 #include "FWCore/Framework/interface/Event.h"
0022 #include "FWCore/Framework/interface/EventSetup.h"
0023 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0024 #include "FWCore/Framework/interface/MakerMacros.h"
0025 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0026 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0027 #include "FWCore/Framework/interface/ESHandle.h"
0028 #include "FWCore/Utilities/interface/ESGetToken.h"
0029
0030 #include "CondFormats/L1TObjects/interface/L1TUtmTriggerMenu.h"
0031 #include "CondFormats/DataRecord/interface/L1TUtmTriggerMenuRcd.h"
0032
0033 using namespace edm;
0034 using namespace std;
0035 using namespace tmeventsetup;
0036
0037 class L1TUtmTriggerMenuDumper : public one::EDAnalyzer<edm::one::WatchLuminosityBlocks, edm::one::WatchRuns> {
0038 public:
0039 explicit L1TUtmTriggerMenuDumper(const ParameterSet&);
0040 ~L1TUtmTriggerMenuDumper() override;
0041
0042 static void fillDescriptions(ConfigurationDescriptions& descriptions);
0043
0044 private:
0045 void beginJob() override;
0046 void analyze(Event const&, EventSetup const&) override;
0047 void endJob() override;
0048
0049 void beginRun(Run const&, EventSetup const&) override;
0050 void endRun(Run const&, EventSetup const&) override;
0051 void beginLuminosityBlock(LuminosityBlock const&, EventSetup const&) override;
0052 void endLuminosityBlock(LuminosityBlock const&, EventSetup const&) override;
0053 edm::ESGetToken<L1TUtmTriggerMenu, L1TUtmTriggerMenuRcd> m_l1TriggerMenuToken;
0054 };
0055
0056 L1TUtmTriggerMenuDumper::L1TUtmTriggerMenuDumper(const ParameterSet& iConfig)
0057 : m_l1TriggerMenuToken(esConsumes<L1TUtmTriggerMenu, L1TUtmTriggerMenuRcd, edm::Transition::BeginRun>()) {}
0058
0059 L1TUtmTriggerMenuDumper::~L1TUtmTriggerMenuDumper() {}
0060
0061 void L1TUtmTriggerMenuDumper::analyze(Event const& iEvent, EventSetup const& iSetup) {}
0062
0063 void L1TUtmTriggerMenuDumper::beginJob() { cout << "INFO: L1TUtmTriggerMenuDumper module beginJob called.\n"; }
0064
0065 void L1TUtmTriggerMenuDumper::endJob() { cout << "INFO: L1TUtmTriggerMenuDumper module endJob called.\n"; }
0066
0067 void L1TUtmTriggerMenuDumper::beginRun(Run const& run, EventSetup const& iSetup) {
0068 edm::ESHandle<L1TUtmTriggerMenu> hmenu = iSetup.getHandle(m_l1TriggerMenuToken);
0069
0070 const std::map<std::string, L1TUtmAlgorithm>& algoMap = hmenu->getAlgorithmMap();
0071 const std::map<std::string, L1TUtmCondition>& condMap = hmenu->getConditionMap();
0072
0073 const std::map<std::string, tmeventsetup::esScale> scaleMap(std::begin(hmenu->getScaleMap()),
0074 std::end(hmenu->getScaleMap()));
0075
0076 bool hasPrecision = false;
0077 std::map<std::string, unsigned int> precisions;
0078 getPrecisions(precisions, scaleMap);
0079 for (std::map<std::string, unsigned int>::const_iterator cit = precisions.begin(); cit != precisions.end(); cit++) {
0080 std::cout << cit->first << " = " << cit->second << "\n";
0081 hasPrecision = true;
0082 }
0083
0084 if (hasPrecision) {
0085 std::map<std::string, tmeventsetup::esScale>::iterator it1, it2;
0086 const tmeventsetup::esScale* scale1 = &scaleMap.find("EG-ETA")->second;
0087 const tmeventsetup::esScale* scale2 = &scaleMap.find("MU-ETA")->second;
0088
0089 std::vector<long long> lut_eg_2_mu_eta;
0090 getCaloMuonEtaConversionLut(lut_eg_2_mu_eta, scale1, scale2);
0091
0092 scale1 = &scaleMap.find("EG-PHI")->second;
0093 scale2 = &scaleMap.find("MU-PHI")->second;
0094
0095 std::vector<long long> lut_eg_2_mu_phi;
0096 getCaloMuonPhiConversionLut(lut_eg_2_mu_phi, scale1, scale2);
0097
0098 scale1 = &scaleMap.find("EG-ETA")->second;
0099 scale2 = &scaleMap.find("MU-ETA")->second;
0100
0101 std::vector<double> eg_mu_delta_eta;
0102 std::vector<long long> lut_eg_mu_delta_eta;
0103 size_t n = getDeltaVector(eg_mu_delta_eta, scale1, scale2);
0104 setLut(lut_eg_mu_delta_eta, eg_mu_delta_eta, precisions["PRECISION-EG-MU-Delta"]);
0105
0106 std::vector<long long> lut_eg_mu_cosh;
0107 applyCosh(eg_mu_delta_eta, n);
0108 setLut(lut_eg_mu_cosh, eg_mu_delta_eta, precisions["PRECISION-EG-MU-Math"]);
0109
0110 scale1 = &scaleMap.find("EG-PHI")->second;
0111 scale2 = &scaleMap.find("MU-PHI")->second;
0112
0113 std::vector<double> eg_mu_delta_phi;
0114 std::vector<long long> lut_eg_mu_delta_phi;
0115 n = getDeltaVector(eg_mu_delta_phi, scale1, scale2);
0116 setLut(lut_eg_mu_delta_phi, eg_mu_delta_phi, precisions["PRECISION-EG-MU-Delta"]);
0117
0118 std::vector<long long> lut_eg_mu_cos;
0119 applyCos(eg_mu_delta_phi, n);
0120 setLut(lut_eg_mu_cos, eg_mu_delta_phi, precisions["PRECISION-EG-MU-Math"]);
0121
0122 scale1 = &scaleMap.find("EG-ET")->second;
0123 std::vector<long long> lut_eg_et;
0124 getLut(lut_eg_et, scale1, precisions["PRECISION-EG-MU-MassPt"]);
0125
0126 scale1 = &scaleMap.find("MU-ET")->second;
0127 std::vector<long long> lut_mu_et;
0128 getLut(lut_mu_et, scale1, precisions["PRECISION-EG-MU-MassPt"]);
0129 for (size_t ii = 0; ii < lut_mu_et.size(); ii++) {
0130 std::cout << lut_mu_et.at(ii) << "\n";
0131 }
0132 }
0133
0134 for (std::map<std::string, L1TUtmAlgorithm>::const_iterator cit = algoMap.begin(); cit != algoMap.end(); cit++) {
0135 const L1TUtmAlgorithm& algo = cit->second;
0136 std::cout << "algo name = " << algo.getName() << "\n";
0137 std::cout << "algo exp. = " << algo.getExpression() << "\n";
0138 std::cout << "algo exp. in cond. = " << algo.getExpressionInCondition() << "\n";
0139
0140 const std::vector<std::string>& rpn_vec = algo.getRpnVector();
0141 for (size_t ii = 0; ii < rpn_vec.size(); ii++) {
0142 const std::string& token = rpn_vec.at(ii);
0143 if (Algorithm::isGate(token))
0144 continue;
0145 const L1TUtmCondition& condition = condMap.find(token)->second;
0146 std::cout << " cond type = " << condition.getType() << "\n";
0147
0148 const std::vector<L1TUtmCut>& cuts = condition.getCuts();
0149 for (size_t jj = 0; jj < cuts.size(); jj++) {
0150 const L1TUtmCut& cut = cuts.at(jj);
0151 std::cout << " cut name = " << cut.getName() << "\n";
0152 std::cout << " cut target = " << cut.getObjectType() << "\n";
0153 std::cout << " cut type = " << cut.getCutType() << "\n";
0154 std::cout << " cut min. value index = " << cut.getMinimum().value << " " << cut.getMinimum().index << "\n";
0155 std::cout << " cut max. value index = " << cut.getMaximum().value << " " << cut.getMaximum().index << "\n";
0156 std::cout << " cut data = " << cut.getData() << "\n";
0157 }
0158
0159 const std::vector<L1TUtmObject>& objects = condition.getObjects();
0160 for (size_t jj = 0; jj < objects.size(); jj++) {
0161 const L1TUtmObject& object = objects.at(jj);
0162 std::cout << " obj name = " << object.getName() << "\n";
0163 std::cout << " obj type = " << object.getType() << "\n";
0164 std::cout << " obj op = " << object.getComparisonOperator() << "\n";
0165 std::cout << " obj bx = " << object.getBxOffset() << "\n";
0166 if (object.getType() == esObjectType::EXT) {
0167 std::cout << " ext name = " << object.getExternalSignalName() << "\n";
0168 std::cout << " ext ch id = " << object.getExternalChannelId() << "\n";
0169 }
0170
0171 const std::vector<L1TUtmCut>& cuts = object.getCuts();
0172 for (size_t kk = 0; kk < cuts.size(); kk++) {
0173 const L1TUtmCut& cut = cuts.at(kk);
0174 std::cout << " cut name = " << cut.getName() << "\n";
0175 std::cout << " cut target = " << cut.getObjectType() << "\n";
0176 std::cout << " cut type = " << cut.getCutType() << "\n";
0177 std::cout << " cut min. value index = " << cut.getMinimum().value << " " << cut.getMinimum().index
0178 << "\n";
0179 std::cout << " cut max. value index = " << cut.getMaximum().value << " " << cut.getMaximum().index
0180 << "\n";
0181 std::cout << " cut data = " << cut.getData() << "\n";
0182 }
0183 }
0184 }
0185 }
0186 }
0187
0188 void L1TUtmTriggerMenuDumper::endRun(Run const&, EventSetup const&) {}
0189
0190 void L1TUtmTriggerMenuDumper::beginLuminosityBlock(LuminosityBlock const&, EventSetup const&) {}
0191
0192 void L1TUtmTriggerMenuDumper::endLuminosityBlock(LuminosityBlock const&, EventSetup const&) {}
0193
0194 void L1TUtmTriggerMenuDumper::fillDescriptions(ConfigurationDescriptions& descriptions) {
0195
0196
0197 ParameterSetDescription desc;
0198 desc.setUnknown();
0199 descriptions.addDefault(desc);
0200 }
0201
0202 DEFINE_FWK_MODULE(L1TUtmTriggerMenuDumper);