HSCParticle

RPCBetaMeasurement

RPCHit4D

Type

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
#ifndef HSCParticle_H
#define HSCParticle_H
#include "DataFormats/Common/interface/AssociationVector.h"
#include "DataFormats/Common/interface/AssociationMap.h"
#include "DataFormats/MuonReco/interface/MuonFwd.h"
#include "DataFormats/MuonReco/interface/Muon.h"
#include "DataFormats/TrackReco/interface/Track.h"
#include "DataFormats/TrackReco/interface/DeDxData.h"
#include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
#include "DataFormats/GeometryVector/interface/GlobalPoint.h"
#include <vector>

#include "DataFormats/PatCandidates/interface/Muon.h"
#include "DataFormats/PatCandidates/interface/PackedCandidate.h"
#include "DataFormats/PatCandidates/interface/IsolatedTrack.h"
#include "DataFormats/TrackReco/interface/DeDxHitInfo.h"

#include "DataFormats/MuonReco/interface/MuonTimeExtra.h"
#include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCPCaloInfo.h"

namespace susybsm {

  /// define arbitration schemes
  namespace HSCParticleType {
    enum Type { globalMuon, trackerMuon, matchedStandAloneMuon, standAloneMuon, innerTrack, unknown };
  }

  class RPCHit4D {
  public:
    int id;
    int bx;
    GlobalPoint gp;
    bool operator<(const RPCHit4D& other) const { return gp.mag() < other.gp.mag(); }
  };

  class RPCBetaMeasurement {
  public:
    bool isCandidate;
    float beta;

    RPCBetaMeasurement() {
      isCandidate = false;
      beta = -9999;
    }
  };

  class HSCParticle {
  public:
    // constructor
    HSCParticle() {}

    // check available infos
    bool hasTrack() const { return track_.packedCandRef().isNonnull(); }
    bool hasMuon() const { return muon_.isNonnull(); }
    bool hasMuonRef() const { return muonRef_.isNonnull(); }
    bool hasMTMuonRef() const { return MTMuonRef_.isNonnull(); }
    bool hasTrackRef() const { return trackRef_.isNonnull(); }
    bool hasTrackIsoRef() const { return trackIsoRef_.isNonnull(); }
    bool hasRpcInfo() const { return rpc_.beta != -9999; }
    bool hasCaloInfo() const { return caloInfoRef_.isNonnull(); }

    // set infos
    void setDeDxHitInfo(const reco::DeDxHitInfo* data) { dedxHitInfo_ = data; }
    void setTrack(const pat::IsolatedTrack& data) { track_ = data; }
    void setMuon(const pat::MuonRef& data) { muon_ = data; }
    void setMuon(const reco::MuonRef& data) { muonRef_ = data; }
    void setMTMuon(const reco::MuonRef& data) { MTMuonRef_ = data; }
    void setTrack(const reco::TrackRef& data) { trackRef_ = data; }
    void setTrackIso(const reco::TrackRef& data) { trackIsoRef_ = data; }
    void setRpc(const RPCBetaMeasurement& data) { rpc_ = data; }
    void setCaloInfo(const HSCPCaloInfoRef& data) { caloInfoRef_ = data; }

    // get infos
    const reco::DeDxHitInfo* dedxHitInfo() const { return dedxHitInfo_; }
    pat::IsolatedTrack track() const { return track_; }
    pat::MuonRef muon() const { return muon_; }
    reco::TrackRef trackRef() const { return trackRef_; }
    reco::TrackRef trackIsoRef() const { return trackIsoRef_; }
    reco::MuonRef muonRef() const { return muonRef_; }
    reco::MuonRef MTMuonRef() const { return MTMuonRef_; }
    HSCPCaloInfoRef caloInfoRef() const { return caloInfoRef_; }
    const RPCBetaMeasurement& rpc() const { return rpc_; }

    // shortcut of long function
    float p() const;
    float pt() const;
    int type() const;

  private:
    const reco::DeDxHitInfo* dedxHitInfo_ = nullptr;
    pat::IsolatedTrack track_;
    pat::MuonRef muon_;
    reco::TrackRef trackRef_;     //TrackRef from refitted track collection (dE/dx purposes)
    reco::TrackRef trackIsoRef_;  //TrackRef from general track collection (isolation purposes)
    reco::MuonRef muonRef_;
    reco::MuonRef MTMuonRef_;  //Muon reconstructed from MT muon segments.  SA only
    HSCPCaloInfoRef caloInfoRef_;

    RPCBetaMeasurement rpc_;
  };

  typedef std::vector<HSCParticle> HSCParticleCollection;
  typedef edm::Ref<HSCParticleCollection> HSCParticleRef;
  typedef edm::RefProd<HSCParticleCollection> HSCParticleRefProd;
  typedef edm::RefVector<HSCParticleCollection> HSCParticleRefVector;
  typedef edm::AssociationMap<edm::OneToOne<reco::TrackCollection, EcalRecHitCollection> > TracksEcalRecHitsMap;
}  // namespace susybsm
#endif