1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
// -*- C++ -*-
//
// Package: L1TObjects
// Class : L1CaloEcalScale
//
// Implementation:
// <Notes on implementation>
//
// Author:
// Created: Wed Sep 27 17:18:27 CEST 2006
// $Id:
#include "CondFormats/L1TObjects/interface/L1CaloEcalScale.h"
using std::endl;
using std::ostream;
using std::vector;
/// construct a linear scale with a particular LSB
L1CaloEcalScale::L1CaloEcalScale(double lsb) {
for (unsigned i = 0; i < nBinRank; i++) {
for (unsigned eta = 0; eta < nBinEta; eta++) {
m_scale[i][eta] = lsb * i;
m_scale[i][eta + nBinEta] = lsb * i;
}
}
}
/// dtor
L1CaloEcalScale::~L1CaloEcalScale() {}
/// set scale bin
void L1CaloEcalScale::setBin(unsigned short rank, unsigned short eta, short etaSign, double et) {
--eta; // input eta index starts at 1
if (rank < nBinRank && eta < nBinEta) {
if (etaSign < 0)
eta += nBinEta;
m_scale[rank][eta] = et;
} else {
// throw
}
}
/// convert from Et in GeV to rank
unsigned short L1CaloEcalScale::rank(double et, unsigned short eta, short etaSign) const {
--eta; // input eta index starts at 1
if (eta < nBinEta) {
unsigned short out = 0;
if (etaSign < 0)
eta += nBinEta;
for (unsigned i = 0; i < nBinRank; i++) {
if (et >= m_scale[i][eta]) {
out = i;
}
}
return out & (nBinRank - 1);
} else {
// throw
}
return nBinRank;
}
// convert from rank to Et/GeV
double L1CaloEcalScale::et(unsigned short rank, unsigned short eta, short etaSign) const {
--eta; // input eta index starts at 1
if (rank < nBinRank && eta < nBinEta) {
if (etaSign < 0)
eta += nBinEta;
return m_scale[rank][eta];
} else
return -1.;
}
// pretty print
void L1CaloEcalScale::print(ostream& s) const {
s << "L1CaloEcalScaleRcd" << endl;
s << "Energy for ECAL inputs into the RCT" << endl;
s << "Each new row is for a given value of 8 bit output of ECAL. Each column is for the respective eta value "
<< endl;
for (unsigned rank = 0; rank < nBinRank; rank++) {
s << "rank = " << rank << " ";
for (unsigned eta = 0; eta < 2 * nBinEta; eta++) {
s << m_scale[rank][eta] << " ";
}
s << endl;
}
}
|