HLTEventAnalyzerRAW

Macros

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
#ifndef HLTrigger_HLTcore_HLTEventAnalyzerRAW_h
#define HLTrigger_HLTcore_HLTEventAnalyzerRAW_h

/** \class HLTEventAnalyzerRAW
 *
 *
 *  This class is an EDAnalyzer analyzing the combined HLT information for RAW
 *
 *
 *  \author Martin Grunewald
 *
 */

#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/stream/EDAnalyzer.h"
#include "FWCore/MessageLogger/interface/MessageLogger.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
#include "DataFormats/Common/interface/TriggerResults.h"
#include "DataFormats/HLTReco/interface/TriggerEventWithRefs.h"

namespace edm {
  class ConfigurationDescriptions;
}

//
// class declaration
//
class HLTEventAnalyzerRAW : public edm::stream::EDAnalyzer<> {
public:
  explicit HLTEventAnalyzerRAW(const edm::ParameterSet&);
  ~HLTEventAnalyzerRAW() override = default;
  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);

  void beginRun(edm::Run const&, edm::EventSetup const&) override;
  void endRun(edm::Run const&, edm::EventSetup const&) override {}

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

  virtual void analyzeTrigger(const edm::Event&, const edm::EventSetup&, const std::string& triggerName);

private:
  using LOG = edm::LogVerbatim;

  static constexpr const char* logMsgType_ = "HLTEventAnalyzerRAW";

  template <class TVID, class TVREF>
  void showObjects(TVID const& vids, TVREF const& vrefs, std::string const& name) const;

  template <class TREF>
  void showObject(LOG& log, TREF const& ref) const;

  /// module config parameters
  const std::string processName_;
  const std::string triggerName_;
  const edm::InputTag triggerResultsTag_;
  const edm::EDGetTokenT<edm::TriggerResults> triggerResultsToken_;
  const edm::InputTag triggerEventWithRefsTag_;
  const edm::EDGetTokenT<trigger::TriggerEventWithRefs> triggerEventWithRefsToken_;

  /// additional class data members
  bool const verbose_;
  bool const permissive_;

  edm::Handle<edm::TriggerResults> triggerResultsHandle_;
  edm::Handle<trigger::TriggerEventWithRefs> triggerEventWithRefsHandle_;

  HLTConfigProvider hltConfig_;

  /// payload extracted from TriggerEventWithRefs
  trigger::Vids photonIds_;
  trigger::VRphoton photonRefs_;
  trigger::Vids electronIds_;
  trigger::VRelectron electronRefs_;
  trigger::Vids muonIds_;
  trigger::VRmuon muonRefs_;
  trigger::Vids jetIds_;
  trigger::VRjet jetRefs_;
  trigger::Vids compositeIds_;
  trigger::VRcomposite compositeRefs_;
  trigger::Vids basemetIds_;
  trigger::VRbasemet basemetRefs_;
  trigger::Vids calometIds_;
  trigger::VRcalomet calometRefs_;
  trigger::Vids pixtrackIds_;
  trigger::VRpixtrack pixtrackRefs_;

  trigger::Vids l1emIds_;
  trigger::VRl1em l1emRefs_;
  trigger::Vids l1muonIds_;
  trigger::VRl1muon l1muonRefs_;
  trigger::Vids l1jetIds_;
  trigger::VRl1jet l1jetRefs_;
  trigger::Vids l1etmissIds_;
  trigger::VRl1etmiss l1etmissRefs_;
  trigger::Vids l1hfringsIds_;
  trigger::VRl1hfrings l1hfringsRefs_;

  trigger::Vids l1tmuonIds_;
  trigger::VRl1tmuon l1tmuonRefs_;
  trigger::Vids l1tmuonShowerIds_;
  trigger::VRl1tmuonShower l1tmuonShowerRefs_;
  trigger::Vids l1tegammaIds_;
  trigger::VRl1tegamma l1tegammaRefs_;
  trigger::Vids l1tjetIds_;
  trigger::VRl1tjet l1tjetRefs_;
  trigger::Vids l1ttauIds_;
  trigger::VRl1ttau l1ttauRefs_;
  trigger::Vids l1tetsumIds_;
  trigger::VRl1tetsum l1tetsumRefs_;

  /// Phase 2
  trigger::Vids l1ttkmuIds_;
  trigger::VRl1ttkmuon l1ttkmuRefs_;
  trigger::Vids l1ttkeleIds_;
  trigger::VRl1ttkele l1ttkeleRefs_;
  trigger::Vids l1ttkemIds_;
  trigger::VRl1ttkem l1ttkemRefs_;
  trigger::Vids l1tpfjetIds_;
  trigger::VRl1tpfjet l1tpfjetRefs_;
  trigger::Vids l1tpftauIds_;
  trigger::VRl1tpftau l1tpftauRefs_;
  trigger::Vids l1thpspftauIds_;
  trigger::VRl1thpspftau l1thpspftauRefs_;
  trigger::Vids l1tpftrackIds_;
  trigger::VRl1tpftrack l1tpftrackRefs_;

  trigger::Vids pfjetIds_;
  trigger::VRpfjet pfjetRefs_;
  trigger::Vids pftauIds_;
  trigger::VRpftau pftauRefs_;
  trigger::Vids pfmetIds_;
  trigger::VRpfmet pfmetRefs_;

  trigger::Vids l1tp2gtcandIds_;
  trigger::VRl1tp2gtcand l1tp2gtcandRefs_;
};

template <class TVID, class TVREF>
void HLTEventAnalyzerRAW::showObjects(TVID const& vids, TVREF const& vrefs, std::string const& name) const {
  size_t const size = vids.size();
  assert(size == vrefs.size());

  if (size == 0) {
    return;
  }

  LOG(logMsgType_) << "   " << name << ": size=" << size;
  for (size_t idx = 0; idx < size; ++idx) {
    LOG log(logMsgType_);
    log << "    [" << idx << "] id=" << vids[idx] << " ";
    auto const& ref = vrefs[idx];
    if (permissive_ and not ref.isAvailable()) {
      log << "(Ref with id=" << ref.id() << " not available)";
    } else {
      showObject(log, ref);
    }
  }
}

template <class TREF>
void HLTEventAnalyzerRAW::showObject(LOG& log, TREF const& ref) const {
  log << "pt=" << ref->pt() << " eta=" << ref->eta() << " phi=" << ref->phi() << " mass=" << ref->mass();
}

template <>
void HLTEventAnalyzerRAW::showObject(LOG& log, trigger::VRl1hfrings::value_type const& ref) const;

#endif  // HLTrigger_HLTcore_HLTEventAnalyzerRAW_h