The Gaudi Framework  v29r0 (ff2e7097)
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 ) {}
309  ~Generator() override = default;
312  {
313  StatusCode status = RndmGen::initialize( par );
314  if ( status.isSuccess() ) {
315  try {
316  Rndm::DefinedPdf* specs = dynamic_cast<Rndm::DefinedPdf*>( m_params.get() );
317  if ( specs ) {
318  m_generator.reset( new RandGeneral( &specs->pdf()[0], specs->pdf().size(), specs->interpolation() ) );
319  BaseEngine* engine = dynamic_cast<BaseEngine*>( m_engine.get() );
320  if ( engine ) {
321  m_hepEngine = engine->hepEngine();
322  if ( m_hepEngine ) {
323  return StatusCode::SUCCESS;
324  }
325  }
326  }
327  } catch ( ... ) {
328  }
329  }
330  return StatusCode::FAILURE;
331  }
333  StatusCode finalize() override
334  {
335  m_generator.reset();
336  return RndmGen::finalize();
337  }
339  double shoot() const override { return m_generator->shoot( m_hepEngine ); }
340  };
341 
342 #ifdef __ICC
343 // disable icc remark #1572: floating-point equality and inequality comparisons are unreliable
344 // The comparison is meant
345 #pragma warning( push )
346 #pragma warning( disable : 1572 )
347 #endif
348  // Specialized shoot function
349  template <>
351  {
352  /* Code obtained and adapted from GSL
353  gsl_ran_gaussian_tail (const gsl_rng * r, const double a, const double sigma)
354  Returns a gaussian random variable larger than a
355  This implementation does one-sided upper-tailed deviates.
356  */
357  double a = m_specs->cut();
358  double sigma = m_specs->sigma();
359  double s = a / sigma;
360  if ( s < 1 ) {
361  /* For small s, use a direct rejection method. The limit s < 1
362  can be adjusted to optimise the overall efficiency */
363  double x;
364  do {
365  // x = gsl_ran_gaussian (r, 1.0);
366  x = RandGaussQ::shoot( m_hepEngine, 0.0, 1.0 );
367  } while ( x < s );
368  return x * sigma;
369  } else {
370  /* Use the "supertail" deviates from the last two steps
371  * of Marsaglia's rectangle-wedge-tail method, as described
372  * in Knuth, v2, 3rd ed, pp 123-128. (See also exercise 11, p139,
373  * and the solution, p586.)
374  */
375  double u, v, x;
376  do {
377  // u = gsl_rng_uniform (r);
378  u = RandFlat::shoot( m_hepEngine );
379  do {
380  // v = gsl_rng_uniform (r);
381  v = RandFlat::shoot( m_hepEngine );
382  } while ( v == 0.0 );
383  x = sqrt( s * s - 2 * log( v ) );
384  } while ( x * u > s );
385  return x * sigma;
386  }
387 #ifdef __ICC
388 // re-enable icc remark #1572
389 #pragma warning( pop )
390 #endif
391  }
392 }
393 
394 using namespace Rndm;
395 #define DECLARE_GENERATOR_FACTORY( x, i ) \
396  typedef HepRndm::Generator<x> b##i; \
397  DECLARE_FACTORY_WITH_ID( b##i, x::typeID(), ObjFactory )
398 
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:75
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:28
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.
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.