HLTTauDQMPath

Object

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
// -*- c++ -*-
#ifndef DQMOffline_Trigger_HLTTauDQMPath_h
#define DQMOffline_Trigger_HLTTauDQMPath_h

#include "DataFormats/Math/interface/LorentzVector.h"

#include <tuple>
#include <vector>
#include <string>

class HLTConfigProvider;
namespace edm {
  class ParameterSet;
  class TriggerResults;
}  // namespace edm
namespace trigger {
  class TriggerEvent;
  class TriggerObject;
}  // namespace trigger
struct HLTTauDQMOfflineObjects;

class HLTTauDQMPath {
public:
  using LV = math::XYZTLorentzVectorD;
  using LVColl = std::vector<LV>;
  typedef std::tuple<std::string, std::string, size_t> FilterIndex;

  constexpr static size_t kName = 0;
  constexpr static size_t kType = 1;
  constexpr static size_t kModuleIndex = 2;
  constexpr static size_t kInvalidIndex = std::numeric_limits<size_t>::max();

  struct Object {
    const trigger::TriggerObject& object;
    const int id;  // from TriggerTypeDefs.h
  };

  HLTTauDQMPath(std::string pathName, std::string hltProcess, bool doRefAnalysis, const HLTConfigProvider& HLTCP);
  ~HLTTauDQMPath();

  bool isValid() const { return isValid_; }

  bool fired(const edm::TriggerResults& triggerResults) const;

  // index (to getFilterName, getFilterIndex) of the last passed filter
  // -1, if the first filter rejects the event
  int lastPassedFilter(const edm::TriggerResults& triggerResults) const;

  const std::string& getPathName() const { return pathName_; }
  const unsigned int getPathIndex() const { return pathIndex_; }

  size_t filtersSize() const { return filterIndices_.size(); }
  const std::string& getFilterName(size_t i) const { return std::get<kName>(filterIndices_[i]); }
  const std::string& getFilterType(size_t i) const { return std::get<kType>(filterIndices_[i]); }
  int getFilterNTaus(size_t i) const {
    if (i < filterTauN_.size())
      return filterTauN_[i];
    else
      return 0;
  }
  int getFilterNElectrons(size_t i) const {
    if (i < filterElectronN_.size())
      return filterElectronN_[i];
    else
      return 0;
  }
  int getFilterNMuons(size_t i) const {
    if (i < filterMuonN_.size())
      return filterMuonN_[i];
    else
      return 0;
  }
  int getFilterMET(size_t i) const {
    if (i < filterMET_.size())
      return filterMET_[i];
    else
      return 0;
  }
  int getFilterLevel(size_t i) const {
    if (i < filterLevel_.size())
      return filterLevel_[i];
    else
      return 0;
  }

  bool isFirstFilterL1Seed() const { return isFirstL1Seed_; }
  const std::string& getLastFilterName() const { return std::get<kName>(filterIndices_.back()); }

  bool hasL2Taus() const { return lastL2TauFilterIndex_ != kInvalidIndex; }
  bool hasL3Taus() const { return lastL3TauFilterIndex_ != kInvalidIndex; }
  bool hasL2Electrons() const { return lastL2ElectronFilterIndex_ != kInvalidIndex; }
  bool hasL3Electrons() const { return lastL3ElectronFilterIndex_ != kInvalidIndex; }
  bool hasL2Muons() const { return lastL2MuonFilterIndex_ != kInvalidIndex; }
  bool hasL3Muons() const { return lastL3MuonFilterIndex_ != kInvalidIndex; }
  bool hasL2CaloMET() const { return lastL2METFilterIndex_ != kInvalidIndex; }
  size_t getLastFilterBeforeL2TauIndex() const { return lastFilterBeforeL2TauIndex_; }
  size_t getLastL2TauFilterIndex() const { return lastL2TauFilterIndex_; }
  size_t getLastFilterBeforeL3TauIndex() const { return lastFilterBeforeL3TauIndex_; }
  size_t getLastL3TauFilterIndex() const { return lastL3TauFilterIndex_; }

  size_t getLastFilterBeforeL2ElectronIndex() const { return lastFilterBeforeL2ElectronIndex_; }
  size_t getLastL2ElectronFilterIndex() const { return lastL2ElectronFilterIndex_; }
  size_t getLastFilterBeforeL3ElectronIndex() const { return lastFilterBeforeL3ElectronIndex_; }
  size_t getLastL3ElectronFilterIndex() const { return lastL3ElectronFilterIndex_; }

  size_t getLastFilterBeforeL2MuonIndex() const { return lastFilterBeforeL2MuonIndex_; }
  size_t getLastL2MuonFilterIndex() const { return lastL2MuonFilterIndex_; }
  size_t getLastFilterBeforeL3MuonIndex() const { return lastFilterBeforeL3MuonIndex_; }
  size_t getLastL3MuonFilterIndex() const { return lastL3MuonFilterIndex_; }

  size_t getLastFilterBeforeL2CaloMETIndex() const { return lastFilterBeforeL2METIndex_; }
  size_t getLastL2CaloMETFilterIndex() const { return lastL2METFilterIndex_; }
  size_t getFirstFilterBeforeL2CaloMETIndex() const { return firstFilterBeforeL2METIndex_; }
  size_t getFirstL2CaloMETFilterIndex() const { return firstL2METFilterIndex_; }

  // index (to edm::TriggerResults) of a filter
  size_t getFilterIndex(size_t i) const { return std::get<kModuleIndex>(filterIndices_[i]); }

  // Get objects associated to a filter, i is the "internal" index
  void getFilterObjects(const trigger::TriggerEvent& triggerEvent, size_t i, std::vector<Object>& retval) const;

  // i = filter index
  bool offlineMatching(size_t i,
                       const std::vector<Object>& triggerObjects,
                       const HLTTauDQMOfflineObjects& offlineObjects,
                       double dR,
                       std::vector<Object>& matchedTriggerObjects,
                       HLTTauDQMOfflineObjects& matchedOfflineObjects) const;

  bool goodOfflineEvent(size_t i, const HLTTauDQMOfflineObjects& offlineObjects) const;

private:
  const std::string hltProcess_;
  const bool doRefAnalysis_;

  std::vector<FilterIndex> filterIndices_;
  std::vector<int> filterTauN_;
  std::vector<int> filterElectronN_;
  std::vector<int> filterMuonN_;
  std::vector<int> filterMET_;
  std::vector<int> filterLevel_;
  const std::string pathName_;
  const unsigned int pathIndex_;
  size_t lastFilterBeforeL2TauIndex_;
  size_t lastL2TauFilterIndex_;
  size_t lastFilterBeforeL3TauIndex_;
  size_t lastL3TauFilterIndex_;
  size_t lastFilterBeforeL2ElectronIndex_;
  size_t lastL2ElectronFilterIndex_;
  size_t lastFilterBeforeL3ElectronIndex_;
  size_t lastL3ElectronFilterIndex_;
  size_t lastFilterBeforeL2MuonIndex_;
  size_t lastL2MuonFilterIndex_;
  size_t lastFilterBeforeL3MuonIndex_;
  size_t lastL3MuonFilterIndex_;
  size_t lastFilterBeforeL2METIndex_;
  size_t lastL2METFilterIndex_;
  size_t firstFilterBeforeL2METIndex_;
  size_t firstL2METFilterIndex_;
  bool isFirstL1Seed_;
  bool isValid_;
};

#endif