File indexing completed on 2023-05-05 02:47:26
0001 #ifndef DataFormatsL1TMuonPhase2_SAMuon_h
0002 #define DataFormatsL1TMuonPhase2_SAMuon_h
0003
0004 #include "DataFormats/L1Trigger/interface/L1Candidate.h"
0005 #include "DataFormats/L1Trigger/interface/Muon.h"
0006 #include "DataFormats/Common/interface/Ref.h"
0007 #include "DataFormats/Common/interface/Ptr.h"
0008 #include "DataFormats/L1TMuon/interface/RegionalMuonCand.h"
0009 #include "DataFormats/L1TMuon/interface/RegionalMuonCandFwd.h"
0010 #include "DataFormats/L1TMuonPhase2/interface/Constants.h"
0011
0012 namespace l1t {
0013
0014 class SAMuon;
0015
0016 typedef std::vector<SAMuon> SAMuonCollection;
0017 typedef edm::Ref<SAMuonCollection> SAMuonRef;
0018 typedef std::vector<edm::Ref<SAMuonCollection> > SAMuonRefVector;
0019
0020 class SAMuon : public L1Candidate {
0021 public:
0022 SAMuon();
0023
0024 SAMuon(const l1t::Muon& mu, bool charge, uint pt, int eta, int phi, int z0, int d0, uint quality);
0025
0026 ~SAMuon() override;
0027
0028 const bool hwCharge() const { return hwCharge_; }
0029 const int hwZ0() const { return hwZ0_; }
0030 const int hwD0() const { return hwD0_; }
0031 const uint hwBeta() const { return hwBeta_; }
0032 void setBeta(uint beta) { hwBeta_ = beta; }
0033
0034
0035 const Phase2L1GMT::valid_sa_t apValid() const { return Phase2L1GMT::valid_sa_t(hwPt() > 0); };
0036 const Phase2L1GMT::pt_sa_t apPt() const { return Phase2L1GMT::pt_sa_t(hwPt()); };
0037 const Phase2L1GMT::phi_sa_t apPhi() const { return Phase2L1GMT::phi_sa_t(hwPhi()); };
0038 const Phase2L1GMT::eta_sa_t apEta() const { return Phase2L1GMT::eta_sa_t(hwEta()); };
0039 const Phase2L1GMT::z0_sa_t apZ0() const { return Phase2L1GMT::z0_sa_t(hwZ0()); };
0040 const Phase2L1GMT::d0_sa_t apD0() const { return Phase2L1GMT::d0_sa_t(hwD0()); };
0041 const Phase2L1GMT::q_sa_t apCharge() const { return Phase2L1GMT::q_sa_t(hwCharge()); };
0042 const Phase2L1GMT::qual_sa_t apQual() const { return Phase2L1GMT::qual_sa_t(hwQual()); };
0043
0044
0045 const double phZ0() const { return Phase2L1GMT::LSBSAz0 * hwZ0(); }
0046 const double phD0() const { return Phase2L1GMT::LSBSAd0 * hwD0(); }
0047 const double phPt() const { return Phase2L1GMT::LSBpt * hwPt(); }
0048 const double phEta() const { return Phase2L1GMT::LSBeta * hwEta(); }
0049 const double phPhi() const { return Phase2L1GMT::LSBphi * hwPhi(); }
0050 const int phCharge() const { return pow(-1, hwCharge()); }
0051
0052 const uint64_t word() const { return word_; }
0053 void setWord(uint64_t word) { word_ = word; }
0054 void print() const;
0055
0056 bool operator<(const SAMuon& other) const {
0057 if (hwPt() == other.hwPt())
0058 return (hwEta() < other.hwEta());
0059 else
0060 return (hwPt() < other.hwPt());
0061 }
0062 bool operator>(const SAMuon& other) const {
0063 if (hwPt() == other.hwPt())
0064 return (hwEta() > other.hwEta());
0065 else
0066 return (hwPt() > other.hwPt());
0067 }
0068
0069 private:
0070 bool hwCharge_;
0071 int hwZ0_;
0072 int hwD0_;
0073 uint hwBeta_;
0074 uint64_t word_;
0075 };
0076 }
0077
0078 #endif