The Gaudi Framework  master (37c0b60a)
HepRndmGenerators.cpp
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2024 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
37 #include "HepRndmGenerator.h"
38 #include "RndmGen.h"
39 #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  // Specialized shoot function
330  template <>
332  /* Code obtained and adapted from GSL
333  gsl_ran_gaussian_tail (const gsl_rng * r, const double a, const double sigma)
334  Returns a gaussian random variable larger than a
335  This implementation does one-sided upper-tailed deviates.
336  */
337  double a = m_specs->cut();
338  double sigma = m_specs->sigma();
339  double s = a / sigma;
340  if ( s < 1 ) {
341  /* For small s, use a direct rejection method. The limit s < 1
342  can be adjusted to optimise the overall efficiency */
343  double x;
344  do {
345  // x = gsl_ran_gaussian (r, 1.0);
346  x = RandGaussQ::shoot( m_hepEngine, 0.0, 1.0 );
347  } while ( x < s );
348  return x * sigma;
349  } else {
350  /* Use the "supertail" deviates from the last two steps
351  * of Marsaglia's rectangle-wedge-tail method, as described
352  * in Knuth, v2, 3rd ed, pp 123-128. (See also exercise 11, p139,
353  * and the solution, p586.)
354  */
355  double u, v, x;
356  do {
357  // u = gsl_rng_uniform (r);
358  u = RandFlat::shoot( m_hepEngine );
359  do {
360  // v = gsl_rng_uniform (r);
361  v = RandFlat::shoot( m_hepEngine );
362  } while ( std::abs( v ) < std::numeric_limits<double>::epsilon() * m_specs->cut() );
363  x = sqrt( s * s - 2 * log( v ) );
364  } while ( x * u > s );
365  return x * sigma;
366  }
367  }
368 } // namespace HepRndm
369 
370 using namespace Rndm;
371 #define DECLARE_GENERATOR_FACTORY( x, i ) \
372  typedef HepRndm::Generator<x> b##i; \
373  DECLARE_FACTORY_WITH_ID( b##i, x::typeID(), ObjFactory )
374 
Rndm::DefinedPdf::interpolation
long interpolation() const
Access interpolation type.
Definition: RndmGenerators.h:315
RndmGen::finalize
StatusCode finalize() override
Finalize the generator.
Definition: RndmGen.cpp:41
Gaudi::Accumulators::sqrt
auto sqrt(std::chrono::duration< Rep, Period > d)
sqrt for std::chrono::duration
Definition: Counters.h:34
HepRndm::BaseEngine::hepEngine
CLHEP::HepRandomEngine * hepEngine()
Definition: HepRndmBaseEngine.h:45
HepRndm::Generator
Definition: HepRndmGenerator.h:37
RndmGenerators.h
Gaudi.Configuration.log
log
Definition: Configuration.py:28
StatusCode::isSuccess
bool isSuccess() const
Definition: StatusCode.h:314
gaudirun.s
string s
Definition: gaudirun.py:346
std::vector::size
T size(T... args)
HepRndm::BaseEngine
Definition: HepRndmBaseEngine.h:39
Rndm::StudentT
Parameters for the StudentT distributed random number generation.
Definition: RndmGenerators.h:164
std::abs
Gaudi::ParticleID abs(const Gaudi::ParticleID &p)
Return the absolute value for a PID.
Definition: ParticleID.h:191
HepRndm::Generator< Rndm::DefinedPdf >::finalize
StatusCode finalize() override
Finalize the generator.
Definition: HepRndmGenerators.cpp:321
RndmGen.h
ObjectFactory.h
Rndm::GaussianTail
Parameters for the Gaussian tail number generation.
Definition: RndmGenerators.h:324
Rndm::Flat
Parameters for the flat random number generation within boundaries [minimum, maximum].
Definition: RndmGenerators.h:253
std::unique_ptr::reset
T reset(T... args)
Rndm
Definition: RndmGenerators.h:25
HepRndm::Generator< Rndm::DefinedPdf >::Generator
Generator(IInterface *engine)
Standard Constructor.
Definition: HepRndmGenerators.cpp:301
RndmGenSvc.h
IIncidentSvc.h
HepRndm
Definition: HepRndmBaseEngine.h:37
compareOutputFiles.par
par
Definition: compareOutputFiles.py:477
Rndm::BreitWignerCutOff
Parameters for the BreitWigner distributed random number generation with cut off;.
Definition: RndmGenerators.h:139
RndmGen::initialize
StatusCode initialize(const IRndmGen::Param &par) override
IRndmGen implementation
Definition: RndmGen.cpp:36
Rndm::Landau
Parameters for the Landau distributed random number generation.
Definition: RndmGenerators.h:116
RndmGen
Random Generator definition.
Definition: RndmGen.h:51
StatusCode
Definition: StatusCode.h:65
Rndm::Gauss
Parameters for the Gauss random number generation.
Definition: RndmGenerators.h:32
Rndm::DefinedPdf::pdf
std::vector< double > & pdf()
Access pdf.
Definition: RndmGenerators.h:313
Rndm::BreitWigner
Parameters for the BreitWigner distributed random number generation.
Definition: RndmGenerators.h:94
IRndmGen::Param
Definition: IRndmGen.h:49
CLHEP
Definition: HepRndmBaseEngine.h:33
Rndm::Gamma
Parameters for the Gamma distributed random number generation.
Definition: RndmGenerators.h:184
HepRndm::Generator< Rndm::DefinedPdf >::initialize
StatusCode initialize(const IRndmGen::Param &par) override
Initialize the generator.
Definition: HepRndmGenerators.cpp:303
DECLARE_GENERATOR_FACTORY
#define DECLARE_GENERATOR_FACTORY(x, i)
Definition: HepRndmGenerators.cpp:371
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
HepRndm::Generator< Rndm::DefinedPdf >::m_generator
std::unique_ptr< RandGeneral > m_generator
Definition: HepRndmGenerators.cpp:296
IInterface
Definition: IInterface.h:239
HepRndm::Generator< Rndm::DefinedPdf >::shoot
double shoot() const override
Single shot.
Definition: HepRndmGenerators.cpp:326
Properties.v
v
Definition: Properties.py:122
Rndm::DefinedPdf
Generate a random number Generator following generally distributed random values, given a user-define...
Definition: RndmGenerators.h:301
Rndm::Exponential
Parameters for the Gauss random number generation.
Definition: RndmGenerators.h:56
HepRndmGenerator.h
Rndm::Chi2
Parameters for the Chi2 distributed random number generation.
Definition: RndmGenerators.h:74
Rndm::Poisson
Parameters for the Poisson distributed random number generation with a given mean.
Definition: RndmGenerators.h:209
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
std::unique_ptr< RandGeneral >
Rndm::Binomial
Parameters for the Binomial distributed random number generation.
Definition: RndmGenerators.h:230
std::numeric_limits
Rndm::Bit
Parameters for the bit value generation: returns values 0 and 1.
Definition: RndmGenerators.h:275