Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-10-25 09:55:05

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::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   //We use es types for scale map to use auxiliary functions without having to duplicate code
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   //The following says we do not know what parameters are allowed so do no validation
0196   // Please change this to state exactly what you do use, even if it is no parameters
0197   ParameterSetDescription desc;
0198   desc.setUnknown();
0199   descriptions.addDefault(desc);
0200 }
0201 
0202 DEFINE_FWK_MODULE(L1TUtmTriggerMenuDumper);