PFJet

Specific

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 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
#ifndef JetReco_PFJet_h
#define JetReco_PFJet_h

/** \class reco::PFJet
 *
 * \short Jets made from PFObjects
 *
 * PFJet represents Jets made from Particle Flow objects
 * Provide energy contributions from different PF types
 * in addition to generic Jet parameters
 *
 * \author Fedor Ratnikov, UMd, Apr 24, 2007
 ************************************************************/

#include "DataFormats/JetReco/interface/Jet.h"
#include "DataFormats/ParticleFlowCandidate/interface/PFCandidateFwd.h"
#include "DataFormats/TrackReco/interface/TrackFwd.h"

namespace reco {
  class PFJet : public Jet {
  public:
    typedef reco::PFCandidatePtr ConstituentTypePtr;
    typedef reco::PFCandidateFwdPtr ConstituentTypeFwdPtr;

    struct Specific {
      Specific()
          : mChargedHadronEnergy(0),
            mNeutralHadronEnergy(0),
            mPhotonEnergy(0),
            mElectronEnergy(0),
            mMuonEnergy(0),
            mHFHadronEnergy(0),
            mHFEMEnergy(0),

            mChargedHadronMultiplicity(0),
            mNeutralHadronMultiplicity(0),
            mPhotonMultiplicity(0),
            mElectronMultiplicity(0),
            mMuonMultiplicity(0),
            mHFHadronMultiplicity(0),
            mHFEMMultiplicity(0),

            mChargedEmEnergy(0),
            mChargedMuEnergy(0),
            mNeutralEmEnergy(0),

            mChargedMultiplicity(0),
            mNeutralMultiplicity(0),

            mHOEnergy(0) {}
      float mChargedHadronEnergy;
      float mNeutralHadronEnergy;
      float mPhotonEnergy;
      float mElectronEnergy;
      float mMuonEnergy;
      float mHFHadronEnergy;
      float mHFEMEnergy;

      int mChargedHadronMultiplicity;
      int mNeutralHadronMultiplicity;
      int mPhotonMultiplicity;
      int mElectronMultiplicity;
      int mMuonMultiplicity;
      int mHFHadronMultiplicity;
      int mHFEMMultiplicity;

      //old (deprecated) data members
      //kept only for backwards compatibility:
      float mChargedEmEnergy;
      float mChargedMuEnergy;
      float mNeutralEmEnergy;
      int mChargedMultiplicity;
      int mNeutralMultiplicity;

      float mHOEnergy;
    };

    /** Default constructor*/
    PFJet() {}

    /** Constructor from values*/
    PFJet(const LorentzVector& fP4,
          const Point& fVertex,
          const Specific& fSpecific,
          const Jet::Constituents& fConstituents);

    PFJet(const LorentzVector& fP4, const Point& fVertex, const Specific& fSpecific);

    /** backward compatible, vertex=(0,0,0) */
    PFJet(const LorentzVector& fP4, const Specific& fSpecific, const Jet::Constituents& fConstituents);

    ~PFJet() override {}

    /// chargedHadronEnergy
    float chargedHadronEnergy() const { return m_specific.mChargedHadronEnergy; }
    ///  chargedHadronEnergyFraction
    float chargedHadronEnergyFraction() const { return chargedHadronEnergy() / energy(); }
    /// neutralHadronEnergy
    float neutralHadronEnergy() const { return m_specific.mNeutralHadronEnergy; }
    /// neutralHadronEnergyFraction
    float neutralHadronEnergyFraction() const { return neutralHadronEnergy() / energy(); }
    /// photonEnergy
    float photonEnergy() const { return m_specific.mPhotonEnergy; }
    /// photonEnergyFraction
    float photonEnergyFraction() const { return photonEnergy() / energy(); }
    /// electronEnergy
    float electronEnergy() const { return m_specific.mElectronEnergy; }
    /// electronEnergyFraction
    float electronEnergyFraction() const { return electronEnergy() / energy(); }
    /// muonEnergy
    float muonEnergy() const { return m_specific.mMuonEnergy; }
    /// muonEnergyFraction
    float muonEnergyFraction() const { return muonEnergy() / energy(); }
    /// HFHadronEnergy
    float HFHadronEnergy() const { return m_specific.mHFHadronEnergy; }
    /// HFHadronEnergyFraction
    float HFHadronEnergyFraction() const { return HFHadronEnergy() / energy(); }
    /// HFEMEnergy
    float HFEMEnergy() const { return m_specific.mHFEMEnergy; }
    /// HFEMEnergyFraction
    float HFEMEnergyFraction() const { return HFEMEnergy() / energy(); }

    /// chargedHadronMultiplicity
    int chargedHadronMultiplicity() const { return m_specific.mChargedHadronMultiplicity; }
    /// neutralHadronMultiplicity
    int neutralHadronMultiplicity() const { return m_specific.mNeutralHadronMultiplicity; }
    /// photonMultiplicity
    int photonMultiplicity() const { return m_specific.mPhotonMultiplicity; }
    /// electronMultiplicity
    int electronMultiplicity() const { return m_specific.mElectronMultiplicity; }
    /// muonMultiplicity
    int muonMultiplicity() const { return m_specific.mMuonMultiplicity; }
    /// HFHadronMultiplicity
    int HFHadronMultiplicity() const { return m_specific.mHFHadronMultiplicity; }
    /// HFEMMultiplicity
    int HFEMMultiplicity() const { return m_specific.mHFEMMultiplicity; }

    /// chargedEmEnergy
    float chargedEmEnergy() const { return m_specific.mChargedEmEnergy; }
    /// chargedEmEnergyFraction
    float chargedEmEnergyFraction() const { return chargedEmEnergy() / energy(); }
    /// chargedMuEnergy
    float chargedMuEnergy() const { return m_specific.mChargedMuEnergy; }
    /// chargedMuEnergyFraction
    float chargedMuEnergyFraction() const { return chargedMuEnergy() / energy(); }
    /// neutralEmEnergy
    float neutralEmEnergy() const { return m_specific.mNeutralEmEnergy; }
    /// neutralEmEnergyFraction
    float neutralEmEnergyFraction() const { return neutralEmEnergy() / energy(); }

    /// chargedMultiplicity
    int chargedMultiplicity() const { return m_specific.mChargedMultiplicity; }
    /// neutralMultiplicity
    int neutralMultiplicity() const { return m_specific.mNeutralMultiplicity; }

    /// hoEnergy
    float hoEnergy() const { return m_specific.mHOEnergy; }
    /// hoEnergyFraction
    float hoEnergyFraction() const { return hoEnergy() / energy(); }

    /// get specific constituent
    virtual reco::PFCandidatePtr getPFConstituent(unsigned fIndex) const;

    /// get all constituents
    virtual std::vector<reco::PFCandidatePtr> getPFConstituents() const;

    /// \ brief get all tracks in the jets
    /// All PFCandidates hold a reference to a track. All the non-null
    /// references are added to the returned TrackRefVector
    reco::TrackRefVector getTrackRefs() const;

    // block accessors

    const Specific& getSpecific() const { return m_specific; }

    /// Polymorphic clone
    PFJet* clone() const override;

    /// Print object in details
    std::string print() const override;

  private:
    /// Polymorphic overlap
    bool overlap(const Candidate&) const override;

    //Variables specific to to the PFJet class
    Specific m_specific;
  };

  // streamer
  std::ostream& operator<<(std::ostream& out, const reco::PFJet& jet);
}  // namespace reco
// temporary fix before include_checcker runs globally
#include "DataFormats/JetReco/interface/PFJetCollection.h"  //INCLUDECHECKER:SKIP
#endif