CalibCalorimetry
HcalAlgos
src
HBHERecalibration.cc
Go to the documentation of this file.
1
#include "
CalibCalorimetry/HcalAlgos/interface/HBHERecalibration.h
"
2
3
#include <vector>
4
#include <cmath>
5
6
//reuse parsing function to read mean energy table
7
HBHERecalibration::HBHERecalibration
(
float
intlumi,
float
cutoff
,
std::string
meanenergies)
8
: intlumi_(intlumi),
9
cutoff_(
cutoff
),
10
ieta_shift_(0),
11
max_depth_(0),
12
meanenergies_(
HBHEDarkening
::readDoseMap(meanenergies)),
13
darkening_(nullptr) {}
14
15
HBHERecalibration::~HBHERecalibration
() {}
16
17
void
HBHERecalibration::setup
(
const
std::vector
<std::vector<int>>& m_segmentation,
const
HBHEDarkening
* darkening) {
18
darkening_
= darkening;
19
ieta_shift_
=
darkening_
->
get_ieta_shift
();
20
21
//infer eta bounds
22
int
min_ieta =
ieta_shift_
- 1;
23
int
max_ieta = min_ieta +
meanenergies_
.size();
24
dsegm_
.reserve(max_ieta - min_ieta);
25
for
(
int
ieta
= min_ieta;
ieta
< max_ieta; ++
ieta
) {
26
dsegm_
.push_back(m_segmentation[
ieta
]);
27
//find maximum
28
for
(
unsigned
lay = 0; lay <
dsegm_
.back().size(); ++lay) {
29
if
(lay >=
meanenergies_
[0].
size
())
30
break
;
31
int
depth
=
dsegm_
.back()[lay];
32
if
(
depth
>
max_depth_
)
33
max_depth_
=
depth
;
34
}
35
}
36
37
initialize
();
38
}
39
40
float
HBHERecalibration::getCorr
(
int
ieta
,
int
depth
)
const
{
41
ieta
=
abs
(
ieta
);
42
//shift ieta tower index to act as array index
43
ieta
-=
ieta_shift_
;
44
45
//shift depth index to act as array index (depth = 0 - not used!)
46
depth
-= 1;
47
48
//bounds check
49
if
(ieta < 0 or ieta >=
int
(
corr_
.size()))
50
return
1.0;
51
if
(depth < 0 or depth >=
int
(
corr_
[
ieta
].
size
()))
52
return
1.0;
53
54
if
(
cutoff_
> 1 and
corr_
[
ieta
][
depth
] >
cutoff_
)
55
return
cutoff_
;
56
else
57
return
corr_
[
ieta
][
depth
];
58
}
59
60
void
HBHERecalibration::initialize
() {
61
std::vector<std::vector<float>> vtmp(
dsegm_
.size(), std::vector<float>(
max_depth_
, 0.0));
62
auto
dval =
63
vtmp;
//conversion of meanenergies into depths-averaged values - denominator (including degradation for intlumi)
64
auto
nval = vtmp;
// conversion of meanenergies into depths-averaged values - numerator (no degradation)
65
corr_
= vtmp;
66
67
//converting energy values from layers into depths
68
for
(
unsigned
int
ieta
= 0;
ieta
<
dsegm_
.size(); ++
ieta
) {
69
//fill sum(means(layer,0)) and sum(means(layer,lumi)) for each depth
70
for
(
unsigned
int
ilay = 0; ilay <
std::min
(
meanenergies_
[
ieta
].
size
(),
dsegm_
[
ieta
].
size
()); ++ilay) {
71
int
depth
=
dsegm_
[
ieta
][ilay] - 1;
// depth = 0 - not used!
72
nval[
ieta
][
depth
] +=
meanenergies_
[
ieta
][ilay];
73
dval[
ieta
][
depth
] +=
74
meanenergies_
[
ieta
][ilay] *
75
darkening_
->
degradation
(
intlumi_
,
ieta
+
ieta_shift_
, ilay + 1);
//be careful of eta and layer numbering
76
}
77
78
//compute factors, w/ safety checks
79
for
(
int
depth
= 0;
depth
<
max_depth_
; ++
depth
) {
80
if
(dval[
ieta
][
depth
] > 0)
81
corr_
[
ieta
][
depth
] = nval[
ieta
][
depth
] / dval[
ieta
][
depth
];
82
else
83
corr_
[
ieta
][
depth
] = 1.0;
84
85
if
(
corr_
[
ieta
][
depth
] < 1.0)
86
corr_
[
ieta
][
depth
] = 1.0;
87
}
88
}
89
}
HBHERecalibration::dsegm_
std::vector< std::vector< int > > dsegm_
Definition:
HBHERecalibration.h:35
HBHERecalibration::darkening_
const HBHEDarkening * darkening_
Definition:
HBHERecalibration.h:34
HBHERecalibration::~HBHERecalibration
~HBHERecalibration()
Definition:
HBHERecalibration.cc:15
min
T min(T a, T b)
Definition:
MathUtil.h:58
HBHEDarkening::get_ieta_shift
int get_ieta_shift() const
Definition:
HBHEDarkening.h:49
HBHERecalibration::corr_
std::vector< std::vector< float > > corr_
Definition:
HBHERecalibration.h:36
HBHERecalibration::intlumi_
float intlumi_
Definition:
HBHERecalibration.h:29
HBHERecalibration.h
HBHERecalibration::setup
void setup(const std::vector< std::vector< int >> &m_segmentation, const HBHEDarkening *darkening)
Definition:
HBHERecalibration.cc:17
HBHERecalibration::max_depth_
int max_depth_
Definition:
HBHERecalibration.h:32
HBHERecalibration::ieta_shift_
int ieta_shift_
Definition:
HBHERecalibration.h:31
HBHERecalibration::meanenergies_
std::vector< std::vector< float > > meanenergies_
Definition:
HBHERecalibration.h:33
HBHERecalibration::getCorr
float getCorr(int ieta, int depth) const
Definition:
HBHERecalibration.cc:40
HBHERecalibration::cutoff_
float cutoff_
Definition:
HBHERecalibration.h:30
HBHERecalibration::initialize
void initialize()
Definition:
HBHERecalibration.cc:60
LEDCalibrationChannels.depth
depth
Definition:
LEDCalibrationChannels.py:65
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition:
AlCaHLTBitMon_QueryRunRegistry.py:256
LEDCalibrationChannels.ieta
ieta
Definition:
LEDCalibrationChannels.py:63
HBHEDarkening
Definition:
HBHEDarkening.h:17
trackerHitRTTI::vector
Definition:
trackerHitRTTI.h:21
HBHERecalibration::HBHERecalibration
HBHERecalibration(float intlumi, float cutoff, std::string meanenergies)
Definition:
HBHERecalibration.cc:7
EcalSCDynamicDPhiParametersESProducer_cfi.cutoff
cutoff
Definition:
EcalSCDynamicDPhiParametersESProducer_cfi.py:15
HBHEDarkening::degradation
float degradation(float intlumi, int ieta, int lay) const
Definition:
HBHEDarkening.cc:98
funct::abs
Abs< T >::type abs(const T &t)
Definition:
Abs.h:22
findQualityFiles.size
size
Write out results.
Definition:
findQualityFiles.py:443
Generated for CMSSW Reference Manual by
1.8.16