Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-12-05 02:47: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/PatCandidates/interface/Muon.h"
0014 #include "DataFormats/PatCandidates/interface/PackedCandidate.h"
0015 #include "DataFormats/PatCandidates/interface/IsolatedTrack.h"
0016 #include "DataFormats/TrackReco/interface/DeDxHitInfo.h"
0017 
0018 #include "DataFormats/MuonReco/interface/MuonTimeExtra.h"
0019 #include "AnalysisDataFormats/SUSYBSMObjects/interface/HSCPCaloInfo.h"
0020 
0021 namespace susybsm {
0022 
0023   /// define arbitration schemes
0024   namespace HSCParticleType {
0025     enum Type { globalMuon, trackerMuon, matchedStandAloneMuon, standAloneMuon, innerTrack, unknown };
0026   }
0027 
0028   class RPCHit4D {
0029   public:
0030     int id;
0031     int bx;
0032     GlobalPoint gp;
0033     bool operator<(const RPCHit4D& other) const { return gp.mag() < other.gp.mag(); }
0034   };
0035 
0036   class RPCBetaMeasurement {
0037   public:
0038     bool isCandidate;
0039     float beta;
0040 
0041     RPCBetaMeasurement() {
0042       isCandidate = false;
0043       beta = -9999;
0044     }
0045   };
0046 
0047   class HSCParticle {
0048   public:
0049     // constructor
0050     HSCParticle() {}
0051 
0052     // check available infos
0053     bool hasTrack() const { return track_.packedCandRef().isNonnull(); }
0054     bool hasMuon() const { return muon_.isNonnull(); }
0055     bool hasMuonRef() const { return muonRef_.isNonnull(); }
0056     bool hasMTMuonRef() const { return MTMuonRef_.isNonnull(); }
0057     bool hasTrackRef() const { return trackRef_.isNonnull(); }
0058     bool hasTrackIsoRef() const { return trackIsoRef_.isNonnull(); }
0059     bool hasRpcInfo() const { return rpc_.beta != -9999; }
0060     bool hasCaloInfo() const { return caloInfoRef_.isNonnull(); }
0061 
0062     // set infos
0063     void setDeDxHitInfo(const reco::DeDxHitInfo* data) { dedxHitInfo_ = data; }
0064     void setTrack(const pat::IsolatedTrack& data) { track_ = data; }
0065     void setMuon(const pat::MuonRef& data) { muon_ = data; }
0066     void setMuon(const reco::MuonRef& data) { muonRef_ = data; }
0067     void setMTMuon(const reco::MuonRef& data) { MTMuonRef_ = data; }
0068     void setTrack(const reco::TrackRef& data) { trackRef_ = data; }
0069     void setTrackIso(const reco::TrackRef& data) { trackIsoRef_ = data; }
0070     void setRpc(const RPCBetaMeasurement& data) { rpc_ = data; }
0071     void setCaloInfo(const HSCPCaloInfoRef& data) { caloInfoRef_ = data; }
0072 
0073     // get infos
0074     const reco::DeDxHitInfo* dedxHitInfo() const { return dedxHitInfo_; }
0075     pat::IsolatedTrack track() const { return track_; }
0076     pat::MuonRef muon() const { return muon_; }
0077     reco::TrackRef trackRef() const { return trackRef_; }
0078     reco::TrackRef trackIsoRef() const { return trackIsoRef_; }
0079     reco::MuonRef muonRef() const { return muonRef_; }
0080     reco::MuonRef MTMuonRef() const { return MTMuonRef_; }
0081     HSCPCaloInfoRef caloInfoRef() const { return caloInfoRef_; }
0082     const RPCBetaMeasurement& rpc() const { return rpc_; }
0083 
0084     // shortcut of long function
0085     float p() const;
0086     float pt() const;
0087     int type() const;
0088 
0089   private:
0090     const reco::DeDxHitInfo* dedxHitInfo_ = nullptr;
0091     pat::IsolatedTrack track_;
0092     pat::MuonRef muon_;
0093     reco::TrackRef trackRef_;     //TrackRef from refitted track collection (dE/dx purposes)
0094     reco::TrackRef trackIsoRef_;  //TrackRef from general track collection (isolation purposes)
0095     reco::MuonRef muonRef_;
0096     reco::MuonRef MTMuonRef_;  //Muon reconstructed from MT muon segments.  SA only
0097     HSCPCaloInfoRef caloInfoRef_;
0098 
0099     RPCBetaMeasurement rpc_;
0100   };
0101 
0102   typedef std::vector<HSCParticle> HSCParticleCollection;
0103   typedef edm::Ref<HSCParticleCollection> HSCParticleRef;
0104   typedef edm::RefProd<HSCParticleCollection> HSCParticleRefProd;
0105   typedef edm::RefVector<HSCParticleCollection> HSCParticleRefVector;
0106   typedef edm::AssociationMap<edm::OneToOne<reco::TrackCollection, EcalRecHitCollection> > TracksEcalRecHitsMap;
0107 }  // namespace susybsm
0108 #endif