FastSimulation
Utilities
src
SimpleHistogramGenerator.cc
Go to the documentation of this file.
1
#include "
FastSimulation/Utilities/interface/SimpleHistogramGenerator.h
"
2
#include "
FastSimulation/Utilities/interface/RandomEngineAndDistribution.h
"
3
4
#include <cmath>
5
#include "TH1.h"
6
// #include <iostream>
7
8
SimpleHistogramGenerator::SimpleHistogramGenerator
(TH1*
histo
)
9
:
//myHisto(histo),
10
//theXaxis(histo->GetXaxis()),
11
nBins
(
histo
->GetXaxis()->GetNbins()),
12
xMin
(
histo
->GetXaxis()->GetXmin()),
13
xMax
(
histo
->GetXaxis()->GetXmax()),
14
binWidth((
xMax
-
xMin
) / (
float
)
nBins
) {
15
integral
.reserve(
nBins
+ 2);
16
integral
.push_back(0.);
17
for
(
int
i
= 1;
i
<=
nBins
; ++
i
)
18
integral
.push_back(
integral
[
i
- 1] +
histo
->GetBinContent(
i
));
19
integral
.push_back(
integral
[
nBins
]);
20
nEntries
=
integral
[
nBins
+ 1];
21
for
(
int
i
= 1;
i
<=
nBins
; ++
i
)
22
integral
[
i
] /=
nEntries
;
23
}
24
25
double
SimpleHistogramGenerator::generate
(
RandomEngineAndDistribution
const
* random)
const
{
26
// return a random number distributed according the histogram bin contents.
27
// NB Only valid for 1-d histograms, with fixed bin width.
28
29
double
r1
= random->
flatShoot
();
30
int
ibin =
binarySearch
(
nBins
,
integral
,
r1
);
31
double
x
=
xMin
+ (double)(ibin)*
binWidth
;
32
if
(
r1
>
integral
[ibin])
33
x
+=
binWidth
* (
r1
-
integral
[ibin]) / (
integral
[ibin + 1] -
integral
[ibin]);
34
return
x
;
35
}
36
37
int
SimpleHistogramGenerator::binarySearch
(
const
int
&
n
,
const
std::vector<float>&
array
,
const
double
&
value
)
const
{
38
// Binary search in an array of n values to locate value.
39
//
40
// Array is supposed to be sorted prior to this call.
41
// If match is found, function returns position of element.
42
// If no match found, function gives nearest element smaller than value.
43
44
int
nabove, nbelow, middle;
45
nabove =
n
+ 1;
46
nbelow = 0;
47
while
(nabove - nbelow > 1) {
48
middle = (nabove + nbelow) / 2;
49
if
(
value
==
array
[middle - 1])
50
return
middle - 1;
51
if
(
value
<
array
[middle - 1])
52
nabove = middle;
53
else
54
nbelow = middle;
55
}
56
return
nbelow - 1;
57
}
mps_fire.i
i
Definition:
mps_fire.py:428
dqmMemoryStats.float
float
Definition:
dqmMemoryStats.py:127
dqmiodumpmetadata.n
n
Definition:
dqmiodumpmetadata.py:28
SimpleHistogramGenerator::xMin
double xMin
Definition:
SimpleHistogramGenerator.h:47
timingPdfMaker.histo
histo
Definition:
timingPdfMaker.py:278
mps_check.array
array
Definition:
mps_check.py:216
SimpleHistogramGenerator::generate
double generate(RandomEngineAndDistribution const *) const
The random generation.
Definition:
SimpleHistogramGenerator.cc:25
DDAxes::x
RandomEngineAndDistribution.h
photonAnalyzer_cfi.xMin
xMin
Definition:
photonAnalyzer_cfi.py:82
SimpleHistogramGenerator::binarySearch
int binarySearch(const int &n, const std::vector< float > &array, const double &value) const
Definition:
SimpleHistogramGenerator.cc:37
seedmultiplicitymonitor_newtracking_cfi.nBins
nBins
Definition:
seedmultiplicitymonitor_newtracking_cfi.py:8
SimpleHistogramGenerator::nBins
int nBins
Pointer to the histogram.
Definition:
SimpleHistogramGenerator.h:44
SimpleHistogramGenerator.h
SimpleHistogramGenerator::nEntries
double nEntries
Number of entries.
Definition:
SimpleHistogramGenerator.h:56
value
Definition:
value.py:1
RandomEngineAndDistribution::flatShoot
double flatShoot(double xmin=0.0, double xmax=1.0) const
Definition:
RandomEngineAndDistribution.h:27
SimpleHistogramGenerator::SimpleHistogramGenerator
SimpleHistogramGenerator(TH1 *histo)
Definition:
SimpleHistogramGenerator.cc:8
diffTwoXMLs.r1
r1
Definition:
diffTwoXMLs.py:53
multiplicitycorr_cfi.xMax
xMax
Definition:
multiplicitycorr_cfi.py:5
SimpleHistogramGenerator::integral
std::vector< float > integral
Integral.
Definition:
SimpleHistogramGenerator.h:53
SimpleHistogramGenerator::binWidth
double binWidth
Definition:
SimpleHistogramGenerator.h:50
RandomEngineAndDistribution
Definition:
RandomEngineAndDistribution.h:18
Generated for CMSSW Reference Manual by
1.8.16