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