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