File indexing completed on 2024-10-08 05:11:50
0001 #ifndef PHASE2GMT_PRETRACKMATCHEDMUON
0002 #define PHASE2GMT_PRETRACKMATCHEDMUON
0003
0004 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0005 #include "DataFormats/L1TMuonPhase2/interface/Constants.h"
0006 #include "DataFormats/L1TMuonPhase2/interface/MuonStub.h"
0007 #include "DataFormats/L1TMuonPhase2/interface/SAMuon.h"
0008 #include "DataFormats/Common/interface/Ptr.h"
0009 #include "DataFormats/L1TrackTrigger/interface/TTTrack.h"
0010 #include "DataFormats/L1TrackTrigger/interface/TTStub.h"
0011 #include "DataFormats/L1TrackTrigger/interface/TTTypes.h"
0012 #include "DataFormats/Phase2TrackerDigi/interface/Phase2TrackerDigi.h"
0013 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0014 #include "DataFormats/L1Trigger/interface/Vertex.h"
0015
0016 #include <vector>
0017
0018 namespace Phase2L1GMT {
0019
0020 class PreTrackMatchedMuon {
0021 public:
0022 PreTrackMatchedMuon(const uint& charge,
0023 const uint& pt,
0024 const int& eta,
0025 const int& phi,
0026 const int& z0,
0027 const int& d0,
0028 const uint& beta = 15)
0029 : charge_(charge),
0030 pt_(pt),
0031 eta_(eta),
0032 phi_(phi),
0033 z0_(z0),
0034 d0_(d0),
0035 beta_(beta),
0036 isGlobal_(false),
0037 quality_(0),
0038 stubID0_(4095),
0039 stubID1_(4095),
0040 stubID2_(4095),
0041 stubID3_(4095),
0042 stubID4_(4095),
0043 matchMask_(0),
0044 valid_(false) {}
0045
0046 const uint charge() const { return charge_; }
0047 const uint pt() const { return pt_; }
0048 const int eta() const { return eta_; }
0049 const int phi() const { return phi_; }
0050 const int z0() const { return z0_; }
0051 const int d0() const { return d0_; }
0052 const uint beta() const { return beta_; }
0053
0054 bool isGlobalMuon() const { return isGlobal_; }
0055 const int quality() const { return quality_; }
0056 const int offline_pt() const { return offline_pt_; }
0057 const float offline_eta() const { return offline_eta_; }
0058 const float offline_phi() const { return offline_phi_; }
0059
0060 const uint stubID0() const { return stubID0_; }
0061 const uint stubID1() const { return stubID1_; }
0062 const uint stubID2() const { return stubID2_; }
0063 const uint stubID3() const { return stubID3_; }
0064 const uint stubID4() const { return stubID4_; }
0065 const uint matchMask() const { return matchMask_; }
0066
0067 bool valid() const { return valid_; }
0068
0069 void setQuality(uint quality) { quality_ = quality; }
0070 void setValid(bool v) { valid_ = v; }
0071
0072 void setOfflineQuantities(float pt, float eta, float phi) {
0073 offline_pt_ = pt;
0074 offline_eta_ = eta;
0075 offline_phi_ = phi;
0076 }
0077
0078 void addMuonRef(const l1t::SAMuonRef& ref) { muRef_.push_back(ref); }
0079
0080 void resetGlobal() { isGlobal_ = false; }
0081
0082 const l1t::SAMuonRefVector& muonRef() const { return muRef_; }
0083 void addStub(const l1t::MuonStubRef& stub, uint mask) {
0084 stubs_.push_back(stub);
0085 if (stub->tfLayer() == 0) {
0086 stubID0_ = stub->address();
0087 matchMask_ = matchMask_ | (mask);
0088 } else if (stub->tfLayer() == 1) {
0089 stubID1_ = stub->address();
0090 matchMask_ = matchMask_ | (mask << 2);
0091 } else if (stub->tfLayer() == 2) {
0092 stubID2_ = stub->address();
0093 matchMask_ = matchMask_ | (mask << 4);
0094 } else if (stub->tfLayer() == 3) {
0095 stubID3_ = stub->address();
0096 matchMask_ = matchMask_ | (mask << 6);
0097 } else if (stub->tfLayer() == 4) {
0098 stubID4_ = stub->address();
0099 matchMask_ = matchMask_ | (mask << 8);
0100 }
0101 }
0102
0103 const l1t::MuonStubRefVector& stubs() const { return stubs_; }
0104
0105 void setTrkPtr(const edm::Ptr<TTTrack<Ref_Phase2TrackerDigi_> >& trkPtr) { trkPtr_ = trkPtr; }
0106
0107 const edm::Ptr<TTTrack<Ref_Phase2TrackerDigi_> > trkPtr() const { return trkPtr_; }
0108
0109 void print() const {
0110 LogDebug("PreTrackMatchedMuon") << "preconstructed muon : charge=" << charge_ << " pt=" << offline_pt_ << ","
0111 << pt_ << " eta=" << offline_eta_ << "," << eta_ << " phi=" << offline_phi_ << ","
0112 << phi_ << " z0=" << z0_ << " d0=" << d0_ << " quality=" << quality_
0113 << " isGlobal=" << isGlobal_ << " valid=" << valid_ << " stubs: " << stubID0_
0114 << " " << stubID1_ << " " << stubID2_ << " " << stubID3_ << " " << stubID4_;
0115 }
0116
0117 uint64_t lsb() const {
0118 wordtype w = 0;
0119 int bstart = 0;
0120 bstart = wordconcat<wordtype>(w, bstart, charge_ & 0x1, 1);
0121 bstart = wordconcat<wordtype>(w, bstart, pt_, BITSPT);
0122 bstart = wordconcat<wordtype>(w, bstart, phi_, BITSPHI);
0123 bstart = wordconcat<wordtype>(w, bstart, eta_, BITSETA);
0124 bstart = wordconcat<wordtype>(w, bstart, z0_, BITSZ0);
0125 wordconcat<wordtype>(w, bstart, d0_, BITSD0);
0126 return w.to_int();
0127 }
0128
0129 uint64_t msb() const {
0130 wordtype w2 = 0;
0131 int bstart = 0;
0132 bstart = wordconcat<wordtype>(w2, bstart, stubID0_, BITSSTUBID);
0133 bstart = wordconcat<wordtype>(w2, bstart, stubID1_, BITSSTUBID);
0134 bstart = wordconcat<wordtype>(w2, bstart, stubID2_, BITSSTUBID);
0135 bstart = wordconcat<wordtype>(w2, bstart, stubID3_, BITSSTUBID);
0136 bstart = wordconcat<wordtype>(w2, bstart, stubID4_, BITSSTUBID);
0137 bstart = wordconcat<wordtype>(w2, bstart, isGlobal_, 1);
0138 bstart = wordconcat<wordtype>(w2, bstart, beta_, BITSMUONBETA);
0139 bstart = wordconcat<wordtype>(w2, bstart, quality_, BITSMATCHQUALITY);
0140 wordconcat<wordtype>(w2, bstart, valid_, 1);
0141
0142 return w2.to_int();
0143 }
0144
0145 void printWord() const {
0146 LogDebug("PreTrackMatchedMuon") << "PreTrackMatchedMuon : word=" << std::setfill('0') << std::setw(16) << std::hex
0147 << (long long unsigned int)(msb() >> 2) << std::setfill('0') << std::setw(16)
0148 << std::hex
0149 << (long long unsigned int)((lsb() | (msb() << 62)) & 0xffffffffffffffff);
0150 }
0151
0152 private:
0153 uint charge_;
0154 uint pt_;
0155 int eta_;
0156 int phi_;
0157 int z0_;
0158 int d0_;
0159 uint beta_;
0160 bool isGlobal_;
0161 uint quality_;
0162 float offline_pt_;
0163 float offline_eta_;
0164 float offline_phi_;
0165 uint stubID0_;
0166 uint stubID1_;
0167 uint stubID2_;
0168 uint stubID3_;
0169 uint stubID4_;
0170 uint matchMask_;
0171
0172 bool valid_;
0173 l1t::MuonStubRefVector stubs_;
0174 l1t::SAMuonRefVector muRef_;
0175 edm::Ptr<TTTrack<Ref_Phase2TrackerDigi_> > trkPtr_;
0176 };
0177 }
0178
0179 #endif