ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
ISF
ISF_FastCaloSim
ISF_FastCaloSimEvent
ISF_FastCaloSimEvent
TFCS1DFunctionTemplateHistogram.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#ifndef ISF_FASTCALOSIMEVENT_TFCS1DFunctionTemplateHistogram_h
6
#define ISF_FASTCALOSIMEVENT_TFCS1DFunctionTemplateHistogram_h
7
8
#include "
ISF_FastCaloSimEvent/TFCS1DFunction.h
"
9
#include "
ISF_FastCaloSimEvent/TFCS1DFunctionTemplateHelpers.h
"
10
11
#include "TH1.h"
12
#include <iostream>
13
14
template
<
typename
Txvec,
typename
Ty,
typename
Trandom =
float
>
15
class
TFCS1DFunctionTemplateHistogram
:
public
TFCS1DFunction
{
16
public
:
17
typedef
TFCS1DFunction_size_t
size_t
;
18
typedef
Trandom
random_type
;
19
typedef
Txvec
xvec_type
;
20
typedef
Ty
y_value_type
;
21
22
TFCS1DFunctionTemplateHistogram
(TH1 *hist =
nullptr
,
bool
doprint =
true
) {
23
if
(hist)
24
Initialize
(hist, doprint);
25
};
26
~TFCS1DFunctionTemplateHistogram
(){};
27
28
std::size_t
MemorySizeArray
()
const
{
29
return
m_HistoBorders
.MemorySizeArray() +
m_HistoContents
.MemorySizeArray();
30
};
31
std::size_t
MemorySize
()
const
{
return
sizeof
(*this) +
MemorySizeArray
(); };
32
34
void
set_nbins
(
size_t
nbins) {
35
m_HistoBorders
.set_nbins(nbins);
36
m_HistoContents
.set_nbins(nbins);
37
};
38
40
inline
size_t
get_nbins
()
const
{
return
m_HistoContents
.get_nbins(); };
41
44
void
Initialize
(
const
TH1 *hist,
bool
doprint =
true
) {
45
Int_t nbins = hist->GetNbinsX();
46
47
std::vector<double> temp_HistoContents;
48
int
first, last;
49
double
integral
=
50
CheckAndIntegrate1DHistogram
(hist, temp_HistoContents, first, last);
51
if
(
integral
<= 0) {
52
set_nbins
(0);
53
}
else
{
54
set_nbins
(nbins);
55
56
m_HistoBorders
.SetMinMax(hist->GetXaxis()->GetBinLowEdge(first + 1),
57
hist->GetXaxis()->GetBinUpEdge(last + 1));
58
Int_t ihist = 0;
59
for
(Int_t ibin = first; ibin <= last; ++ibin) {
60
m_HistoBorders
.SetBinLowEdge(ihist,
61
hist->GetXaxis()->GetBinLowEdge(ibin + 1));
62
if
(ihist > 0)
63
if
(
m_HistoBorders
.GetBinLowEdge(ihist - 1) ==
64
m_HistoBorders
.GetBinLowEdge(ihist)) {
65
if
(doprint)
66
ATH_MSG_INFO
(
"Skip bin="
67
<< ibin + 1
68
<<
" x="
<< hist->GetXaxis()->GetBinLowEdge(ibin + 1)
69
<<
" fx="
<<
m_HistoBorders
.GetBinLowEdge(ihist));
70
--ihist;
71
if
(doprint)
72
ATH_MSG_INFO
(
" bin="
73
<< ibin
74
<<
" x="
<< hist->GetXaxis()->GetBinLowEdge(ibin)
75
<<
" fx="
<<
m_HistoBorders
.GetBinLowEdge(ihist));
76
}
77
m_HistoContents
.set_fraction(ihist,
78
temp_HistoContents[ibin] /
integral
);
79
if
(ihist > 0)
80
if
(
m_HistoContents
.get_fraction(ihist - 1) ==
81
m_HistoContents
.get_fraction(ihist)) {
82
if
(doprint)
83
ATH_MSG_INFO
(
"Skip fbin="
84
<< ihist
85
<<
" fx="
<<
m_HistoBorders
.GetBinLowEdge(ihist)
86
<<
" frac="
<<
m_HistoContents
.get_fraction(ihist));
87
--ihist;
88
if
(doprint)
89
ATH_MSG_INFO
(
" fbin="
90
<< ihist
91
<<
" fx="
<<
m_HistoBorders
.GetBinLowEdge(ihist)
92
<<
" frac="
<<
m_HistoContents
.get_fraction(ihist));
93
}
94
95
if
(doprint)
96
ATH_MSG_INFO
(
"bin="
<< ibin + 1 <<
" fbin="
<< ihist <<
"/"
97
<<
m_HistoBorders
.get_nbins() <<
" x=["
98
<< hist->GetXaxis()->GetBinLowEdge(ibin + 1)
99
<<
","
<< hist->GetXaxis()->GetBinUpEdge(ibin + 1)
100
<<
"] fx="
<<
m_HistoBorders
.GetBinLowEdge(ihist)
101
<<
" int="
<< temp_HistoContents[ibin] /
integral
102
<<
" frac="
103
<<
m_HistoContents
.get_fraction(ihist));
104
105
++ihist;
106
}
107
if
(ihist != nbins) {
108
set_nbins
(ihist);
109
m_HistoBorders
.SetMinMax(hist->GetXaxis()->GetBinLowEdge(first + 1),
110
hist->GetXaxis()->GetBinUpEdge(last + 1));
111
}
112
}
113
}
114
115
using
TFCS1DFunction::rnd_to_fct
;
116
119
virtual
double
rnd_to_fct
(
double
rnd
)
const
{
120
if
(
m_HistoContents
.get_nbins() == 0)
121
return
0;
122
Trandom residual_rnd;
123
size_t
ibin =
m_HistoContents
.get_bin(
rnd
, residual_rnd);
124
// ATH_MSG_INFO( fx="<<m_HistoBorders.GetBinLowEdge(ibin)<<"
125
// frac="<<m_HistoContents.get_fraction(ibin)<<"
126
// residual_rnd="<<residual_rnd);
127
return
m_HistoBorders
.position(ibin, residual_rnd);
128
}
129
130
inline
const
Txvec &
get_HistoBordersx
()
const
{
return
m_HistoBorders
; };
131
inline
Txvec &
get_HistoBordersx
() {
return
m_HistoBorders
; };
132
133
inline
const
TFCS1DFunction_HistogramContent<Ty, Trandom>
&
134
get_HistoContents
()
const
{
135
return
m_HistoContents
;
136
};
137
inline
TFCS1DFunction_HistogramContent<Ty, Trandom>
&
get_HistoContents
() {
138
return
m_HistoContents
;
139
};
140
141
protected
:
142
Txvec
m_HistoBorders
;
143
TFCS1DFunction_HistogramContent<Ty, Trandom>
m_HistoContents
;
144
145
private
:
146
ClassDef(
TFCS1DFunctionTemplateHistogram
,
147
1)
// TFCS1DFunctionTemplateHistogram
148
};
149
150
class
TFCS1DFunctionInt8Int8Histogram
151
:
public
TFCS1DFunctionTemplateHistogram
<
152
TFCS1DFunction_HistogramInt8BinEdges, uint8_t, float> {
153
public
:
154
TFCS1DFunctionInt8Int8Histogram
(TH1 *
h
=
nullptr
)
155
:
TFCS1DFunctionTemplateHistogram
<
TFCS1DFunction_HistogramInt8BinEdges
,
156
uint8_t, float>(
h
){};
157
158
ClassDef(
TFCS1DFunctionInt8Int8Histogram
,
159
1)
// TFCS1DFunctionInt8Int8Histogram
160
};
161
162
class
TFCS1DFunctionInt8Int16Histogram
163
:
public
TFCS1DFunctionTemplateHistogram
<
164
TFCS1DFunction_HistogramInt8BinEdges, uint16_t, float> {
165
public
:
166
TFCS1DFunctionInt8Int16Histogram
(TH1 *
h
=
nullptr
)
167
:
TFCS1DFunctionTemplateHistogram
<
TFCS1DFunction_HistogramInt8BinEdges
,
168
uint16_t, float>(
h
){};
169
170
ClassDef(
TFCS1DFunctionInt8Int16Histogram
,
171
1)
// TFCS1DFunctionInt8Int16Histogram
172
};
173
174
class
TFCS1DFunctionInt8Int32Histogram
175
:
public
TFCS1DFunctionTemplateHistogram
<
176
TFCS1DFunction_HistogramInt8BinEdges, uint32_t, float> {
177
public
:
178
TFCS1DFunctionInt8Int32Histogram
(TH1 *
h
=
nullptr
)
179
:
TFCS1DFunctionTemplateHistogram
<
TFCS1DFunction_HistogramInt8BinEdges
,
180
uint32_t, float>(
h
){};
181
182
ClassDef(
TFCS1DFunctionInt8Int32Histogram
,
183
1)
// TFCS1DFunctionInt8Int32Histogram
184
};
185
186
class
TFCS1DFunctionInt16Int16Histogram
187
:
public
TFCS1DFunctionTemplateHistogram
<
188
TFCS1DFunction_HistogramInt16BinEdges, uint16_t, float> {
189
public
:
190
TFCS1DFunctionInt16Int16Histogram
(TH1 *
h
=
nullptr
)
191
:
TFCS1DFunctionTemplateHistogram
<
TFCS1DFunction_HistogramInt16BinEdges
,
192
uint16_t, float>(
h
){};
193
194
ClassDef(
TFCS1DFunctionInt16Int16Histogram
,
195
1)
// TFCS1DFunctionInt16Int16Histogram
196
};
197
198
class
TFCS1DFunctionInt16Int32Histogram
199
:
public
TFCS1DFunctionTemplateHistogram
<
200
TFCS1DFunction_HistogramInt16BinEdges, uint32_t, float> {
201
public
:
202
TFCS1DFunctionInt16Int32Histogram
(TH1 *
h
=
nullptr
)
203
:
TFCS1DFunctionTemplateHistogram
<
TFCS1DFunction_HistogramInt16BinEdges
,
204
uint32_t, float>(
h
){};
205
206
ClassDef(
TFCS1DFunctionInt16Int32Histogram
,
207
1)
// TFCS1DFunctionInt16Int32Histogram
208
};
209
210
class
TFCS1DFunctionInt32Int32Histogram
211
:
public
TFCS1DFunctionTemplateHistogram
<
212
TFCS1DFunction_HistogramInt32BinEdges, uint32_t, float> {
213
public
:
214
TFCS1DFunctionInt32Int32Histogram
(TH1 *
h
=
nullptr
)
215
:
TFCS1DFunctionTemplateHistogram
<
TFCS1DFunction_HistogramInt32BinEdges
,
216
uint32_t, float>(
h
){};
217
218
ClassDef(
TFCS1DFunctionInt32Int32Histogram
,
219
1)
// TFCS1DFunctionInt32Int32Histogram
220
};
221
222
#endif
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition
AthMsgStreamMacros.h:31
rnd
static TRandom * rnd
Definition
LArWheelSliceSolidTests.cxx:68
TFCS1DFunctionTemplateHelpers.h
TFCS1DFunction_size_t
uint32_t TFCS1DFunction_size_t
Definition
TFCS1DFunctionTemplateHelpers.h:16
TFCS1DFunction.h
h
Header file for AthHistogramAlgorithm.
TFCS1DFunctionInt16Int16Histogram
Definition
TFCS1DFunctionTemplateHistogram.h:188
TFCS1DFunctionInt16Int16Histogram::TFCS1DFunctionInt16Int16Histogram
TFCS1DFunctionInt16Int16Histogram(TH1 *h=nullptr)
Definition
TFCS1DFunctionTemplateHistogram.h:190
TFCS1DFunctionInt16Int32Histogram
Definition
TFCS1DFunctionTemplateHistogram.h:200
TFCS1DFunctionInt16Int32Histogram::TFCS1DFunctionInt16Int32Histogram
TFCS1DFunctionInt16Int32Histogram(TH1 *h=nullptr)
Definition
TFCS1DFunctionTemplateHistogram.h:202
TFCS1DFunctionInt32Int32Histogram
Definition
TFCS1DFunctionTemplateHistogram.h:212
TFCS1DFunctionInt32Int32Histogram::TFCS1DFunctionInt32Int32Histogram
TFCS1DFunctionInt32Int32Histogram(TH1 *h=nullptr)
Definition
TFCS1DFunctionTemplateHistogram.h:214
TFCS1DFunctionInt8Int16Histogram
Definition
TFCS1DFunctionTemplateHistogram.h:164
TFCS1DFunctionInt8Int16Histogram::TFCS1DFunctionInt8Int16Histogram
TFCS1DFunctionInt8Int16Histogram(TH1 *h=nullptr)
Definition
TFCS1DFunctionTemplateHistogram.h:166
TFCS1DFunctionInt8Int32Histogram
Definition
TFCS1DFunctionTemplateHistogram.h:176
TFCS1DFunctionInt8Int32Histogram::TFCS1DFunctionInt8Int32Histogram
TFCS1DFunctionInt8Int32Histogram(TH1 *h=nullptr)
Definition
TFCS1DFunctionTemplateHistogram.h:178
TFCS1DFunctionInt8Int8Histogram
Definition
TFCS1DFunctionTemplateHistogram.h:152
TFCS1DFunctionInt8Int8Histogram::TFCS1DFunctionInt8Int8Histogram
TFCS1DFunctionInt8Int8Histogram(TH1 *h=nullptr)
Definition
TFCS1DFunctionTemplateHistogram.h:154
TFCS1DFunctionTemplateHistogram::get_HistoBordersx
const Txvec & get_HistoBordersx() const
Definition
TFCS1DFunctionTemplateHistogram.h:130
TFCS1DFunctionTemplateHistogram::get_HistoBordersx
Txvec & get_HistoBordersx()
Definition
TFCS1DFunctionTemplateHistogram.h:131
TFCS1DFunctionTemplateHistogram::m_HistoBorders
Txvec m_HistoBorders
Definition
TFCS1DFunctionTemplateHistogram.h:142
TFCS1DFunctionTemplateHistogram::random_type
Trandom random_type
Definition
TFCS1DFunctionTemplateHistogram.h:18
TFCS1DFunctionTemplateHistogram::Initialize
void Initialize(const TH1 *hist, bool doprint=true)
Initialize from root histogram.
Definition
TFCS1DFunctionTemplateHistogram.h:44
TFCS1DFunctionTemplateHistogram::get_HistoContents
const TFCS1DFunction_HistogramContent< Ty, Trandom > & get_HistoContents() const
Definition
TFCS1DFunctionTemplateHistogram.h:134
TFCS1DFunctionTemplateHistogram::get_nbins
size_t get_nbins() const
return number of bins
Definition
TFCS1DFunctionTemplateHistogram.h:40
TFCS1DFunctionTemplateHistogram::MemorySizeArray
std::size_t MemorySizeArray() const
Definition
TFCS1DFunctionTemplateHistogram.h:28
TFCS1DFunctionTemplateHistogram::xvec_type
Txvec xvec_type
Definition
TFCS1DFunctionTemplateHistogram.h:19
TFCS1DFunctionTemplateHistogram::~TFCS1DFunctionTemplateHistogram
~TFCS1DFunctionTemplateHistogram()
Definition
TFCS1DFunctionTemplateHistogram.h:26
TFCS1DFunctionTemplateHistogram::MemorySize
std::size_t MemorySize() const
Gives the total memory size, including the size of additional memory allocated inside the class.
Definition
TFCS1DFunctionTemplateHistogram.h:31
TFCS1DFunctionTemplateHistogram::m_HistoContents
TFCS1DFunction_HistogramContent< Ty, Trandom > m_HistoContents
Definition
TFCS1DFunctionTemplateHistogram.h:143
TFCS1DFunctionTemplateHistogram::y_value_type
Ty y_value_type
Definition
TFCS1DFunctionTemplateHistogram.h:20
TFCS1DFunctionTemplateHistogram::get_HistoContents
TFCS1DFunction_HistogramContent< Ty, Trandom > & get_HistoContents()
Definition
TFCS1DFunctionTemplateHistogram.h:137
TFCS1DFunctionTemplateHistogram::TFCS1DFunctionTemplateHistogram
TFCS1DFunctionTemplateHistogram(TH1 *hist=nullptr, bool doprint=true)
Definition
TFCS1DFunctionTemplateHistogram.h:22
TFCS1DFunctionTemplateHistogram::rnd_to_fct
virtual double rnd_to_fct(double rnd) const
Function gets random number rnd in the range [0,1) as argument and returns function value according t...
Definition
TFCS1DFunctionTemplateHistogram.h:119
TFCS1DFunctionTemplateHistogram::size_t
TFCS1DFunction_size_t size_t
Definition
TFCS1DFunctionTemplateHistogram.h:17
TFCS1DFunctionTemplateHistogram::set_nbins
void set_nbins(size_t nbins)
set number of bins
Definition
TFCS1DFunctionTemplateHistogram.h:34
TFCS1DFunction_HistogramContent
Definition
TFCS1DFunctionTemplateHelpers.h:157
TFCS1DFunction_HistogramInt16BinEdges
Definition
TFCS1DFunctionTemplateHelpers.h:517
TFCS1DFunction_HistogramInt32BinEdges
Definition
TFCS1DFunctionTemplateHelpers.h:528
TFCS1DFunction_HistogramInt8BinEdges
Definition
TFCS1DFunctionTemplateHelpers.h:507
TFCS1DFunction::CheckAndIntegrate1DHistogram
static double CheckAndIntegrate1DHistogram(const TH1 *hist, std::vector< double > &integral_vec, int &first, int &last)
Definition
TFCS1DFunction.cxx:55
TFCS1DFunction::TFCS1DFunction
TFCS1DFunction()
Definition
TFCS1DFunction.h:19
TFCS1DFunction::rnd_to_fct
virtual void rnd_to_fct(float value[], const float rnd[]) const
Function gets array of random numbers rnd[] in the range [0,1) as arguments and returns function valu...
Definition
TFCS1DFunction.cxx:18
integral
double integral(TH1 *h)
Definition
computils.cxx:59
Generated on
for ATLAS Offline Software by
1.17.0