L1O2OTestAnalyzerExt

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
#include <memory>
#include <sstream>

#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/one/EDAnalyzer.h"

#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/Framework/interface/EventSetup.h"
#include "FWCore/Framework/interface/ESHandle.h"

#include "FWCore/ParameterSet/interface/ParameterSet.h"

#include "CondFormats/L1TObjects/interface/L1TriggerKey.h"
#include "CondFormats/L1TObjects/interface/L1TriggerKeyExt.h"
#include "CondFormats/L1TObjects/interface/L1TriggerKeyListExt.h"
#include "CondFormats/DataRecord/interface/L1TriggerKeyRcd.h"
#include "CondFormats/DataRecord/interface/L1TriggerKeyExtRcd.h"
#include "CondFormats/DataRecord/interface/L1TriggerKeyListExtRcd.h"

#include "CondTools/L1Trigger/interface/Exception.h"
#include "CondTools/L1TriggerExt/interface/DataWriterExt.h"

//
// class decleration
//

class L1O2OTestAnalyzerExt : public edm::one::EDAnalyzer<> {
public:
  explicit L1O2OTestAnalyzerExt(const edm::ParameterSet&);
  ~L1O2OTestAnalyzerExt() override;

private:
  void beginJob() override;
  void analyze(const edm::Event&, const edm::EventSetup&) override;
  void endJob() override;

  // ----------member data ---------------------------
  bool m_printL1TriggerKeyExt;
  bool m_printL1TriggerKeyListExt;
  bool m_printESRecords;
  bool m_printPayloadTokens;
  std::vector<std::string> m_recordsToPrint;
  edm::ESGetToken<L1TriggerKeyExt, L1TriggerKeyExtRcd> l1TriggerKeyExtToken_;
};

L1O2OTestAnalyzerExt::L1O2OTestAnalyzerExt(const edm::ParameterSet& iConfig)
    : m_printL1TriggerKeyExt(iConfig.getParameter<bool>("printL1TriggerKeyExt")),
      m_printL1TriggerKeyListExt(iConfig.getParameter<bool>("printL1TriggerKeyListExt")),
      m_printESRecords(iConfig.getParameter<bool>("printESRecords")),
      m_printPayloadTokens(iConfig.getParameter<bool>("printPayloadTokens")),
      m_recordsToPrint(iConfig.getParameter<std::vector<std::string> >("recordsToPrint")) {
  //now do what ever initialization is needed
  l1TriggerKeyExtToken_ = esConsumes();
}

L1O2OTestAnalyzerExt::~L1O2OTestAnalyzerExt() {
  // do anything here that needs to be done at desctruction time
  // (e.g. close files, deallocate resources etc.)
}

