CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
L1CaloHcalScale.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: L1TObjects
4 // Class : L1CaloHcalScale
5 //
6 // Implementation:
7 // <Notes on implementation>
8 //
9 // Author:
10 // Created: Wed Sep 27 17:18:27 CEST 2006
11 // $Id:
12 
14 
15 using std::vector;
16 using std::ostream;
17 using std::endl;
18 
21 {
22  for (unsigned i=0; i<nBinRank; i++) {
23  for (unsigned eta=0; eta<nBinEta; eta++) {
24  m_scale[i][eta] = lsb * i;
25  m_scale[i][eta+nBinEta] = lsb * i;
26  }
27  }
28 }
29 
32 
33 }
34 
36 void L1CaloHcalScale::setBin(unsigned short rank,
37  unsigned short eta,
38  short etaSign,
39  double et) {
40  --eta ; // input eta index starts at 1
41  if (rank < nBinRank && eta < nBinEta) {
42  if( etaSign < 0 ) eta += nBinEta ;
43  m_scale[rank][eta] = et;
44  }
45  else {
46  // throw
47  }
48 }
49 
51 unsigned short L1CaloHcalScale::rank(double et,
52  unsigned short eta,
53  short etaSign) const {
54  --eta ; // input eta index starts at 1
55  if (eta < nBinEta) {
56  unsigned short out = 0;
57  if( etaSign < 0 ) eta += nBinEta ;
58  for (unsigned i=0; i<nBinRank; i++) {
59  if ( et >= m_scale[i][eta] ) { out = i; }
60  }
61  return out & (nBinRank-1);
62  }
63  else {
64  // throw
65  }
66  return nBinRank ;
67 }
68 
69 // convert from rank to Et/GeV
70 double L1CaloHcalScale::et(unsigned short rank,
71  unsigned short eta,
72  short etaSign) const {
73  --eta ; // input eta index starts at 1
74  if (rank < nBinRank && eta < nBinEta) {
75  if( etaSign < 0 ) eta += nBinEta ;
76  return m_scale[rank][eta];
77  }
78  else return -1.;
79 }
80 
81 // pretty print
82 void L1CaloHcalScale::print(ostream& s) const {
83  s << "L1CaloHcalScaleRcd" << endl;
84  s << "Energy for HCAL inputs into the RCT" <<endl;
85  s << "Each new row is for a given value of 8 bit output of HCAL. Each column is for the respective eta value " << endl;
86  for (unsigned rank=0; rank<nBinRank; rank++) {
87  s << "rank " << rank << " ";
88  for (unsigned eta=0; eta<2*nBinEta; eta++) {
89  s << m_scale[rank][eta] << " " ;
90  }
91  s << endl;
92  }
93 }
94 
95 
int i
Definition: DBlmapReader.cc:9
uint16_t rank(double et, unsigned short eta, short etaSign) const
convert from physical Et in GeV to rank scale
void setBin(unsigned short rank, unsigned short eta, short etaSign, double et)
set scale element; use this to create non-linear scales
double et(unsigned short rank, unsigned short eta, short etaSign) const
convert from rank to physically meaningful quantity
static const unsigned short nBinRank
void print(std::ostream &s) const
double m_scale[nBinRank][2 *nBinEta]
thresholds associated with rank scale in GeV
L1CaloHcalScale(double lsb=1.0)
constructor (creates a linear scale with an LSB - no LSB gives identity)
static const unsigned short nBinEta
~L1CaloHcalScale()
destructor