Back to home page

Project CMSSW displayed by LXR

 
 

    


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     // For GT, returning ap_ type
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     // For HLT
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 }  // namespace l1t
0077 
0078 #endif