CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
L1MuRegionalCand.cc
Go to the documentation of this file.
1 //-------------------------------------------------
2 //
6 //
7 //
8 // Author :
9 // H. Sakulin HEPHY Vienna
10 //
11 // Migrated to CMSSW:
12 // I. Mikulec
13 //
14 //--------------------------------------------------
15 //---------------
16 // C++ Headers --
17 //---------------
18 
19 #include <iostream>
20 #include <iomanip>
21 
22 //----------------------
23 // Base Class Headers --
24 //----------------------
26 
27 //------------------------------------
28 // Collaborating Class Declarations --
29 //------------------------------------
30 
32 
33 using namespace std;
34 
35 // ---------------------
36 // -- Class Interface --
37 // ---------------------
38 
39 const float L1MuRegionalCand::m_invalidValue = -10.;
40 
42 L1MuRegionalCand::L1MuRegionalCand(unsigned dataword, int bx) : m_bx(bx), m_dataWord(dataword) {
46 }
47 
50  unsigned phi,
51  unsigned eta,
52  unsigned pt,
53  unsigned charge,
54  unsigned ch_valid,
55  unsigned finehalo,
56  unsigned quality,
57  int bx)
58  : m_bx(bx), m_dataWord(0) {
59  setType(type_idx);
60  setPhiPacked(phi);
61  setEtaPacked(eta);
62  setPtPacked(pt);
63  setChargePacked(charge);
64  setChargeValidPacked(ch_valid);
65  setFineHaloPacked(finehalo);
66  setQualityPacked(quality);
70 }
71 
73  m_bx = 0;
74  m_dataWord = 0;
78 }
79 
81  if (m_phiValue == m_invalidValue) {
82  edm::LogWarning("ValueInvalid") << "L1MuRegionalCand::phiValue requested physical value is invalid";
83  }
84  return m_phiValue;
85 }
86 
88  if (m_etaValue == m_invalidValue) {
89  edm::LogWarning("ValueInvalid") << "L1MuRegionalCand::etaValue requested physical value is invalid";
90  }
91  return m_etaValue;
92 }
93 
95  if (m_ptValue == m_invalidValue) {
96  edm::LogWarning("ValueInvalid") << "L1MuRegionalCand::ptValue requested physical value is invalid";
97  }
98  return m_ptValue;
99 }
100 
102  if (!empty()) {
104  edm::LogVerbatim("GMT_Input_info") << setiosflags(ios::showpoint | ios::fixed | ios::right | ios::adjustfield)
105  << "pt(index) = " << setw(2) << setprecision(1) << pt_packed() << " "
106  << "charge = " << setw(2) << chargeValue() << " "
107  << "eta(index) = " << setw(2) << eta_packed() << " "
108  << "phi(index) = " << setw(3) << phi_packed() << " "
109  << "quality = " << setw(1) << quality() << " "
110  << "charge_valid = " << setw(1) << chargeValid() << " "
111  << "fine_halo = " << setw(1) << isFineHalo() << " "
112  << "bx = " << setw(3) << bx() << " "
113  << "type_idx = " << setw(1) << type_idx();
114  } else {
115  edm::LogVerbatim("GMT_Input_info") << setiosflags(ios::showpoint | ios::fixed | ios::right | ios::adjustfield)
116  << "pt = " << setw(5) << setprecision(1) << ptValue() << " GeV "
117  << "charge = " << setw(2) << chargeValue() << " "
118  << "eta = " << setw(6) << setprecision(3) << etaValue() << " "
119  << "phi = " << setw(5) << setprecision(3) << phiValue() << " rad "
120  << "quality = " << setw(1) << quality() << " "
121  << "charge_valid = " << setw(1) << chargeValid() << " "
122  << "fine_halo = " << setw(1) << isFineHalo() << " "
123  << "bx = " << setw(3) << bx() << " "
124  << "type_idx = " << setw(1) << type_idx();
125  }
126  }
127 }
128 
129 unsigned L1MuRegionalCand::readDataField(unsigned start, unsigned count) const {
130  unsigned mask = ((1 << count) - 1) << start;
131  return (m_dataWord & mask) >> start;
132 }
133 
134 void L1MuRegionalCand::writeDataField(unsigned start, unsigned count, unsigned value) {
135  if (value >= (1U << count))
136  edm::LogWarning("ValueOutOfRange") // value >= 0, since value is unsigned
137  << "L1MuRegionalCand::writeDataField(): value " << value << " out of range for data field with bit width "
138  << count;
139 
140  unsigned mask = ((1 << count) - 1) << start;
141  m_dataWord &= ~mask; // clear
142  m_dataWord |= (value << start) & mask;
143 }
Log< level::Info, true > LogVerbatim
void writeDataField(unsigned start, unsigned count, unsigned value)
virtual void print() const
print candidate
float etaValue() const
get eta-value of muon candidate
uint32_t const *__restrict__ Quality * quality
virtual bool empty() const
return empty flag
L1MuRegionalCand(unsigned dataword=0, int bx=0)
constructor from data word
void setChargeValidPacked(unsigned valid)
Set Charge Valid.
bool isFineHalo() const
is it fine (DT) / halo (CSC) ?
float ptValue() const
get pt-value of muon candidate in GeV
unsigned readDataField(unsigned start, unsigned count) const
static const float m_invalidValue
unsigned eta_packed() const
return eta packed as in hardware
void setType(unsigned type)
Set Type: 0 DT, 1 bRPC, 2 CSC, 3 fRPC.
float phiValue() const
get phi-value of muon candidate in radians (low edge of bin)
void setChargePacked(unsigned ch)
Set Charge (0=pos, 1=neg)
void setPtPacked(unsigned pt)
Set Pt: 0..31.
bool chargeValid() const
is the charge valid ?
unsigned int quality() const
return quality
void setPhiPacked(unsigned phi)
Set Phi: 0..143.
int bx() const
return bunch crossing identifier
void setQualityPacked(unsigned qual)
Set Quality: 0..7.
void setEtaPacked(unsigned eta)
Set Eta: 6-bit code.
virtual void reset()
reset
void setFineHaloPacked(unsigned fh)
Set Fine / Halo.
Log< level::Warning, false > LogWarning
unsigned pt_packed() const
return pt packed as in hardware
unsigned type_idx() const
return type: 0 DT, 1 bRPC, 2 CSC, 3 fRPC
int chargeValue() const
get charge
unsigned phi_packed() const
return phi packed as in hardware