File indexing completed on 2024-04-06 12:20:32
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::WatchRuns> {
0038 public:
0039 explicit L1TUtmTriggerMenuDumper(const ParameterSet&);
0040
0041 static void fillDescriptions(ConfigurationDescriptions& descriptions);
0042
0043 private:
0044 void beginJob() override;
0045 void analyze(Event const&, EventSetup const&) override;
0046 void endJob() override;
0047
0048 void beginRun(Run const&, EventSetup const&) override;
0049 void endRun(Run const&, EventSetup const&) override;
0050 edm::ESGetToken<L1TUtmTriggerMenu, L1TUtmTriggerMenuRcd> m_l1TriggerMenuToken;
0051 };
0052
0053 L1TUtmTriggerMenuDumper::L1TUtmTriggerMenuDumper(const ParameterSet& iConfig)
0054 : m_l1TriggerMenuToken(esConsumes<L1TUtmTriggerMenu, L1TUtmTriggerMenuRcd, edm::Transition::BeginRun>()) {}
0055
0056 void L1TUtmTriggerMenuDumper::analyze(Event const& iEvent, EventSetup const& iSetup) {}
0057
0058 void L1TUtmTriggerMenuDumper::beginJob() { cout << "INFO: L1TUtmTriggerMenuDumper module beginJob called.\n"; }
0059
0060 void L1TUtmTriggerMenuDumper::endJob() { cout << "INFO: L1TUtmTriggerMenuDumper module endJob called.\n"; }
0061
0062 void L1TUtmTriggerMenuDumper::beginRun(Run const& run, EventSetup const& iSetup) {
0063 edm::ESHandle<L1TUtmTriggerMenu> hmenu = iSetup.getHandle(m_l1TriggerMenuToken);
0064
0065 const std::map<std::string, L1TUtmAlgorithm>& algoMap = hmenu->getAlgorithmMap();
0066 const std::map<std::string, L1TUtmCondition>& condMap = hmenu->getConditionMap();
0067
0068 const std::map<std::string, tmeventsetup::esScale> scaleMap(std::begin(hmenu->getScaleMap()),
0069 std::end(hmenu->getScaleMap()));
0070
0071 bool hasPrecision = false;
0072 std::map<std::string, unsigned int> precisions;
0073 getPrecisions(precisions, scaleMap);
0074 for (std::map<std::string, unsigned int>::const_iterator cit = precisions.begin(); cit != precisions.end(); cit++) {
0075 std::cout << cit->first << " = " << cit->second << "\n";
0076 hasPrecision = true;
0077 }
0078
0079 if (hasPrecision) {
0080 std::map<std::string, tmeventsetup::esScale>::iterator it1, it2;
0081 const tmeventsetup::esScale* scale1 = &scaleMap.find("EG-ETA")->second;
0082 const tmeventsetup::esScale* scale2 = &scaleMap.find("MU-ETA")->second;
0083
0084 std::vector<long long> lut_eg_2_mu_eta;
0085 getCaloMuonEtaConversionLut(lut_eg_2_mu_eta, scale1, scale2);
0086
0087 scale1 = &scaleMap.find("EG-PHI")->second;
0088 scale2 = &scaleMap.find("MU-PHI")->second;
0089
0090 std::vector<long long> lut_eg_2_mu_phi;
0091 getCaloMuonPhiConversionLut(lut_eg_2_mu_phi, scale1, scale2);
0092
0093 scale1 = &scaleMap.find("EG-ETA")->second;
0094 scale2 = &scaleMap.find("MU-ETA")->second;
0095
0096 std::vector<double> eg_mu_delta_eta;
0097 std::vector<long long> lut_eg_mu_delta_eta;
0098 size_t n = getDeltaVector(eg_mu_delta_eta, scale1, scale2);
0099 setLut(lut_eg_mu_delta_eta, eg_mu_delta_eta, precisions["PRECISION-EG-MU-Delta"]);
0100
0101 std::vector<long long> lut_eg_mu_cosh;
0102 applyCosh(eg_mu_delta_eta, n);
0103 setLut(lut_eg_mu_cosh, eg_mu_delta_eta, precisions["PRECISION-EG-MU-Math"]);
0104
0105 scale1 = &scaleMap.find("EG-PHI")->second;
0106 scale2 = &scaleMap.find("MU-PHI")->second;
0107
0108 std::vector<double> eg_mu_delta_phi;
0109 std::vector<long long> lut_eg_mu_delta_phi;
0110 n = getDeltaVector(eg_mu_delta_phi, scale1, scale2);
0111 setLut(lut_eg_mu_delta_phi, eg_mu_delta_phi, precisions["PRECISION-EG-MU-Delta"]);
0112
0113 std::vector<long long> lut_eg_mu_cos;
0114 applyCos(eg_mu_delta_phi, n);
0115 setLut(lut_eg_mu_cos, eg_mu_delta_phi, precisions["PRECISION-EG-MU-Math"]);
0116
0117 scale1 = &scaleMap.find("EG-ET")->second;
0118 std::vector<long long> lut_eg_et;
0119 getLut(lut_eg_et, scale1, precisions["PRECISION-EG-MU-MassPt"]);
0120
0121 scale1 = &scaleMap.find("MU-ET")->second;
0122 std::vector<long long> lut_mu_et;
0123 getLut(lut_mu_et, scale1, precisions["PRECISION-EG-MU-MassPt"]);
0124 for (size_t ii = 0; ii < lut_mu_et.size(); ii++) {
0125 std::cout << lut_mu_et.at(ii) << "\n";
0126 }
0127 }
0128
0129 for (std::map<std::string, L1TUtmAlgorithm>::const_iterator cit = algoMap.begin(); cit != algoMap.end(); cit++) {
0130 const L1TUtmAlgorithm& algo = cit->second;
0131 std::cout << "algo name = " << algo.getName() << "\n";
0132 std::cout << "algo exp. = " << algo.getExpression() << "\n";
0133 std::cout << "algo exp. in cond. = " << algo.getExpressionInCondition() << "\n";
0134
0135 const std::vector<std::string>& rpn_vec = algo.getRpnVector();
0136 for (size_t ii = 0; ii < rpn_vec.size(); ii++) {
0137 const std::string& token = rpn_vec.at(ii);
0138 if (Algorithm::isGate(token))
0139 continue;
0140 const L1TUtmCondition& condition = condMap.find(token)->second;
0141 std::cout << " cond type = " << condition.getType() << "\n";
0142
0143 const std::vector<L1TUtmCut>& cuts = condition.getCuts();
0144 for (size_t jj = 0; jj < cuts.size(); jj++) {
0145 const L1TUtmCut& cut = cuts.at(jj);
0146 std::cout << " cut name = " << cut.getName() << "\n";
0147 std::cout << " cut target = " << cut.getObjectType() << "\n";
0148 std::cout << " cut type = " << cut.getCutType() << "\n";
0149 std::cout << " cut min. value index = " << cut.getMinimum().value << " " << cut.getMinimum().index << "\n";
0150 std::cout << " cut max. value index = " << cut.getMaximum().value << " " << cut.getMaximum().index << "\n";
0151 std::cout << " cut data = " << cut.getData() << "\n";
0152 }
0153
0154 const std::vector<L1TUtmObject>& objects = condition.getObjects();
0155 for (size_t jj = 0; jj < objects.size(); jj++) {
0156 const L1TUtmObject& object = objects.at(jj);
0157 std::cout << " obj name = " << object.getName() << "\n";
0158 std::cout << " obj type = " << object.getType() << "\n";
0159 std::cout << " obj op = " << object.getComparisonOperator() << "\n";
0160 std::cout << " obj bx = " << object.getBxOffset() << "\n";
0161 if (object.getType() == esObjectType::EXT) {
0162 std::cout << " ext name = " << object.getExternalSignalName() << "\n";
0163 std::cout << " ext ch id = " << object.getExternalChannelId() << "\n";
0164 }
0165
0166 const std::vector<L1TUtmCut>& cuts = object.getCuts();
0167 for (size_t kk = 0; kk < cuts.size(); kk++) {
0168 const L1TUtmCut& cut = cuts.at(kk);
0169 std::cout << " cut name = " << cut.getName() << "\n";
0170 std::cout << " cut target = " << cut.getObjectType() << "\n";
0171 std::cout << " cut type = " << cut.getCutType() << "\n";
0172 std::cout << " cut min. value index = " << cut.getMinimum().value << " " << cut.getMinimum().index
0173 << "\n";
0174 std::cout << " cut max. value index = " << cut.getMaximum().value << " " << cut.getMaximum().index
0175 << "\n";
0176 std::cout << " cut data = " << cut.getData() << "\n";
0177 }
0178 }
0179 }
0180 }
0181 }
0182
0183 void L1TUtmTriggerMenuDumper::endRun(Run const&, EventSetup const&) {}
0184
0185 void L1TUtmTriggerMenuDumper::fillDescriptions(ConfigurationDescriptions& descriptions) {
0186
0187
0188 ParameterSetDescription desc;
0189 desc.setUnknown();
0190 descriptions.addDefault(desc);
0191 }
0192
0193 DEFINE_FWK_MODULE(L1TUtmTriggerMenuDumper);