Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:20:32

0001 // -*- C++ -*-
0002 //
0003 // L1TUtmTriggerMenuDumper:  Dump the menu to screen...
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   //We use es types for scale map to use auxiliary functions without having to duplicate code
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   //The following says we do not know what parameters are allowed so do no validation
0187   // Please change this to state exactly what you do use, even if it is no parameters
0188   ParameterSetDescription desc;
0189   desc.setUnknown();
0190   descriptions.addDefault(desc);
0191 }
0192 
0193 DEFINE_FWK_MODULE(L1TUtmTriggerMenuDumper);