// ------------ method called to for each event  ------------
void L1O2OTestAnalyzerExt::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
  using namespace edm;

  if (m_printL1TriggerKeyListExt) {
    //        ESHandle< L1TriggerKeyListExt > pList ;
    //        iSetup.get< L1TriggerKeyListExtRcd >().get( pList ) ;
    L1TriggerKeyListExt pList;
    l1t::DataWriterExt dataWriter;
    if (!dataWriter.fillLastTriggerKeyList(pList)) {
      edm::LogError("L1-O2O") << "Problem getting last L1TriggerKeyListExt";
    }

    edm::LogInfo("L1-O2O") << "Found " << pList.tscKeyToTokenMap().size() << " TSC keys:";

    L1TriggerKeyListExt::KeyToToken::const_iterator iTSCKey = pList.tscKeyToTokenMap().begin();
    L1TriggerKeyListExt::KeyToToken::const_iterator eTSCKey = pList.tscKeyToTokenMap().end();
    for (; iTSCKey != eTSCKey; ++iTSCKey) {
      edm::LogInfo("L1-O2O") << iTSCKey->first;
      if (m_printPayloadTokens) {
        edm::LogInfo("L1-O2O") << " " << iTSCKey->second;
      }
    }

    L1TriggerKeyListExt::RecordToKeyToToken::const_iterator iRec = pList.recordTypeToKeyToTokenMap().begin();
    L1TriggerKeyListExt::RecordToKeyToToken::const_iterator eRec = pList.recordTypeToKeyToTokenMap().end();
    for (; iRec != eRec; ++iRec) {
      const L1TriggerKeyListExt::KeyToToken& keyTokenMap = iRec->second;
      edm::LogInfo("L1-O2O") << "For record@type " << iRec->first << ", found " << keyTokenMap.size() << " keys:";

      L1TriggerKeyListExt::KeyToToken::const_iterator iKey = keyTokenMap.begin();
      L1TriggerKeyListExt::KeyToToken::const_iterator eKey = keyTokenMap.end();
      for (; iKey != eKey; ++iKey) {
        edm::LogInfo("L1-O2O") << iKey->first;
        if (m_printPayloadTokens) {
          edm::LogInfo("L1-O2O") << " " << iKey->second;
        }
      }
    }
  }

  if (m_printL1TriggerKeyExt) {
    try {
      ESHandle<L1TriggerKeyExt> pKey = iSetup.getHandle(l1TriggerKeyExtToken_);

      edm::LogInfo("L1-O2O") << "Current TSC key = " << pKey->tscKey();

      edm::LogInfo("L1-O2O") << "Current subsystem keys:";
      edm::LogInfo("L1-O2O") << "TSP0 " << pKey->subsystemKey(L1TriggerKeyExt::kuGT);

      edm::LogInfo("L1-O2O") << "Object keys:";
      const L1TriggerKeyExt::RecordToKey& recKeyMap = pKey->recordToKeyMap();
      L1TriggerKeyExt::RecordToKey::const_iterator iRec = recKeyMap.begin();
      L1TriggerKeyExt::RecordToKey::const_iterator eRec = recKeyMap.end();
      for (; iRec != eRec; ++iRec) {
        edm::LogInfo("L1-O2O") << iRec->first << " " << iRec->second;
      }
    } catch (cms::Exception& ex) {
      edm::LogInfo("L1-O2O") << "No L1TriggerKeyExt found.";
    }
  }

  if (m_printESRecords) {
    L1TriggerKeyListExt pList;
    l1t::DataWriterExt dataWriter;
    if (!dataWriter.fillLastTriggerKeyList(pList)) {
      edm::LogError("L1-O2O") << "Problem getting last L1TriggerKeyListExt";
    }

    // Start log string, convert run number into string
    unsigned long long run = iEvent.id().run();
    std::stringstream ss;
    ss << run;
    std::string log = "runNumber=" + ss.str();

    l1t::DataWriterExt writer;

    edm::LogInfo("L1-O2O") << "Run Settings keys:";

    std::vector<std::string>::const_iterator iRec = m_recordsToPrint.begin();
    std::vector<std::string>::const_iterator iEnd = m_recordsToPrint.end();
    for (; iRec != iEnd; ++iRec) {
      std::string payloadToken = writer.payloadToken(*iRec, iEvent.id().run());
      std::string key;

      if (*iRec == "L1TriggerKeyExtRcd") {
        key = pList.tscKey(payloadToken);
      } else {
        key = pList.objectKey(*iRec, payloadToken);
      }

      edm::LogInfo("L1-O2O") << *iRec << " " << key;
      if (m_printPayloadTokens) {
        edm::LogInfo("L1-O2O") << " " << payloadToken;
      }

      // Replace spaces in key with ?s.  Do reverse substitution when
      // making L1TriggerKeyExt.
      replace(key.begin(), key.end(), ' ', '?');
      log += " " + *iRec + "Key=" + key;
    }

    edm::LogInfo("L1-O2O") << log;
  }
}

// ------------ method called once each job just before starting event loop  ------------
void L1O2OTestAnalyzerExt::beginJob() {}

// ------------ method called once each job just after ending the event loop  ------------
void L1O2OTestAnalyzerExt::endJob() {}

//define this as a plug-in
DEFINE_FWK_MODULE(L1O2OTestAnalyzerExt);