File indexing completed on 2024-04-06 12:04:25
0001 #include "DataFormats/L1CSCTrackFinder/interface/L1Track.h"
0002 #include <iostream>
0003
0004 namespace csc {
0005
0006 L1Track::L1Track(const csc::L1TrackId& id) : m_name("csc::L1Track") {
0007 m_endcap = id.endcap();
0008 m_sector = id.sector();
0009 setType(2);
0010 setPtPacked(0);
0011 }
0012
0013 L1Track::L1Track(const csc::L1Track& rhs)
0014 : L1MuRegionalCand(rhs.type_idx(),
0015 rhs.phi_packed(),
0016 rhs.eta_packed(),
0017 rhs.pt_packed(),
0018 rhs.charge_packed(),
0019 rhs.charge_valid_packed(),
0020 rhs.finehalo_packed(),
0021 rhs.quality_packed(),
0022 rhs.bx()),
0023 m_name(rhs.m_name) {
0024 this->setBx(rhs.bx());
0025 this->setDataWord(rhs.getDataWord());
0026 m_name = rhs.m_name;
0027 this->setType(rhs.type_idx());
0028 this->setPhiPacked(rhs.phi_packed());
0029 this->setEtaPacked(rhs.eta_packed());
0030 this->setPtPacked(rhs.pt_packed());
0031 this->setChargePacked(rhs.charge_packed());
0032 this->setChargeValidPacked(rhs.charge_valid_packed());
0033 this->setFineHaloPacked(rhs.finehalo_packed());
0034 this->setQualityPacked(rhs.quality_packed());
0035 m_empty = rhs.m_empty;
0036 m_lphi = rhs.m_lphi;
0037 m_endcap = rhs.m_endcap;
0038 m_sector = rhs.m_sector;
0039 m_ptAddress = rhs.m_ptAddress;
0040 m_rank = rhs.m_rank;
0041 me1_id = rhs.me1_id;
0042 me2_id = rhs.me2_id;
0043 me3_id = rhs.me3_id;
0044 me4_id = rhs.me4_id;
0045 mb1_id = rhs.mb1_id;
0046 m_me1Tbin = rhs.m_me1Tbin;
0047 m_me2Tbin = rhs.m_me2Tbin;
0048 m_me3Tbin = rhs.m_me3Tbin;
0049 m_me4Tbin = rhs.m_me4Tbin;
0050 m_mbTbin = rhs.m_mbTbin;
0051 m_output_link = rhs.m_output_link;
0052 m_winner = rhs.m_winner;
0053 m_fr = rhs.m_fr;
0054 m_se = rhs.m_se;
0055 m_bx0 = rhs.m_bx0;
0056 m_bc0 = rhs.m_bc0;
0057 }
0058
0059 L1Track::~L1Track() {}
0060
0061 const csc::L1Track& L1Track::operator=(const csc::L1Track& rhs) {
0062 if (this != &rhs) {
0063 m_fr = rhs.m_fr;
0064 m_se = rhs.m_se;
0065 m_bx0 = rhs.m_bx0;
0066 m_bc0 = rhs.m_bc0;
0067 m_empty = rhs.m_empty;
0068 this->setBx(rhs.bx());
0069 this->setDataWord(rhs.getDataWord());
0070 m_name = rhs.m_name;
0071 m_lphi = rhs.m_lphi;
0072 this->setType(rhs.type_idx());
0073 this->setPhiPacked(rhs.phi_packed());
0074 this->setEtaPacked(rhs.eta_packed());
0075 this->setPtPacked(rhs.pt_packed());
0076 this->setChargePacked(rhs.charge_packed());
0077 this->setChargeValidPacked(rhs.charge_valid_packed());
0078 this->setFineHaloPacked(rhs.finehalo_packed());
0079 this->setQualityPacked(rhs.quality_packed());
0080 m_endcap = rhs.m_endcap;
0081 m_sector = rhs.m_sector;
0082 m_ptAddress = rhs.m_ptAddress;
0083 m_rank = rhs.m_rank;
0084 me1_id = rhs.me1_id;
0085 me2_id = rhs.me2_id;
0086 me3_id = rhs.me3_id;
0087 me4_id = rhs.me4_id;
0088 mb1_id = rhs.mb1_id;
0089 m_me1Tbin = rhs.m_me1Tbin;
0090 m_me2Tbin = rhs.m_me2Tbin;
0091 m_me3Tbin = rhs.m_me3Tbin;
0092 m_me4Tbin = rhs.m_me4Tbin;
0093 m_mbTbin = rhs.m_mbTbin;
0094 m_output_link = rhs.m_output_link;
0095 m_winner = rhs.m_winner;
0096 }
0097 return *this;
0098 }
0099
0100 unsigned L1Track::rank() const { return m_rank; }
0101
0102 void L1Track::setStationIds(
0103 const unsigned& me1, const unsigned& me2, const unsigned& me3, const unsigned& me4, const unsigned& mb1) {
0104 me1_id = me1;
0105 me2_id = me2;
0106 me3_id = me3;
0107 me4_id = me4;
0108 mb1_id = mb1;
0109 }
0110
0111 unsigned L1Track::encodeRank(const unsigned& pt, const unsigned& quality) {
0112 if (pt == 0)
0113 return 0;
0114 return pt | (quality << L1MuRegionalCand::PT_LENGTH);
0115 }
0116
0117 void L1Track::decodeRank(const unsigned& rank, unsigned& pt, unsigned& quality) {
0118 if (rank == 0) {
0119 quality = 0;
0120 pt = 0;
0121 } else {
0122 quality = rank >> L1MuRegionalCand::PT_LENGTH;
0123 pt = rank & ((1 << L1MuRegionalCand::PT_LENGTH) - 1);
0124 }
0125 }
0126
0127 bool L1Track::operator>(const csc::L1Track& rhs) const { return (rank() > rhs.rank()); }
0128
0129 bool L1Track::operator<(const csc::L1Track& rhs) const { return (rank() < rhs.rank()); }
0130
0131 bool L1Track::operator>=(const csc::L1Track& rhs) const { return (rank() >= rhs.rank()); }
0132
0133 bool L1Track::operator<=(const csc::L1Track& rhs) const { return (rank() <= rhs.rank()); }
0134
0135 bool L1Track::operator==(const csc::L1Track& rhs) const { return (rank() == rhs.rank()); }
0136
0137 bool L1Track::operator!=(const csc::L1Track& rhs) const { return (rank() != rhs.rank()); }
0138
0139 void L1Track::Print() const {
0140 if (!empty()) {
0141 std::cout << "\t Pt(int): "
0142 << " " << pt_packed() << " Phi(int): "
0143 << " " << phi_packed() << " Eta(int): "
0144 << " " << eta_packed() << " Quality: "
0145 << " " << quality_packed() << " charge: "
0146 << " " << charge_packed() << " side: "
0147 << " " << endcap() << " bx: "
0148 << " " << BX() << " Winner: "
0149 << " " << winner() << std::endl;
0150 } else {
0151 std::cout << "\t Empty track!\n";
0152 std::cout << "\t Pt(int): "
0153 << " "
0154 << "unassigned or zero"
0155 << " Phi(int): "
0156 << " " << phi_packed() << " Eta(int): "
0157 << " " << eta_packed() << " Quality: "
0158 << " "
0159 << "unassigned or zero"
0160 << " charge: "
0161 << " " << charge_packed() << " side: "
0162 << " " << endcap() << " bx: "
0163 << " " << BX() << " Winner: "
0164 << " " << winner() << std::endl;
0165 }
0166 }
0167
0168 unsigned L1Track::modeExtended(void) const {
0169 unsigned modeExt = mode();
0170 unsigned fr = (m_ptAddress >> 21) & 0x1;
0171
0172 if (modeExt == 11 && fr == 1)
0173 modeExt = 17;
0174 else if (modeExt == 12 && fr == 1)
0175 modeExt = 18;
0176 else if (modeExt == 14 && fr == 1)
0177 modeExt = 16;
0178 return modeExt;
0179 }
0180 }