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
//
//

#include "DataFormats/PatCandidates/interface/TriggerObject.h"

#include "FWCore/Utilities/interface/EDMException.h"

using namespace pat;

// Constructors and Destructor

// Default constructor
TriggerObject::TriggerObject() : reco::LeafCandidate() { triggerObjectTypes_.clear(); }

// Constructor from trigger::TriggerObject
TriggerObject::TriggerObject(const trigger::TriggerObject& trigObj)
    : reco::LeafCandidate(0, trigObj.particle().p4(), reco::Particle::Point(0., 0., 0.), trigObj.id()), refToOrig_() {
  triggerObjectTypes_.clear();
}

// Constructors from base class object
TriggerObject::TriggerObject(const reco::LeafCandidate& leafCand) : reco::LeafCandidate(leafCand), refToOrig_() {
  triggerObjectTypes_.clear();
}

// Constructors from base candidate reference (for 'l1extra' particles)
TriggerObject::TriggerObject(const reco::CandidateBaseRef& candRef)
    : reco::LeafCandidate(*candRef), refToOrig_(candRef) {
  triggerObjectTypes_.clear();
}

// Constructors from Lorentz-vectors and (optional) PDG ID
TriggerObject::TriggerObject(const reco::Particle::LorentzVector& vec, int id)
    : reco::LeafCandidate(0, vec, reco::Particle::Point(0., 0., 0.), id), refToOrig_() {
  triggerObjectTypes_.clear();
}
TriggerObject::TriggerObject(const reco::Particle::PolarLorentzVector& vec, int id)
    : reco::LeafCandidate(0, vec, reco::Particle::Point(0., 0., 0.), id), refToOrig_() {
  triggerObjectTypes_.clear();
}

// Methods

// Get all trigger object type identifiers
std::vector<int> TriggerObject::triggerObjectTypes() const {
  std::vector<int> triggerObjectTypes;
  for (size_t iTo = 0; iTo < triggerObjectTypes_.size(); ++iTo) {
    triggerObjectTypes.push_back(triggerObjectTypes_.at(iTo));
  }
  return triggerObjectTypes;
}

// Checks, if a certain label of original collection is assigned
bool TriggerObject::hasCollection(const std::string& collName) const {
  // True, if collection name is simply fine
  if (collName == collection_)
    return true;
  // Check, if collection name possibly fits in an edm::InputTag approach
  const edm::InputTag collectionTag(collection_);
  const edm::InputTag collTag(collName);
  // If evaluated collection tag contains a process name, it must have been found already by identity check
  if (collTag.process().empty()) {
    // Check instance ...
    if ((collTag.instance().empty() && collectionTag.instance().empty()) ||
        collTag.instance() == collectionTag.instance()) {
      // ... and label
      return (collTag.label() == collectionTag.label());
    }
  }
  return false;
}

// Checks, if a certain trigger object type identifier is assigned
bool TriggerObject::hasTriggerObjectType(trigger::TriggerObjectType triggerObjectType) const {
  for (size_t iF = 0; iF < triggerObjectTypes_.size(); ++iF) {
    if (triggerObjectType == triggerObjectTypes_.at(iF))
      return true;
  }
  return false;
}

// Special methods for 'l1extra' particles

// Getters specific to the 'l1extra' particle types
// Exceptions of type 'edm::errors::InvalidReference' are thrown,
// if wrong particle type is requested

// EM
const l1extra::L1EmParticleRef TriggerObject::origL1EmRef() const {
  l1extra::L1EmParticleRef l1Ref;
  try {
    l1Ref = origObjRef().castTo<l1extra::L1EmParticleRef>();
  } catch (edm::Exception const& X) {
    if (X.categoryCode() != edm::errors::InvalidReference)
      throw X;
  }
  return l1Ref;
}

// EtMiss
const l1extra::L1EtMissParticleRef TriggerObject::origL1EtMissRef() const {
  l1extra::L1EtMissParticleRef l1Ref;
  try {
    l1Ref = origObjRef().castTo<l1extra::L1EtMissParticleRef>();
  } catch (edm::Exception const& X) {
    if (X.categoryCode() != edm::errors::InvalidReference)
      throw X;
  }
  return l1Ref;
}

// Jet
const l1extra::L1JetParticleRef TriggerObject::origL1JetRef() const {
  l1extra::L1JetParticleRef l1Ref;
  try {
    l1Ref = origObjRef().castTo<l1extra::L1JetParticleRef>();
  } catch (edm::Exception const& X) {
    if (X.categoryCode() != edm::errors::InvalidReference)
      throw X;
  }
  return l1Ref;
}

// Muon
const l1extra::L1MuonParticleRef TriggerObject::origL1MuonRef() const {
  l1extra::L1MuonParticleRef l1Ref;
  try {
    l1Ref = origObjRef().castTo<l1extra::L1MuonParticleRef>();
  } catch (edm::Exception const& X) {
    if (X.categoryCode() != edm::errors::InvalidReference)
      throw X;
  }
  return l1Ref;
}