17#include "../../../GaudiKernel/tests/src/LogHistogram.h"
26 template <
typename Arithmetic, Gaudi::Accumulators::atomicity Atomicity>
38 error() <<
"Unable to create Random generator" <<
endmsg;
43 for (
unsigned int iH = 0; iH <
m_nHistos; ++iH ) {
44 std::ostringstream title;
45 title <<
"Histogram Number " << iH;
46 m_histos.emplace_back(
this, title.str(), title.str(), axis );
53 for (
unsigned int iT = 0; iT <
m_nTracks; ++iT ) {
62 mutable std::deque<Gaudi::Accumulators::StaticHistogram<1, Atomicity, Arithmetic>>
m_histos;
93 const double gauss( Gauss() );
94 const double gauss2( Gauss() );
95 const double flat( Flat() );
96 const double gauss3( Gauss3() );
119 for (
unsigned int i = 0; i < 10; i++ ) {
121 ++gaussVflat_buf[{ flat, gauss }];
122 ++gaussVflatVgauss_buf[{ flat, gauss, gauss2 }];
145 for (
unsigned int i = 0; i < 10; i++ ) {
146 prof_gauss_buf[gauss] += gauss3;
147 prof_gaussVflat_buf[{ flat, gauss }] += gauss3;
148 prof_gaussVflatVgauss_buf[{ flat, gauss, gauss2 }] += gauss3;
171 if (
m_nCalls.nEntries() == 0 ) always() <<
"Filling Histograms...... Please be patient !" <<
endmsg;
183 this,
"Empty1D",
"Empty 1D histogram", { 100, -5, 5,
"X" } };
185 this,
"Empty2D",
"Empty 2D histogram", { { 50, -5, 5,
"X" }, { 50, -5, 5,
"Y" } } };
187 this,
"Empty3D",
"Empty 3D histogram", { { 10, -5, 5,
"X" }, { 10, -5, 5,
"Y" }, { 10, -5, 5,
"Z" } } };
191 this,
"Gauss",
"Gaussian mean=0, sigma=1, atomic", { 100, -5, 5,
"X" } };
193 this,
"GaussFlat",
"Gaussian V Flat, atomic", { { 50, -5, 5,
"X" }, { 50, -5, 5,
"Y" } } };
197 "Gaussian V Flat V Gaussian, atomic",
198 { { 10, -5, 5,
"X" }, { 10, -5, 5,
"Y" }, { 10, -5, 5,
"Z" } } };
202 this,
"GaussNA",
"Gaussian mean=0, sigma=1, non atomic", { 100, -5, 5 } };
204 this,
"GaussFlatNA",
"Gaussian V Flat, non atomic", { { 50, -5, 5 }, { 50, -5, 5 } } };
208 "Gaussian V Flat V Gaussian, non atomic",
209 { { 10, -5, 5 }, { 10, -5, 5 }, { 10, -5, 5 } } };
213 this,
"GaussInt",
"Gaussian mean=0, sigma=1, integer values", { 10, -5, 5 } };
215 this,
"GaussFlatInt",
"Gaussian V Flat, integer values", { { 10, -5, 5 }, { 10, -5, 5 } } };
219 "Gaussian V Flat V Gaussian, interger values",
220 { { 10, -5, 5 }, { 10, -5, 5 }, { 10, -5, 5 } } };
224 this,
"GaussW",
"Gaussian mean=0, sigma=1, weighted", { 100, -5, 5 } };
226 this,
"GaussFlatW",
"Gaussian V Flat, weighted", { { 50, -5, 5 }, { 50, -5, 5 } } };
230 "Gaussian V Flat V Gaussian, weighted",
231 { { 10, -5, 5 }, { 10, -5, 5 }, { 10, -5, 5 } } };
235 this,
"GaussBuf",
"Gaussian mean=0, sigma=1, buffered", { 100, -5, 5 } };
237 this,
"GaussFlatBuf",
"Gaussian V Flat, buffered", { { 50, -5, 5 }, { 50, -5, 5 } } };
241 "Gaussian V Flat V Gaussian, buffered",
242 { { 10, -5, 5 }, { 10, -5, 5 }, { 10, -5, 5 } } };
248 this,
"ProfGauss",
"Profile, Gaussian mean=0, sigma=1, atomic", { 100, -5, 5 } };
250 this,
"ProfGaussFlat",
"Profile, Gaussian V Flat, atomic", { { 50, -5, 5 }, { 50, -5, 5 } } };
253 "ProfGaussFlatGauss",
254 "Profile, Gaussian V Flat V Gaussian, atomic",
255 { { 10, -5, 5 }, { 10, -5, 5 }, { 10, -5, 5 } } };
259 this,
"ProfGaussNA",
"Profile, Gaussian mean=0, sigma=1, non atomic", { 100, -5, 5 } };
262 this,
"ProfGaussFlatNA",
"Profile, Gaussian V Flat, non atomic", { { 50, -5, 5 }, { 50, -5, 5 } } };
265 "ProfGaussFlatGaussNA",
266 "Profile, Gaussian V Flat V Gaussian, non atomic",
267 { { 10, -5, 5 }, { 10, -5, 5 }, { 10, -5, 5 } } };
272 this,
"ProfGaussInt",
"Profile, Gaussian mean=0, sigma=1, integer values", { 10, -5, 5 } };
276 "Profile, Gaussian V Flat, integer values",
277 { { 10, -5, 5 }, { 10, -5, 5 } } };
280 "ProfGaussFlatGaussInt",
281 "Profile, Gaussian V Flat V Gaussian, interger values",
282 { { 10, -5, 5 }, { 10, -5, 5 }, { 10, -5, 5 } } };
286 this,
"ProfGaussW",
"Profile, Gaussian mean=0, sigma=1, weighted", { 100, -5, 5 } };
288 this,
"ProfGaussFlatW",
"Profile, Gaussian V Flat, weighted", { { 50, -5, 5 }, { 50, -5, 5 } } };
291 "ProfGaussFlatGaussW",
292 "Profile, Gaussian V Flat V Gaussian, weighted",
293 { { 10, -5, 5 }, { 10, -5, 5 }, { 10, -5, 5 } } };
297 this,
"ProfGaussBuf",
"Profile, Gaussian mean=0, sigma=1, buffered", { 100, -5, 5 } };
299 this,
"ProfGaussFlatBuf",
"Profile, Gaussian V Flat, buffered", { { 50, -5, 5 }, { 50, -5, 5 } } };
302 "ProfGaussFlatGaussBuf",
303 "Profile, Gaussian V Flat V Gaussian, buffered",
304 { { 10, -5, 5 }, { 10, -5, 5 }, { 10, -5, 5 } } };
307 mutable Accumulators::LogHistogram<1>
m_log_gauss{
this,
"LogGauss",
"Log, Gaussian", { 5, 0, 2 } };
308 mutable Accumulators::LogHistogram<2, Accumulators::atomicity::full, float>
m_log_gaussVflat{
309 this,
"LogGaussFlat",
"LogLog, Gaussian V Flat", { { 5, 0, 2 }, { 5, 0, 2 } } };
313 this,
"/TopDir/SubDir/Gauss",
"Gaussian mean=0, sigma=1, atomic", { 100, -5, 5,
"X" } };
317 this,
"CustomGaussNoProp",
"Gaussian mean=0, sigma=1, atomic", { 100, -5, 5,
"X" } };
329 "CustomProfGaussFlatGauss" };
333 "CustomProfGaussFlatW" };
335 this,
"CustomProfGaussFlatGaussW" };
354 const double gauss( Gauss() );
355 const double gauss2( Gauss() );
356 const double flat( Flat() );
367 for (
unsigned int i = 0; i < 10; i++ ) {
369 ++gaussVflat_buf[{ flat, gauss }];
370 ++gaussVflatVgauss_buf[{ flat, gauss, gauss2 }];
378 if (
m_nCalls.nEntries() == 0 ) always() <<
"Filling Histograms...... Please be patient !" <<
endmsg;
390 this,
"Gauss",
"Gaussian mean=0, sigma=1, atomic", { 100, -5, 5,
"X" } };
392 this,
"GaussFlat",
"Gaussian V Flat, atomic", { { 50, -5, 5,
"X" }, { 50, -5, 5,
"Y" } } };
396 "Gaussian V Flat V Gaussian, atomic",
397 { { 10, -5, 5,
"X" }, { 10, -5, 5,
"Y" }, { 10, -5, 5,
"Z" } } };
401 this,
"GaussBuf",
"Gaussian mean=0, sigma=1, buffered", { 100, -5, 5 } };
403 this,
"GaussFlatBuf",
"Gaussian V Flat, buffered", { { 50, -5, 5 }, { 50, -5, 5 } } };
407 "Gaussian V Flat V Gaussian, buffered",
408 { { 10, -5, 5 }, { 10, -5, 5 }, { 10, -5, 5 } } };
412 "Gaussian mean=0, sigma=1, atomic" };
414 "Gaussian V Flat, atomic" };
416 "Gaussian V Flat V Gaussian, atomic" };
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
#define DECLARE_COMPONENT_WITH_ID(type, id)
#define DECLARE_COMPONENT(type)
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
This class represents an entry point to all the event specific data.
Definition of a default type of Histogram Axis It contains number of bins, min and max value plus a t...
Base class from which all concrete algorithm classes should be derived.
Algorithm(std::string name, ISvcLocator *svcloc, std::string version=PACKAGE_VERSION)
Constructor.
StatusCode initialize() override
the default (empty) implementation of IStateful::initialize() method
SmartIF< IRndmGenSvc > & randSvc() const
The standard RandomGen service, Return a pointer to the service if present.
SmartIF< IService > service(std::string_view name, const bool createIf=true, const bool quiet=false) const
Return a pointer to the service identified by name (or "type/name")
Helper class to implement the IFSMCallbackHolder interface.
Implementation of property with value of concrete type.
Example of algorithm using histograms accumulators.
Gaudi::Accumulators::StaticHistogram< 1 > m_empty1D
Gaudi::Accumulators::StaticHistogram< 2 > m_gaussVflat_buf
Gaudi::Accumulators::WeightedHistogram< 2 > m_custom_gaussVflat_w
Gaudi::Accumulators::WeightedProfileHistogram< 3 > m_custom_prof_gaussVflatVgauss_w
Gaudi::Accumulators::StaticHistogram< 2 > m_empty2D
Gaudi::Accumulators::StaticHistogram< 2 > m_gaussVflat
StatusCode initialize() override
Gaudi::Accumulators::Histogram< 1 > m_custom_gauss_noinit
Gaudi::Accumulators::StaticHistogram< 1 > m_gaussAbsName
Gaudi::Accumulators::StaticWeightedProfileHistogram< 2 > m_prof_gaussVflat_w
FSMCallbackHolder< Gaudi::Algorithm > Base
Gaudi::Accumulators::StaticWeightedHistogram< 3 > m_gaussVflatVgauss_w
Gaudi::Accumulators::StaticWeightedHistogram< 2 > m_gaussVflat_w
Gaudi::Accumulators::ProfileHistogram< 2 > m_custom_prof_gaussVflat
Gaudi::Accumulators::StaticProfileHistogram< 3 > m_prof_gaussVflatVgauss_buf
Gaudi::Accumulators::StaticHistogram< 3, Gaudi::Accumulators::atomicity::none > m_gaussVflatVgauss_noato
Gaudi::Accumulators::StaticProfileHistogram< 1, Gaudi::Accumulators::atomicity::none > m_prof_gauss_noato
Gaudi::Accumulators::StaticProfileHistogram< 2 > m_prof_gaussVflat_buf
Gaudi::Accumulators::StaticProfileHistogram< 1 > m_prof_gauss_buf
Gaudi::Accumulators::StaticHistogram< 3, Gaudi::Accumulators::atomicity::full, int > m_gaussVflatVgauss_int
Gaudi::Accumulators::ProfileHistogram< 1 > m_custom_prof_gauss
Gaudi::Accumulators::StaticHistogram< 1 > m_gauss_buf
Gaudi::Accumulators::WeightedProfileHistogram< 2 > m_custom_prof_gaussVflat_w
Gaudi::Accumulators::StaticHistogram< 2, Gaudi::Accumulators::atomicity::full, int > m_gaussVflat_int
StatusCode execute(const EventContext &) const override
Gaudi::Accumulators::StaticProfileHistogram< 1, Gaudi::Accumulators::atomicity::full, int > m_prof_gauss_int
Gaudi::Accumulators::StaticProfileHistogram< 3, Gaudi::Accumulators::atomicity::full, int > m_prof_gaussVflatVgauss_int
Gaudi::Accumulators::WeightedProfileHistogram< 1 > m_custom_prof_gauss_w
Gaudi::Accumulators::StaticHistogram< 1, Gaudi::Accumulators::atomicity::full, int > m_gauss_int
Gaudi::Accumulators::StaticWeightedProfileHistogram< 3 > m_prof_gaussVflatVgauss_w
Gaudi::Accumulators::StaticWeightedProfileHistogram< 1 > m_prof_gauss_w
Gaudi::Accumulators::StaticProfileHistogram< 2, Gaudi::Accumulators::atomicity::full, int > m_prof_gaussVflat_int
Gaudi::Accumulators::StaticHistogram< 2, Gaudi::Accumulators::atomicity::none > m_gaussVflat_noato
Gaudi::Accumulators::StaticHistogram< 1 > m_gauss
Gaudi::Accumulators::StaticHistogram< 3 > m_gaussVflatVgauss_buf
Accumulators::LogHistogram< 1 > m_log_gauss
Gaudi::Accumulators::StaticHistogram< 3 > m_empty3D
Gaudi::Accumulators::StaticProfileHistogram< 2, Gaudi::Accumulators::atomicity::none > m_prof_gaussVflat_noato
Accumulators::LogHistogram< 2, Accumulators::atomicity::full, float > m_log_gaussVflat
Gaudi::Accumulators::Histogram< 1 > m_custom_gauss_noprop
Gaudi::Accumulators::Histogram< 3 > m_custom_gaussVflatVgauss
Gaudi::Accumulators::Counter m_nCalls
Gaudi::Accumulators::Histogram< 1 > m_custom_gauss
Gaudi::Accumulators::StaticProfileHistogram< 2 > m_prof_gaussVflat
Gaudi::Accumulators::StaticWeightedHistogram< 1 > m_gauss_w
Gaudi::Accumulators::WeightedHistogram< 3 > m_custom_gaussVflatVgauss_w
Gaudi::Accumulators::WeightedHistogram< 1 > m_custom_gauss_w
Gaudi::Accumulators::StaticProfileHistogram< 3 > m_prof_gaussVflatVgauss
Gaudi::Accumulators::StaticHistogram< 1, Gaudi::Accumulators::atomicity::none > m_gauss_noato
Gaudi::Accumulators::StaticHistogram< 3 > m_gaussVflatVgauss
Gaudi::Accumulators::StaticProfileHistogram< 1 > m_prof_gauss
Gaudi::Accumulators::StaticProfileHistogram< 3, Gaudi::Accumulators::atomicity::none > m_prof_gaussVflatVgauss_noato
Gaudi::Accumulators::ProfileHistogram< 3 > m_custom_prof_gaussVflatVgauss
Gaudi::Accumulators::Histogram< 2 > m_custom_gaussVflat
Example of algorithm using root histograms accumulators.
Gaudi::Accumulators::StaticRootHistogram< 3 > m_gaussVflatVgauss
Gaudi::Accumulators::Counter m_nCalls
Gaudi::Accumulators::RootHistogram< 3 > m_custom_gaussVflatVgauss
Gaudi::Accumulators::StaticRootHistogram< 1 > m_gauss_buf
Gaudi::Accumulators::StaticRootHistogram< 3 > m_gaussVflatVgauss_buf
StatusCode execute(const EventContext &) const override
Gaudi::Accumulators::StaticRootHistogram< 1 > m_gauss
Gaudi::Accumulators::StaticRootHistogram< 2 > m_gaussVflat
Gaudi::Accumulators::RootHistogram< 2 > m_custom_gaussVflat
Gaudi::Accumulators::RootHistogram< 1 > m_custom_gauss
FSMCallbackHolder< Gaudi::Algorithm > Base
Gaudi::Accumulators::StaticRootHistogram< 2 > m_gaussVflat_buf
Simple timing of counter based histograms filling.
StatusCode execute(const EventContext &) const override
StatusCode initialize() override
Gaudi::Property< unsigned int > m_nTracks
std::deque< Gaudi::Accumulators::StaticHistogram< 1, Atomicity, Arithmetic > > m_histos
Gaudi::Property< unsigned int > m_nHistos
HistoTimingAlg< unsigned int, Gaudi::Accumulators::atomicity::full > HistoTimingAlgIA
HistoTimingAlg< double, Gaudi::Accumulators::atomicity::none > HistoTimingAlgD
HistoTimingAlg< double, Gaudi::Accumulators::atomicity::full > HistoTimingAlgDA
HistoTimingAlg< unsigned int, Gaudi::Accumulators::atomicity::none > HistoTimingAlgI
Parameters for the flat random number generation within boundaries [minimum, maximum].
Parameters for the Gauss random number generation.
Random number accessor This small class encapsulates the use of the random number generator.
This class is used for returning status codes from appropriate routines.
StatusCode andThen(F &&f, ARGS &&... args) const
Chain code blocks making the execution conditional a success result.
constexpr static const auto SUCCESS
constexpr static const auto FAILURE
Efficient counter implementations for Gaudi.
HistogramWrapper< StaticHistogram< ND, Atomicity, Arithmetic, AxisTupleType > > Histogram
standard custom histogram. See HistogramWrapper and StaticHistogram for details
HistogramWrapper< StaticProfileHistogram< ND, Atomicity, Arithmetic, AxisTupleType > > ProfileHistogram
custom profile histograming. See HistogramWrapper and StaticProfileHistogram for details
HistogramingCounterBase< ND, Atomicity, Arithmetic, naming::profilehistogramString, ProfileHistogramingAccumulator, AxisTupleType > StaticProfileHistogram
profile static histograming counter. See HistogramingCounterBase for details
HistogramingCounterBase< ND, Atomicity, Arithmetic, naming::histogramString, HistogramingAccumulator, AxisTupleType > StaticHistogram
standard static histograming counter. See HistogramingCounterBase for details
HistogramingCounterBase< ND, Atomicity, Arithmetic, naming::weightedProfilehistogramString, WeightedProfileHistogramingAccumulator, AxisTupleType > StaticWeightedProfileHistogram
weighted static profile histograming counter. See HistogramingCounterBase for details
HistogramWrapper< StaticWeightedProfileHistogram< ND, Atomicity, Arithmetic, AxisTupleType > > WeightedProfileHistogram
custom weighted profile histogram. See HistogramWrapper and StaticWeightedProfileHistogram for detail...
HistogramWrapper< StaticWeightedHistogram< ND, Atomicity, Arithmetic, AxisTupleType > > WeightedHistogram
custom histogram with weight. See HistogramWrapper and StaticWeightedHistogram for details
HistogramWrapper< StaticRootHistogram< ND, Atomicity, Arithmetic, AxisTupleType > > RootHistogram
standard custom histogram
RootHistogramingCounterBase< ND, Atomicity, Arithmetic, naming::histogramString, AxisTupleType > StaticRootHistogram
Root histograming counter. See RootHistogramingCounterBase for details.
HistogramingCounterBase< ND, Atomicity, Arithmetic, naming::weightedHistogramString, WeightedHistogramingAccumulator, AxisTupleType > StaticWeightedHistogram
standard static histograming counter with weight. See HistogramingCounterBase for details
This file provides a Grammar for the type Gaudi::Accumulators::Axis It allows to use that type from p...
A basic integral counter;.