All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
HepRndmGenerators.cpp
Go to the documentation of this file.
1 //====================================================================
2 // Random Generator implementations
3 //--------------------------------------------------------------------
4 //
5 // Package : Gaudi/RndmGen ( The LHCb Offline System)
6 // Author : M.Frank
7 // History :
8 // +---------+----------------------------------------------+---------
9 // | Date | Comment | Who
10 // +---------+----------------------------------------------+---------
11 // | 29/10/99| Initial version | MF
12 // +---------+----------------------------------------------+---------
13 //
14 //====================================================================
15 #define HEPRNDM_HEPRNDMGENSVC_CPP
16 
17 // Framework include files
19 
20 // STL include files
21 #include <iostream>
22 #include <cfloat>
23 #include <cmath>
24 #include <memory>
25 
26 // The order of the following two include files is significant due to template specialisation
27 #include "RndmGen.h"
28 #include "RndmGenSvc.h"
29 #include "HepRndmGenerator.h"
32 
33 #include "CLHEP/Random/RandomEngine.h"
34 #include "CLHEP/Random/RandFlat.h"
35 #include "CLHEP/Random/RandGamma.h"
36 #include "CLHEP/Random/RandGaussQ.h"
37 #include "CLHEP/Random/RandPoisson.h"
38 #include "CLHEP/Random/RandGeneral.h"
39 #include "CLHEP/Random/RandStudentT.h"
40 #include "CLHEP/Random/RandBinomial.h"
41 #include "CLHEP/Random/RandChiSquare.h"
42 #include "CLHEP/Random/RandExponential.h"
43 #include "CLHEP/Random/RandBreitWigner.h"
44 
45 // Handle CLHEP 2.0.x move to CLHEP namespace
46 namespace CLHEP { }
47 using namespace CLHEP;
48 
49 namespace HepRndm {
50 
51  // Specialized shoot function for flat distributed random number generation
52  template <> double Generator<Rndm::Flat>::shoot() const {
53  return RandFlat::shoot(m_hepEngine, m_specs->minimum(), m_specs->maximum());
54  }
55 
56  // Specialized shoot function
57  template <> double Generator<Rndm::Bit>::shoot() const {
58  return RandFlat::shootBit(m_hepEngine);
59  }
60 
61  // Specialized shoot function for Gauss distributed random number generation
62  template <> double Generator<Rndm::Gauss>::shoot() const {
63  return RandGaussQ::shoot(m_hepEngine, m_specs->mean(), m_specs->sigma());
64  }
65 
66 #ifdef __ICC
67 // disable icc remark #2259: non-pointer conversion from "X" to "Y" may lose significant bits
68 // Mandatory because RandPoisson::shoot returns "long"
69 #pragma warning(push)
70 #pragma warning(disable:2259)
71 #endif
72  // Specialized shoot function for Poisson distributed random number generation
73  template <> double Generator<Rndm::Poisson>::shoot() const {
74  return RandPoisson::shoot(m_hepEngine, m_specs->mean());
75  }
76 
77 #ifdef __ICC
78 // re-enable icc remark #2259
79 #pragma warning(pop)
80 #endif
81 
82  // Specialized shoot function
83  template <> double Generator<Rndm::Exponential>::shoot() const {
84  return RandExponential::shoot(m_hepEngine, m_specs->mean());
85  }
86 
87  // Specialized shoot function
88  template <> double Generator<Rndm::BreitWigner>::shoot() const {
89  return RandBreitWigner::shoot(m_hepEngine, m_specs->mean(), m_specs->gamma());
90  }
91 
92  // Specialized shoot function
93  template <> double Generator<Rndm::BreitWignerCutOff>::shoot() const {
94  return RandBreitWigner::shoot(m_hepEngine, m_specs->mean(), m_specs->gamma(), m_specs->cutOff());
95  }
96 
97  // Specialized shoot function
98  template <> double Generator<Rndm::Chi2>::shoot() const {
99  return RandChiSquare::shoot(m_hepEngine, m_specs->nDOF());
100  }
101 
102  // Specialized shoot function
103  template <> double Generator<Rndm::StudentT>::shoot() const {
104  return RandStudentT::shoot(m_hepEngine, m_specs->aValue());
105  }
106 
107  template <> double Generator<Rndm::Gamma>::shoot() const {
108  return RandGamma::shoot(m_hepEngine, m_specs->kValue(), m_specs->lambda());
109  }
110 
111  // Specialized shoot function
112  template <> double Generator<Rndm::Binomial>::shoot() const {
113  return RandBinomial::shoot(m_hepEngine, m_specs->nEvent(), m_specs->probability());
114  }
115 
116  /************************************************************************
117  * Copyright(c) 1995-1999, The ROOT System, All rights reserved. *
118  * Authors: Rene Brun, Fons Rademakers. *
119  * For list of contributors see $ROOTSYS/AA_CREDITS. *
120  * *
121  * Permission to use, copy, modify and distribute this software and its *
122  * documentation for non-commercial purposes is hereby granted without *
123  * fee, provided that the above copyright notice appears in all copies *
124  * and that both the copyright notice and this permission notice appear *
125  * in the supporting documentation. The authors make no claims about the *
126  * suitability of this software for any purpose. It is provided "as is" *
127  * without express or implied warranty. *
128  ************************************************************************/
129  // Specialized shoot function. The Landau distribution is not covered by
130  // CLHEP yet. This is hacked up version from ROOT. The above copyright notice
131  // should give the guys credit.
132  template <> double Generator<Rndm::Landau>::shoot() const {
133  // Generate a random number following a Landau distribution
134  // with average value mean and rms
135  // Converted by Rene Brun from CERNLIB routine ranlan(G110)
136  static double f[982] = {
137  0 , 0 , 0 ,0 ,0 ,-2.244733,
138  -2.204365,-2.168163,-2.135219,-2.104898,-2.076740,-2.050397,
139  -2.025605,-2.002150,-1.979866,-1.958612,-1.938275,-1.918760,
140  -1.899984,-1.881879,-1.864385,-1.847451,-1.831030,-1.815083,
141  -1.799574,-1.784473,-1.769751,-1.755383,-1.741346,-1.727620,
142  -1.714187,-1.701029,-1.688130,-1.675477,-1.663057,-1.650858,
143  -1.638868,-1.627078,-1.615477,-1.604058,-1.592811,-1.581729,
144  -1.570806,-1.560034,-1.549407,-1.538919,-1.528565,-1.518339,
145  -1.508237,-1.498254,-1.488386,-1.478628,-1.468976,-1.459428,
146  -1.449979,-1.440626,-1.431365,-1.422195,-1.413111,-1.404112,
147  -1.395194,-1.386356,-1.377594,-1.368906,-1.360291,-1.351746,
148  -1.343269,-1.334859,-1.326512,-1.318229,-1.310006,-1.301843,
149  -1.293737,-1.285688,-1.277693,-1.269752,-1.261863,-1.254024,
150  -1.246235,-1.238494,-1.230800,-1.223153,-1.215550,-1.207990,
151  -1.200474,-1.192999,-1.185566,-1.178172,-1.170817,-1.163500,
152  -1.156220,-1.148977,-1.141770,-1.134598,-1.127459,-1.120354,
153  -1.113282,-1.106242,-1.099233,-1.092255,
154  -1.085306,-1.078388,-1.071498,-1.064636,-1.057802,-1.050996,
155  -1.044215,-1.037461,-1.030733,-1.024029,-1.017350,-1.010695,
156  -1.004064, -.997456, -.990871, -.984308, -.977767, -.971247,
157  -.964749, -.958271, -.951813, -.945375, -.938957, -.932558,
158  -.926178, -.919816, -.913472, -.907146, -.900838, -.894547,
159  -.888272, -.882014, -.875773, -.869547, -.863337, -.857142,
160  -.850963, -.844798, -.838648, -.832512, -.826390, -.820282,
161  -.814187, -.808106, -.802038, -.795982, -.789940, -.783909,
162  -.777891, -.771884, -.765889, -.759906, -.753934, -.747973,
163  -.742023, -.736084, -.730155, -.724237, -.718328, -.712429,
164  -.706541, -.700661, -.694791, -.688931, -.683079, -.677236,
165  -.671402, -.665576, -.659759, -.653950, -.648149, -.642356,
166  -.636570, -.630793, -.625022, -.619259, -.613503, -.607754,
167  -.602012, -.596276, -.590548, -.584825, -.579109, -.573399,
168  -.567695, -.561997, -.556305, -.550618, -.544937, -.539262,
169  -.533592, -.527926, -.522266, -.516611, -.510961, -.505315,
170  -.499674, -.494037, -.488405, -.482777,
171  -.477153, -.471533, -.465917, -.460305, -.454697, -.449092,
172  -.443491, -.437893, -.432299, -.426707, -.421119, -.415534,
173  -.409951, -.404372, -.398795, -.393221, -.387649, -.382080,
174  -.376513, -.370949, -.365387, -.359826, -.354268, -.348712,
175  -.343157, -.337604, -.332053, -.326503, -.320955, -.315408,
176  -.309863, -.304318, -.298775, -.293233, -.287692, -.282152,
177  -.276613, -.271074, -.265536, -.259999, -.254462, -.248926,
178  -.243389, -.237854, -.232318, -.226783, -.221247, -.215712,
179  -.210176, -.204641, -.199105, -.193568, -.188032, -.182495,
180  -.176957, -.171419, -.165880, -.160341, -.154800, -.149259,
181  -.143717, -.138173, -.132629, -.127083, -.121537, -.115989,
182  -.110439, -.104889, -.099336, -.093782, -.088227, -.082670,
183  -.077111, -.071550, -.065987, -.060423, -.054856, -.049288,
184  -.043717, -.038144, -.032569, -.026991, -.021411, -.015828,
185  -.010243, -.004656, .000934, .006527, .012123, .017722,
186  .023323, .028928, .034535, .040146, .045759, .051376,
187  .056997, .062620, .068247, .073877,
188  .079511, .085149, .090790, .096435, .102083, .107736,
189  .113392, .119052, .124716, .130385, .136057, .141734,
190  .147414, .153100, .158789, .164483, .170181, .175884,
191  .181592, .187304, .193021, .198743, .204469, .210201,
192  .215937, .221678, .227425, .233177, .238933, .244696,
193  .250463, .256236, .262014, .267798, .273587, .279382,
194  .285183, .290989, .296801, .302619, .308443, .314273,
195  .320109, .325951, .331799, .337654, .343515, .349382,
196  .355255, .361135, .367022, .372915, .378815, .384721,
197  .390634, .396554, .402481, .408415, .414356, .420304,
198  .426260, .432222, .438192, .444169, .450153, .456145,
199  .462144, .468151, .474166, .480188, .486218, .492256,
200  .498302, .504356, .510418, .516488, .522566, .528653,
201  .534747, .540850, .546962, .553082, .559210, .565347,
202  .571493, .577648, .583811, .589983, .596164, .602355,
203  .608554, .614762, .620980, .627207, .633444, .639689,
204  .645945, .652210, .658484, .664768,
205  .671062, .677366, .683680, .690004, .696338, .702682,
206  .709036, .715400, .721775, .728160, .734556, .740963,
207  .747379, .753807, .760246, .766695, .773155, .779627,
208  .786109, .792603, .799107, .805624, .812151, .818690,
209  .825241, .831803, .838377, .844962, .851560, .858170,
210  .864791, .871425, .878071, .884729, .891399, .898082,
211  .904778, .911486, .918206, .924940, .931686, .938446,
212  .945218, .952003, .958802, .965614, .972439, .979278,
213  .986130, .992996, .999875, 1.006769, 1.013676, 1.020597,
214  1.027533, 1.034482, 1.041446, 1.048424, 1.055417, 1.062424,
215  1.069446, 1.076482, 1.083534, 1.090600, 1.097681, 1.104778,
216  1.111889, 1.119016, 1.126159, 1.133316, 1.140490, 1.147679,
217  1.154884, 1.162105, 1.169342, 1.176595, 1.183864, 1.191149,
218  1.198451, 1.205770, 1.213105, 1.220457, 1.227826, 1.235211,
219  1.242614, 1.250034, 1.257471, 1.264926, 1.272398, 1.279888,
220  1.287395, 1.294921, 1.302464, 1.310026, 1.317605, 1.325203,
221  1.332819, 1.340454, 1.348108, 1.355780,
222  1.363472, 1.371182, 1.378912, 1.386660, 1.394429, 1.402216,
223  1.410024, 1.417851, 1.425698, 1.433565, 1.441453, 1.449360,
224  1.457288, 1.465237, 1.473206, 1.481196, 1.489208, 1.497240,
225  1.505293, 1.513368, 1.521465, 1.529583, 1.537723, 1.545885,
226  1.554068, 1.562275, 1.570503, 1.578754, 1.587028, 1.595325,
227  1.603644, 1.611987, 1.620353, 1.628743, 1.637156, 1.645593,
228  1.654053, 1.662538, 1.671047, 1.679581, 1.688139, 1.696721,
229  1.705329, 1.713961, 1.722619, 1.731303, 1.740011, 1.748746,
230  1.757506, 1.766293, 1.775106, 1.783945, 1.792810, 1.801703,
231  1.810623, 1.819569, 1.828543, 1.837545, 1.846574, 1.855631,
232  1.864717, 1.873830, 1.882972, 1.892143, 1.901343, 1.910572,
233  1.919830, 1.929117, 1.938434, 1.947781, 1.957158, 1.966566,
234  1.976004, 1.985473, 1.994972, 2.004503, 2.014065, 2.023659,
235  2.033285, 2.042943, 2.052633, 2.062355, 2.072110, 2.081899,
236  2.091720, 2.101575, 2.111464, 2.121386, 2.131343, 2.141334,
237  2.151360, 2.161421, 2.171517, 2.181648, 2.191815, 2.202018,
238  2.212257, 2.222533, 2.232845, 2.243195,
239  2.253582, 2.264006, 2.274468, 2.284968, 2.295507, 2.306084,
240  2.316701, 2.327356, 2.338051, 2.348786, 2.359562, 2.370377,
241  2.381234, 2.392131, 2.403070, 2.414051, 2.425073, 2.436138,
242  2.447246, 2.458397, 2.469591, 2.480828, 2.492110, 2.503436,
243  2.514807, 2.526222, 2.537684, 2.549190, 2.560743, 2.572343,
244  2.583989, 2.595682, 2.607423, 2.619212, 2.631050, 2.642936,
245  2.654871, 2.666855, 2.678890, 2.690975, 2.703110, 2.715297,
246  2.727535, 2.739825, 2.752168, 2.764563, 2.777012, 2.789514,
247  2.802070, 2.814681, 2.827347, 2.840069, 2.852846, 2.865680,
248  2.878570, 2.891518, 2.904524, 2.917588, 2.930712, 2.943894,
249  2.957136, 2.970439, 2.983802, 2.997227, 3.010714, 3.024263,
250  3.037875, 3.051551, 3.065290, 3.079095, 3.092965, 3.106900,
251  3.120902, 3.134971, 3.149107, 3.163312, 3.177585, 3.191928,
252  3.206340, 3.220824, 3.235378, 3.250005, 3.264704, 3.279477,
253  3.294323, 3.309244, 3.324240, 3.339312, 3.354461, 3.369687,
254  3.384992, 3.400375, 3.415838, 3.431381, 3.447005, 3.462711,
255  3.478500, 3.494372, 3.510328, 3.526370,
256  3.542497, 3.558711, 3.575012, 3.591402, 3.607881, 3.624450,
257  3.641111, 3.657863, 3.674708, 3.691646, 3.708680, 3.725809,
258  3.743034, 3.760357, 3.777779, 3.795300, 3.812921, 3.830645,
259  3.848470, 3.866400, 3.884434, 3.902574, 3.920821, 3.939176,
260  3.957640, 3.976215, 3.994901, 4.013699, 4.032612, 4.051639,
261  4.070783, 4.090045, 4.109425, 4.128925, 4.148547, 4.168292,
262  4.188160, 4.208154, 4.228275, 4.248524, 4.268903, 4.289413,
263  4.310056, 4.330832, 4.351745, 4.372794, 4.393982, 4.415310,
264  4.436781, 4.458395, 4.480154, 4.502060, 4.524114, 4.546319,
265  4.568676, 4.591187, 4.613854, 4.636678, 4.659662, 4.682807,
266  4.706116, 4.729590, 4.753231, 4.777041, 4.801024, 4.825179,
267  4.849511, 4.874020, 4.898710, 4.923582, 4.948639, 4.973883,
268  4.999316, 5.024942, 5.050761, 5.076778, 5.102993, 5.129411,
269  5.156034, 5.182864, 5.209903, 5.237156, 5.264625, 5.292312,
270  5.320220, 5.348354, 5.376714, 5.405306, 5.434131, 5.463193,
271  5.492496, 5.522042, 5.551836, 5.581880, 5.612178, 5.642734,
272  5.673552, 5.704634, 5.735986, 5.767610,
273  5.799512, 5.831694, 5.864161, 5.896918, 5.929968, 5.963316,
274  5.996967, 6.030925, 6.065194, 6.099780, 6.134687, 6.169921,
275  6.205486, 6.241387, 6.277630, 6.314220, 6.351163, 6.388465,
276  6.426130, 6.464166, 6.502578, 6.541371, 6.580553, 6.620130,
277  6.660109, 6.700495, 6.741297, 6.782520, 6.824173, 6.866262,
278  6.908795, 6.951780, 6.995225, 7.039137, 7.083525, 7.128398,
279  7.173764, 7.219632, 7.266011, 7.312910, 7.360339, 7.408308,
280  7.456827, 7.505905, 7.555554, 7.605785, 7.656608, 7.708035,
281  7.760077, 7.812747, 7.866057, 7.920019, 7.974647, 8.029953,
282  8.085952, 8.142657, 8.200083, 8.258245, 8.317158, 8.376837,
283  8.437300, 8.498562, 8.560641, 8.623554, 8.687319, 8.751955,
284  8.817481, 8.883916, 8.951282, 9.019600, 9.088889, 9.159174,
285  9.230477, 9.302822, 9.376233, 9.450735, 9.526355, 9.603118,
286  9.681054, 9.760191, 9.840558, 9.922186,10.005107,10.089353,
287  10.174959,10.261958,10.350389,10.440287,10.531693,10.624646,
288  10.719188,10.815362,10.913214,11.012789,11.114137,11.217307,
289  11.322352,11.429325,11.538283,11.649285,
290  11.762390,11.877664,11.995170,12.114979,12.237161,12.361791,
291  12.488946,12.618708,12.751161,12.886394,13.024498,13.165570,
292  13.309711,13.457026,13.607625,13.761625,13.919145,14.080314,
293  14.245263,14.414134,14.587072,14.764233,14.945778,15.131877,
294  15.322712,15.518470,15.719353,15.925570,16.137345,16.354912,
295  16.578520,16.808433,17.044929,17.288305,17.538873,17.796967,
296  18.062943,18.337176,18.620068,18.912049,19.213574,19.525133,
297  19.847249,20.180480,20.525429,20.882738,21.253102,21.637266,
298  22.036036,22.450278,22.880933,23.329017,23.795634,24.281981,
299  24.789364,25.319207,25.873062,26.452634,27.059789,27.696581,
300  28.365274,29.068370,29.808638,30.589157,31.413354,32.285060,
301  33.208568,34.188705,35.230920,36.341388,37.527131,38.796172,
302  40.157721,41.622399,43.202525,44.912465,46.769077,48.792279,
303  51.005773,53.437996,56.123356,59.103894 };
304 
305  if ( m_specs->sigma() > 0 ) {
306  double mean = m_specs->mean();
307  double sigma = m_specs->sigma();
308  double x = RandFlat::shoot(m_hepEngine, 0., 1.);
309  double u = 1000.0*x;
310  long i = long(u);
311  double ranlan, v;
312  u -= i;
313  if (i >= 70 && i < 800) {
314  ranlan = f[i-1] + u*(f[i] - f[i-1]);
315  } else if (i >= 7 && i <= 980) {
316  ranlan = f[i-1] + u*(f[i]-f[i-1]-0.25*(1-u)*(f[i+1]-f[i]-f[i-1]+f[i-2]));
317  } else if (i < 7) {
318  v = log(x);
319  u = 1/v;
320  ranlan = ((0.99858950+(3.45213058E1+1.70854528E1*u)*u)/
321  (1 +(3.41760202E1+4.01244582 *u)*u))*
322  (-log(-0.91893853-v)-1);
323  } else {
324  u = 1-x;
325  v = u*u;
326  if (x <= 0.999) {
327  ranlan = (1.00060006+2.63991156E2*u+4.37320068E3*v)/
328  ((1 +2.57368075E2*u+3.41448018E3*v)*u);
329  } else {
330  ranlan = (1.00001538+6.07514119E3*u+7.34266409E5*v)/
331  ((1 +6.06511919E3*u+6.94021044E5*v)*u);
332  }
333  }
334  return mean + sigma*ranlan;
335  }
336  return DBL_MAX;
337  }
338 
339  template <>
340  class Generator<Rndm::DefinedPdf> : public RndmGen {
341  protected:
343  HepRandomEngine* m_hepEngine = nullptr;
344  public:
347  : RndmGen (engine) {
348  }
350  ~Generator() override = default;
353  StatusCode status = RndmGen::initialize(par);
354  if ( status.isSuccess() ) {
355  try {
356  Rndm::DefinedPdf* specs = dynamic_cast<Rndm::DefinedPdf*>(m_params.get());
357  if ( specs ) {
358  m_generator.reset( new RandGeneral( &specs->pdf()[0],
359  specs->pdf().size(),
360  specs->interpolation()) );
361  BaseEngine* engine = dynamic_cast<BaseEngine*>(m_engine.get());
362  if ( engine ) {
363  m_hepEngine = engine->hepEngine();
364  if ( m_hepEngine ) {
365  return StatusCode::SUCCESS;
366  }
367  }
368  }
369  }
370  catch (...) {
371  }
372  }
373  return StatusCode::FAILURE;
374  }
376  StatusCode finalize() override {
377  m_generator.reset();
378  return RndmGen::finalize();
379  }
381  double shoot() const override {
382  return m_generator->shoot(m_hepEngine);
383  }
384  };
385 
386 #ifdef __ICC
387 // disable icc remark #1572: floating-point equality and inequality comparisons are unreliable
388 // The comparison is meant
389 #pragma warning(push)
390 #pragma warning(disable:1572)
391 #endif
392  // Specialized shoot function
393  template <> double Generator<Rndm::GaussianTail>::shoot() const {
394  /* Code obtained and adapted from GSL
395  gsl_ran_gaussian_tail (const gsl_rng * r, const double a, const double sigma)
396  Returns a gaussian random variable larger than a
397  This implementation does one-sided upper-tailed deviates.
398  */
399  double a = m_specs->cut();
400  double sigma = m_specs->sigma();
401  double s = a / sigma;
402  if (s < 1) {
403  /* For small s, use a direct rejection method. The limit s < 1
404  can be adjusted to optimise the overall efficiency */
405  double x;
406  do {
407  //x = gsl_ran_gaussian (r, 1.0);
408  x = RandGaussQ::shoot(m_hepEngine, 0.0, 1.0);
409  } while (x < s);
410  return x * sigma;
411  } else {
412  /* Use the "supertail" deviates from the last two steps
413  * of Marsaglia's rectangle-wedge-tail method, as described
414  * in Knuth, v2, 3rd ed, pp 123-128. (See also exercise 11, p139,
415  * and the solution, p586.)
416  */
417  double u, v, x;
418  do {
419  // u = gsl_rng_uniform (r);
420  u = RandFlat::shoot(m_hepEngine);
421  do {
422  // v = gsl_rng_uniform (r);
423  v = RandFlat::shoot(m_hepEngine);
424  } while (v == 0.0);
425  x = sqrt (s * s - 2 * log (v));
426  } while (x * u > s);
427  return x * sigma;
428  }
429 #ifdef __ICC
430 // re-enable icc remark #1572
431 #pragma warning(pop)
432 #endif
433  }
434 }
435 
436 using namespace Rndm;
437 #define DECLARE_GENERATOR_FACTORY(x,i) \
438  typedef HepRndm::Generator<x> b##i; \
439  DECLARE_FACTORY_WITH_ID(b##i,x::typeID(),ObjFactory)
440 
441 
456 
Parameters for the bit value generation: returns values 0 and 1.
Parameters for the Poisson distributed random number generation with a given mean.
StatusCode initialize(const IRndmGen::Param &par) override
Initialize the generator.
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:74
Generator(IInterface *engine)
Standard Constructor.
std::unique_ptr< RandGeneral > m_generator
Parameters for the Gauss random number generation.
long interpolation() const
Access interpolation type.
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
Parameters for the flat random number generation within boundaries [minimum, maximum].
Definition of the basic interface.
Definition: IInterface.h:234
StatusCode initialize(const IRndmGen::Param &par) override
IRndmGen implementation.
Definition: RndmGen.cpp:28
T reset(T...args)
Random Generator definition.
Definition: RndmGen.h:41
StatusCode finalize() override
Finalize the generator.
Definition: RndmGen.cpp:33
Parameters for the StudentT distributed random number generation.
Parameters for the Binomial distributed random number generation.
T size(T...args)
Parameters for the Landau distributed random number generation.
#define DECLARE_GENERATOR_FACTORY(x, i)
Parameters for the Chi2 distributed random number generation.
Parameters for the BreitWigner distributed random number generation with cut off;.
Parameters for the Gamma distributed random number generation.
string s
Definition: gaudirun.py:245
StatusCode finalize() override
Finalize the generator.
Parameters for the Gaussian tail number generation.
Generate a random number Generator following generally distributed random values, given a user-define...
Parameters for the Gauss random number generation.
double shoot() const override
Single shot.
Parameters for the BreitWigner distributed random number generation.
CLHEP::HepRandomEngine * hepEngine()
std::vector< double > & pdf()
Access pdf.