File indexing completed on 2024-04-06 11:57:30
0001 #ifndef HSCParticle_H
0002 #define HSCParticle_H
0003 #include "DataFormats/Common/interface/AssociationVector.h"
0004 #include "DataFormats/Common/interface/AssociationMap.h"
0005 #include "DataFormats/MuonReco/interface/MuonFwd.h"
0006 #include "DataFormats/MuonReco/interface/Muon.h"
0007 #include "DataFormats/TrackReco/interface/Track.h"
0008 #include "DataFormats/TrackReco/interface/DeDxData.h"
0009 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
0010 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0011 #include <vector>
0012
0013 #include "DataFormats/MuonReco/interface/MuonTimeExtra.h"
0014 #include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCPCaloInfo.h"
0015
0016 namespace susybsm {
0017
0018
0019 namespace HSCParticleType {
0020 enum Type { globalMuon, trackerMuon, matchedStandAloneMuon, standAloneMuon, innerTrack, unknown };
0021 }
0022
0023 class RPCHit4D {
0024 public:
0025 int id;
0026 int bx;
0027 GlobalPoint gp;
0028 bool operator<(const RPCHit4D& other) const { return gp.mag() < other.gp.mag(); }
0029 };
0030
0031 class RPCBetaMeasurement {
0032 public:
0033 bool isCandidate;
0034 float beta;
0035
0036 RPCBetaMeasurement() {
0037 isCandidate = false;
0038 beta = -9999;
0039 }
0040 };
0041
0042 class HSCParticle {
0043 public:
0044
0045 HSCParticle() {}
0046
0047
0048 bool hasMuonRef() const { return muonRef_.isNonnull(); }
0049 bool hasMTMuonRef() const { return MTMuonRef_.isNonnull(); }
0050 bool hasTrackRef() const { return trackRef_.isNonnull(); }
0051 bool hasTrackIsoRef() const { return trackIsoRef_.isNonnull(); }
0052 bool hasRpcInfo() const { return rpc_.beta != -9999; }
0053 bool hasCaloInfo() const { return caloInfoRef_.isNonnull(); }
0054
0055
0056 void setMuon(const reco::MuonRef& data) { muonRef_ = data; }
0057 void setMTMuon(const reco::MuonRef& data) { MTMuonRef_ = data; }
0058 void setTrack(const reco::TrackRef& data) { trackRef_ = data; }
0059 void setTrackIso(const reco::TrackRef& data) { trackIsoRef_ = data; }
0060 void setRpc(const RPCBetaMeasurement& data) { rpc_ = data; }
0061 void setCaloInfo(const HSCPCaloInfoRef& data) { caloInfoRef_ = data; }
0062
0063
0064 reco::TrackRef trackRef() const { return trackRef_; }
0065 reco::TrackRef trackIsoRef() const { return trackIsoRef_; }
0066 reco::MuonRef muonRef() const { return muonRef_; }
0067 reco::MuonRef MTMuonRef() const { return MTMuonRef_; }
0068 HSCPCaloInfoRef caloInfoRef() const { return caloInfoRef_; }
0069 const RPCBetaMeasurement& rpc() const { return rpc_; }
0070
0071
0072 float p() const;
0073 float pt() const;
0074 int type() const;
0075
0076 private:
0077 reco::TrackRef trackRef_;
0078 reco::TrackRef trackIsoRef_;
0079 reco::MuonRef muonRef_;
0080 reco::MuonRef MTMuonRef_;
0081 HSCPCaloInfoRef caloInfoRef_;
0082
0083 RPCBetaMeasurement rpc_;
0084 };
0085
0086 typedef std::vector<HSCParticle> HSCParticleCollection;
0087 typedef edm::Ref<HSCParticleCollection> HSCParticleRef;
0088 typedef edm::RefProd<HSCParticleCollection> HSCParticleRefProd;
0089 typedef edm::RefVector<HSCParticleCollection> HSCParticleRefVector;
0090 typedef edm::AssociationMap<edm::OneToOne<reco::TrackCollection, EcalRecHitCollection> > TracksEcalRecHitsMap;
0091 }
0092 #endif