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