ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Simulation
ISF
ISF_FastCaloSim
ISF_FastCaloSimEvent
src
TFCSParametrizationEkinSelectChain.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "CLHEP/Random/RandFlat.h"
6
7
#include "
ISF_FastCaloSimEvent/TFCSParametrizationEkinSelectChain.h
"
8
#include "
ISF_FastCaloSimEvent/TFCSInvisibleParametrization.h
"
9
#include "
ISF_FastCaloSimEvent/TFCSSimulationState.h
"
10
#include "
ISF_FastCaloSimEvent/TFCSTruthState.h
"
11
#include "
ISF_FastCaloSimEvent/TFCSExtrapolationState.h
"
12
13
#include <iostream>
14
15
//=============================================
16
//======= TFCSParametrizationEkinSelectChain =========
17
//=============================================
18
19
void
TFCSParametrizationEkinSelectChain::recalc
() {
20
clear
();
21
if
(
size
() == 0)
22
return
;
23
24
recalc_pdgid_intersect
();
25
recalc_Ekin_union
();
26
recalc_eta_intersect
();
27
28
chain
().shrink_to_fit();
29
}
30
31
void
TFCSParametrizationEkinSelectChain::push_back_in_bin
(
32
TFCSParametrizationBase
*param) {
33
push_back_in_bin
(param, param->
Ekin_min
(), param->
Ekin_max
());
34
}
35
36
int
TFCSParametrizationEkinSelectChain::get_bin
(
37
TFCSSimulationState
&simulstate,
const
TFCSTruthState
*truth,
38
const
TFCSExtrapolationState
*)
const
{
39
if
(!simulstate.
randomEngine
()) {
40
return
-1;
41
}
42
43
float
Ekin = truth->
Ekin
();
44
int
bin
=
val_to_bin
(Ekin);
45
46
if
(!
DoRandomInterpolation
())
47
return
bin
;
48
float
rnd
= CLHEP::RandFlat::shoot(simulstate.
randomEngine
());
49
if
(
bin
< 0)
50
return
bin
;
51
if
(
bin
>= (
int
)
get_number_of_bins
())
52
return
bin
;
53
54
// if no parametrizations for this bin, return
55
if
(
m_bin_start
[
bin
+ 1] ==
m_bin_start
[
bin
])
56
return
bin
;
57
58
TFCSParametrizationBase
*first_in_bin =
chain
()[
m_bin_start
[
bin
]];
59
if
(!first_in_bin)
60
return
bin
;
61
62
if
(Ekin < first_in_bin->
Ekin_nominal
()) {
63
if
(
bin
== 0)
64
return
bin
;
65
int
prevbin =
bin
- 1;
66
// if no parametrizations for previous bin, return
67
if
(
m_bin_start
[prevbin + 1] ==
m_bin_start
[prevbin])
68
return
bin
;
69
70
TFCSParametrizationBase
*first_in_prevbin =
chain
()[
m_bin_start
[prevbin]];
71
if
(!first_in_prevbin)
72
return
bin
;
73
74
float
logEkin = TMath::Log(Ekin);
75
float
logEkin_nominal = TMath::Log(first_in_bin->
Ekin_nominal
());
76
float
logEkin_previous = TMath::Log(first_in_prevbin->
Ekin_nominal
());
77
float
numerator = logEkin - logEkin_previous;
78
float
denominator = logEkin_nominal - logEkin_previous;
79
if
(denominator <= 0)
80
return
bin
;
81
82
if
(numerator / denominator <
rnd
)
83
bin
= prevbin;
84
ATH_MSG_DEBUG
(
"logEkin="
85
<< logEkin <<
" logEkin_previous="
<< logEkin_previous
86
<<
" logEkin_nominal="
<< logEkin_nominal
87
<<
" (rnd="
<< 1 -
rnd
88
<<
" < p(previous)="
<< (1 - numerator / denominator)
89
<<
")? => orgbin="
<< prevbin + 1 <<
" selbin="
<<
bin
);
90
}
else
{
91
if
(
bin
== (
int
)
get_number_of_bins
() - 1)
92
return
bin
;
93
int
nextbin =
bin
+ 1;
94
// if no parametrizations for previous bin, return
95
if
(
m_bin_start
[nextbin + 1] ==
m_bin_start
[nextbin])
96
return
bin
;
97
98
TFCSParametrizationBase
*first_in_nextbin =
chain
()[
m_bin_start
[nextbin]];
99
if
(!first_in_nextbin)
100
return
bin
;
101
102
float
logEkin = TMath::Log(Ekin);
103
float
logEkin_nominal = TMath::Log(first_in_bin->
Ekin_nominal
());
104
float
logEkin_next = TMath::Log(first_in_nextbin->
Ekin_nominal
());
105
float
numerator = logEkin - logEkin_nominal;
106
float
denominator = logEkin_next - logEkin_nominal;
107
if
(denominator <= 0)
108
return
bin
;
109
110
if
(
rnd
< numerator / denominator)
111
bin
= nextbin;
112
ATH_MSG_DEBUG
(
"logEkin="
113
<< logEkin <<
" logEkin_nominal="
<< logEkin_nominal
114
<<
" logEkin_next="
<< logEkin_next <<
" (rnd="
<<
rnd
115
<<
" < p(next)="
<< numerator / denominator
116
<<
")? => orgbin="
<< nextbin - 1 <<
" selbin="
<<
bin
);
117
}
118
119
return
bin
;
120
}
121
122
const
std::string
TFCSParametrizationEkinSelectChain::get_variable_text
(
123
TFCSSimulationState
&,
const
TFCSTruthState
*truth,
124
const
TFCSExtrapolationState
*)
const
{
125
return
std::string(Form(
"Ekin=%1.1f"
, truth->
Ekin
()));
126
}
127
128
const
std::string
129
TFCSParametrizationEkinSelectChain::get_bin_text
(
int
bin
)
const
{
130
if
(
bin
== -1 ||
bin
>= (
int
)
get_number_of_bins
()) {
131
return
std::string(Form(
"bin=%d not in [%1.1f<=Ekin<%1.1f)"
,
bin
,
132
m_bin_low_edge
[0],
133
m_bin_low_edge
[
get_number_of_bins
()]));
134
}
135
if
(
DoRandomInterpolation
()) {
136
return
std::string(Form(
"bin=%d, %1.1f<=Ekin(+random)<%1.1f"
,
bin
,
137
m_bin_low_edge
[
bin
],
m_bin_low_edge
[
bin
+ 1]));
138
}
139
return
std::string(Form(
"bin=%d, %1.1f<=Ekin<%1.1f"
,
bin
,
m_bin_low_edge
[
bin
],
140
m_bin_low_edge
[
bin
+ 1]));
141
}
142
143
void
TFCSParametrizationEkinSelectChain::unit_test
(
144
TFCSSimulationState
*simulstate,
TFCSTruthState
*truth,
145
const
TFCSExtrapolationState
*extrapol) {
146
ISF_FCS::MLogging
logger
;
147
if
(!simulstate)
148
simulstate =
new
TFCSSimulationState
();
149
if
(!truth)
150
truth =
new
TFCSTruthState
();
151
if
(!extrapol)
152
extrapol =
new
TFCSExtrapolationState
();
153
154
TFCSParametrizationEkinSelectChain
chain
(
"chain"
,
"chain"
);
155
chain
.setLevel(MSG::DEBUG);
156
157
TFCSParametrization
*param;
158
param =
new
TFCSInvisibleParametrization
(
"A begin all"
,
"A begin all"
);
159
param->
setLevel
(MSG::DEBUG);
160
param->
set_Ekin_nominal
(2);
161
param->
set_Ekin_min
(2);
162
param->
set_Ekin_max
(5);
163
chain
.push_before_first_bin(param);
164
param =
new
TFCSInvisibleParametrization
(
"A end all"
,
"A end all"
);
165
param->
setLevel
(MSG::DEBUG);
166
param->
set_Ekin_nominal
(2);
167
param->
set_Ekin_min
(2);
168
param->
set_Ekin_max
(5);
169
chain
.push_back(param);
170
171
const
int
n_params = 5;
172
for
(
int
i = 2; i < n_params; ++i) {
173
param =
new
TFCSInvisibleParametrization
(Form(
"A%d"
, i), Form(
"A %d"
, i));
174
param->
setLevel
(MSG::DEBUG);
175
param->
set_Ekin_nominal
(TMath::Power(2.0, i));
176
param->
set_Ekin_min
(TMath::Power(2.0, i - 0.5));
177
param->
set_Ekin_max
(TMath::Power(2.0, i + 0.5));
178
chain
.push_back_in_bin(param);
179
}
180
for
(
int
i = n_params; i >= 1; --i) {
181
param =
new
TFCSInvisibleParametrization
(Form(
"B%d"
, i), Form(
"B %d"
, i));
182
param->
setLevel
(MSG::DEBUG);
183
param->
set_Ekin_nominal
(TMath::Power(2.0, i));
184
param->
set_Ekin_min
(TMath::Power(2.0, i - 0.5));
185
param->
set_Ekin_max
(TMath::Power(2.0, i + 0.5));
186
chain
.push_back_in_bin(param);
187
}
188
189
ATH_MSG_NOCLASS
(
logger
,
"==== Chain setup ===="
);
190
chain
.Print();
191
192
param =
new
TFCSInvisibleParametrization
(
"B end all"
,
"B end all"
);
193
param->
setLevel
(MSG::DEBUG);
194
chain
.push_back(param);
195
param =
new
TFCSInvisibleParametrization
(
"B begin all"
,
"B begin all"
);
196
param->
setLevel
(MSG::DEBUG);
197
chain
.push_before_first_bin(param);
198
199
ATH_MSG_NOCLASS
(
logger
,
"==== Chain setup ===="
);
200
chain
.Print();
201
ATH_MSG_NOCLASS
(
logger
,
"==== Simulate with E=0.3 ===="
);
202
truth->SetPtEtaPhiM(0.3, 0, 0, 0);
203
chain
.simulate(*simulstate, truth, extrapol);
204
for
(
double
E = 1; E < 10.1; E += 1) {
205
ATH_MSG_NOCLASS
(
logger
,
"==== Simulate with E="
<< E <<
" ===="
);
206
truth->SetPtEtaPhiM(E, 0, 0, 0);
207
chain
.simulate(*simulstate, truth, extrapol);
208
}
209
ATH_MSG_NOCLASS
(
logger
,
"==== Simulate with E=100 ===="
);
210
truth->SetPtEtaPhiM(100, 0, 0, 0);
211
chain
.simulate(*simulstate, truth, extrapol);
212
ATH_MSG_NOCLASS
(
logger
,
"==================================="
<< std::endl);
213
ATH_MSG_NOCLASS
(
logger
,
"====== now with random bin ========"
<< std::endl);
214
chain
.set_DoRandomInterpolation();
215
for
(
double
E = 15; E < 35.1; E += 4) {
216
ATH_MSG_NOCLASS
(
logger
,
"==== Simulate with E="
<< E <<
" ===="
);
217
truth->SetPtEtaPhiM(E, 0, 0, 0);
218
for
(
int
i = 0; i < 10; ++i)
219
chain
.simulate(*simulstate, truth, extrapol);
220
}
221
ATH_MSG_NOCLASS
(
logger
,
"==================================="
<< std::endl);
222
}
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition
AthMsgStreamMacros.h:29
rnd
static TRandom * rnd
Definition
LArWheelSliceSolidTests.cxx:68
ATH_MSG_NOCLASS
#define ATH_MSG_NOCLASS(logger_name, x)
Definition
MLogging.h:52
clear
void clear()
Empty the pool.
TFCSExtrapolationState.h
TFCSInvisibleParametrization.h
TFCSParametrizationEkinSelectChain.h
TFCSSimulationState.h
TFCSTruthState.h
ISF_FCS::MLogging
Cut down AthMessaging.
Definition
MLogging.h:176
ISF_FCS::MLogging::setLevel
virtual void setLevel(MSG::Level lvl)
Update outputlevel.
Definition
MLogging.cxx:105
TFCSExtrapolationState
Definition
TFCSExtrapolationState.h:13
TFCSInvisibleParametrization
Definition
TFCSInvisibleParametrization.h:10
TFCSParametrizationBase
Definition
TFCSParametrizationBase.h:46
TFCSParametrizationBase::Ekin_min
virtual double Ekin_min() const
Definition
TFCSParametrizationBase.h:77
TFCSParametrizationBase::Ekin_max
virtual double Ekin_max() const
Definition
TFCSParametrizationBase.h:78
TFCSParametrizationBase::Ekin_nominal
virtual double Ekin_nominal() const
Definition
TFCSParametrizationBase.h:76
TFCSParametrizationBinnedChain::get_number_of_bins
virtual unsigned int get_number_of_bins() const
Definition
TFCSParametrizationBinnedChain.h:22
TFCSParametrizationBinnedChain::m_bin_start
std::vector< unsigned int > m_bin_start
Contains the index where the TFCSParametrizationBase* instances to run for a given bin start.
Definition
TFCSParametrizationBinnedChain.h:53
TFCSParametrizationChain::recalc_pdgid_intersect
void recalc_pdgid_intersect()
Definition
TFCSParametrizationChain.cxx:20
TFCSParametrizationChain::recalc_Ekin_union
void recalc_Ekin_union()
Definition
TFCSParametrizationChain.cxx:82
TFCSParametrizationChain::chain
const Chain_t & chain() const
Definition
TFCSParametrizationChain.h:53
TFCSParametrizationChain::recalc_eta_intersect
void recalc_eta_intersect()
Definition
TFCSParametrizationChain.cxx:61
TFCSParametrizationChain::size
virtual unsigned int size() const override
Some derived classes have daughter instances of TFCSParametrizationBase objects The size() and operat...
Definition
TFCSParametrizationChain.h:41
TFCSParametrizationEkinSelectChain::DoRandomInterpolation
bool DoRandomInterpolation() const
Definition
TFCSParametrizationEkinSelectChain.h:32
TFCSParametrizationEkinSelectChain::get_variable_text
virtual const std::string get_variable_text(TFCSSimulationState &simulstate, const TFCSTruthState *, const TFCSExtrapolationState *) const override
Definition
TFCSParametrizationEkinSelectChain.cxx:122
TFCSParametrizationEkinSelectChain::unit_test
static void unit_test(TFCSSimulationState *simulstate=nullptr, TFCSTruthState *truth=nullptr, const TFCSExtrapolationState *extrapol=nullptr)
Definition
TFCSParametrizationEkinSelectChain.cxx:143
TFCSParametrizationEkinSelectChain::get_bin_text
virtual const std::string get_bin_text(int bin) const override
print the range of a bin; for bin -1, print the allowed range
Definition
TFCSParametrizationEkinSelectChain.cxx:129
TFCSParametrizationEkinSelectChain::TFCSParametrizationEkinSelectChain
TFCSParametrizationEkinSelectChain(const char *name=nullptr, const char *title=nullptr)
Definition
TFCSParametrizationEkinSelectChain.h:14
TFCSParametrizationEkinSelectChain::get_bin
virtual int get_bin(TFCSSimulationState &, const TFCSTruthState *truth, const TFCSExtrapolationState *) const override
this method should determine in derived classes which bin to simulate, so that the simulate method ca...
Definition
TFCSParametrizationEkinSelectChain.cxx:36
TFCSParametrizationEkinSelectChain::push_back_in_bin
virtual void push_back_in_bin(TFCSParametrizationBase *param)
Definition
TFCSParametrizationEkinSelectChain.cxx:31
TFCSParametrizationEkinSelectChain::recalc
virtual void recalc() override
Default is to call recalc_pdgid_intersect() and recalc_Ekin_eta_intersect().
Definition
TFCSParametrizationEkinSelectChain.cxx:19
TFCSParametrizationFloatSelectChain::m_bin_low_edge
std::vector< float > m_bin_low_edge
Definition
TFCSParametrizationFloatSelectChain.h:41
TFCSParametrizationFloatSelectChain::val_to_bin
int val_to_bin(float val) const
Definition
TFCSParametrizationFloatSelectChain.cxx:92
TFCSParametrization
Definition
TFCSParametrization.h:10
TFCSParametrization::Ekin_nominal
double Ekin_nominal() const override
Definition
TFCSParametrization.h:35
TFCSParametrization::set_Ekin_max
virtual void set_Ekin_max(double max)
Definition
TFCSParametrization.cxx:45
TFCSParametrization::set_Ekin_min
virtual void set_Ekin_min(double min)
Definition
TFCSParametrization.cxx:43
TFCSParametrization::set_Ekin_nominal
virtual void set_Ekin_nominal(double min)
Definition
TFCSParametrization.cxx:39
TFCSSimulationState
Definition
TFCSSimulationState.h:32
TFCSSimulationState::randomEngine
CLHEP::HepRandomEngine * randomEngine()
Definition
TFCSSimulationState.h:36
TFCSTruthState
Definition
TFCSTruthState.h:13
TFCSTruthState::Ekin
double Ekin() const
Definition
TFCSTruthState.h:26
bin
Definition
BinsDiffFromStripMedian.h:43
logger
static Root::TMsgLogger logger("iLumiCalc")
Generated on
for ATLAS Offline Software by
1.17.0