TriggerFilter

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

// -*- C++ -*-
//
// Package:    PatCandidates
// Class:      pat::TriggerFilter
//
//
/**
  \class    pat::TriggerFilter TriggerFilter.h "DataFormats/PatCandidates/interface/TriggerFilter.h"
  \brief    Analysis-level HLTrigger filter class

   TriggerFilter implements a container for trigger filters' information within the 'pat' namespace.
   For detailed information, consult
   https://twiki.cern.ch/twiki/bin/view/CMS/SWGuidePATTrigger#TriggerFilter

  \author   Volker Adler
*/

#include <string>
#include <vector>

#include "FWCore/Utilities/interface/InputTag.h"
#include "DataFormats/Common/interface/Ref.h"
#include "DataFormats/Common/interface/RefProd.h"
#include "DataFormats/Common/interface/RefVector.h"
#include "DataFormats/Common/interface/RefVectorIterator.h"
#include "DataFormats/HLTReco/interface/TriggerTypeDefs.h"

namespace pat {

  class TriggerFilter {
    /// Data Members

    /// Label of the filter
    std::string label_;
    /// CMSSW module type
    std::string type_;
    /// Indeces of trigger objects in pat::TriggerObjectCollection in event
    /// as produced together with the pat::TriggerFilterCollection
    std::vector<unsigned> objectKeys_;
    /// List of (unique) special identifiers for the used trigger object types as defined in
    /// trigger::TriggerObjectType (DataFormats/HLTReco/interface/TriggerTypeDefs.h),
    /// possibly empty or containing also zeroes
    std::vector<trigger::TriggerObjectType> triggerObjectTypes_;
    /// Indicator for filter status: -1: not run, 0: failed, 1: succeeded
    int status_;
    /// Indicator for being an L3 filter
    /// available starting from CMSSW_4_2_3
    bool saveTags_;

  public:
    /// Constructors and Desctructor

    /// Default constructor
    TriggerFilter();
    /// Constructor from std::string for filter label
    TriggerFilter(const std::string& label, int status = -1, bool saveTags = false);
    /// Constructor from edm::InputTag for filter label
    TriggerFilter(const edm::InputTag& tag, int status = -1, bool saveTags = false);

    /// Destructor
    virtual ~TriggerFilter() {}

    /// Methods

    /// Set the filter label
    void setLabel(const std::string& label) { label_ = label; };
    /// Set the filter module type
    void setType(const std::string& type) { type_ = type; };
    /// Add a new trigger object collection index
    void addObjectKey(unsigned objectKey) {
      if (!hasObjectKey(objectKey))
        objectKeys_.push_back(objectKey);
    };
    /// Add a new trigger object type identifier
    void addTriggerObjectType(trigger::TriggerObjectType triggerObjectType) {
      if (!hasTriggerObjectType(triggerObjectType))
        triggerObjectTypes_.push_back(triggerObjectType);
    };
    void addTriggerObjectType(int triggerObjectType) {
      addTriggerObjectType(trigger::TriggerObjectType(triggerObjectType));
    };
    void addObjectId(trigger::TriggerObjectType triggerObjectType) {
      addTriggerObjectType(triggerObjectType);
    };  // for backward compatibility
    void addObjectId(int triggerObjectType) {
      addTriggerObjectType(trigger::TriggerObjectType(triggerObjectType));
    };  // for backward compatibility
    /// Set the filter status,
    /// only -1,0,1 accepted; returns 'false' (and does not modify the status) otherwise
    bool setStatus(int status);
    /// Set the L3 status
    void setSaveTags(bool saveTags) { saveTags_ = saveTags; };
    /// Get the filter label
    const std::string& label() const { return label_; };
    /// Get the filter module type
    const std::string& type() const { return type_; };
    /// Get all trigger object collection indeces
    const std::vector<unsigned>& objectKeys() const { return objectKeys_; };
    /// Get all trigger object type identifiers
    //       std::vector< trigger::TriggerObjectType > triggerObjectTypes() const { return triggerObjectTypes_; };
    //       std::vector< trigger::TriggerObjectType > objectIds()          const { return triggerObjectTypes(); }; // for backward compatibility
    std::vector<int> triggerObjectTypes() const;                          // for backward compatibilit
    std::vector<int> objectIds() const { return triggerObjectTypes(); };  // for double backward compatibility
    /// Get the filter status
    int status() const { return status_; };
    /// Get the L3 status
    bool saveTags() const { return saveTags_; };
    bool isL3() const { return saveTags(); };
    bool isFiring() const { return (saveTags() && status() == 1); };
    /// Checks, if a certain trigger object collection index is assigned
    bool hasObjectKey(unsigned objectKey) const;
    /// Checks, if a certain trigger object type identifier is assigned
    bool hasTriggerObjectType(trigger::TriggerObjectType triggerObjectType) const;
    bool hasTriggerObjectType(int triggerObjectType) const {
      return hasTriggerObjectType(trigger::TriggerObjectType(triggerObjectType));
    };
    bool hasObjectId(trigger::TriggerObjectType triggerObjectType) const {
      return hasTriggerObjectType(triggerObjectType);
    };  // for backward compatibility
    bool hasObjectId(int triggerObjectType) const {
      return hasTriggerObjectType(trigger::TriggerObjectType(triggerObjectType));
    };  // for backward compatibility
  };

  /// Collection of TriggerFilter
  typedef std::vector<TriggerFilter> TriggerFilterCollection;
  /// Persistent reference to an item in a TriggerFilterCollection
  typedef edm::Ref<TriggerFilterCollection> TriggerFilterRef;
  /// Persistent reference to a TriggerFilterCollection product
  typedef edm::RefProd<TriggerFilterCollection> TriggerFilterRefProd;
  /// Vector of persistent references to items in the same TriggerFilterCollection
  typedef edm::RefVector<TriggerFilterCollection> TriggerFilterRefVector;
  /// Const iterator over vector of persistent references to items in the same TriggerFilterCollection
  typedef edm::RefVectorIterator<TriggerFilterCollection> TriggerFilterRefVectorIterator;

}  // namespace pat

#endif