The Gaudi Framework  v29r0 (ff2e7097)
HepRndm::Generator< TYPE > Class Template Reference

#include <src/RndmGenSvc/HepRndmGenerator.h>

Inheritance diagram for HepRndm::Generator< TYPE >:
Collaboration diagram for HepRndm::Generator< TYPE >:

Public Types

typedef TYPE Parameters
 
- Public Types inherited from implements< IRndmGen >
using base_class = implements< Interfaces... >
 Typedef to this class. More...
 
using extend_interfaces_base = extend_interfaces< Interfaces... >
 Typedef to the base of this class. More...
 
using iids = typename extend_interfaces_base::ext_iids
 
- Public Types inherited from extend_interfaces< Interfaces... >
using ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids... >::type
 take union of the ext_iids of all Interfaces... More...
 

Public Member Functions

 Generator (IInterface *engine)
 
 ~Generator () override=default
 
StatusCode initialize (const IRndmGen::Param &par) override
 Initialize the generator. More...
 
double shoot () const override
 Single shot. More...
 
template<>
double shoot () const
 
template<>
double shoot () const
 
template<>
double shoot () const
 
template<>
double shoot () const
 
template<>
double shoot () const
 
template<>
double shoot () const
 
template<>
double shoot () const
 
template<>
double shoot () const
 
template<>
double shoot () const
 
template<>
double shoot () const
 
template<>
double shoot () const
 
template<>
double shoot () const
 
template<>
double shoot () const
 
- Public Member Functions inherited from RndmGen
StatusCode initialize (const IRndmGen::Param &par) override
 IRndmGen implementation. More...
 
StatusCode finalize () override
 Finalize the generator. More...
 
const InterfaceIDtype () const override
 Random number generator type. More...
 
long ID () const override
 Random number generator ID. More...
 
const IRndmGen::Paramparameters () const override
 Access to random number generator parameters. More...
 
StatusCode shootArray (std::vector< double > &array, long howmany, long start) const override
 Multiple shots returning vector with random number according to specified distribution. More...
 
- Public Member Functions inherited from implements< IRndmGen >
void * i_cast (const InterfaceID &tid) const override
 Implementation of IInterface::i_cast. More...
 
StatusCode queryInterface (const InterfaceID &ti, void **pp) override
 Implementation of IInterface::queryInterface. More...
 
std::vector< std::stringgetInterfaceNames () const override
 Implementation of IInterface::getInterfaceNames. More...
 
 implements ()=default
 Default constructor. More...
 
 implements (const implements &)
 Copy constructor (zero the reference count) More...
 
implementsoperator= (const implements &)
 Assignment operator (do not touch the reference count). More...
 
 ~implements () override=default
 Virtual destructor. More...
 
unsigned long addRef () override
 Reference Interface instance. More...
 
unsigned long release () override
 Release Interface instance. More...
 
unsigned long refCount () const override
 Current reference count. More...
 
- Public Member Functions inherited from extend_interfaces< Interfaces... >
 ~extend_interfaces () override=default
 Virtual destructor. More...
 

Protected Attributes

CLHEP::HepRandomEngine * m_hepEngine = nullptr
 
TYPE * m_specs = nullptr
 
- Protected Attributes inherited from RndmGen
std::unique_ptr< IRndmGen::Paramm_params
 Generation parameters. More...
 
SmartIF< IRndmEnginem_engine
 Hosting service: Access must always be possible. More...
 
- Protected Attributes inherited from implements< IRndmGen >
std::atomic_ulong m_refCount
 Reference counter. More...
 

Additional Inherited Members

- Protected Member Functions inherited from RndmGen
 RndmGen (IInterface *engine)
 Standard Constructor. More...
 
 ~RndmGen () override=default
 Standard Destructor. More...
 

Detailed Description

template<class TYPE>
class HepRndm::Generator< TYPE >

Definition at line 28 of file HepRndmGenerator.h.

Member Typedef Documentation

template<class TYPE >
typedef TYPE HepRndm::Generator< TYPE >::Parameters

Definition at line 31 of file HepRndmGenerator.h.

Constructor & Destructor Documentation

template<class TYPE >
HepRndm::Generator< TYPE >::Generator ( IInterface engine)
inline

Definition at line 38 of file HepRndmGenerator.h.

38 : RndmGen( engine ) {}
RndmGen(IInterface *engine)
Standard Constructor.
Definition: RndmGen.cpp:23
template<class TYPE >
HepRndm::Generator< TYPE >::~Generator ( )
overridedefault

Member Function Documentation

template<class TYPE >
StatusCode HepRndm::Generator< TYPE >::initialize ( const IRndmGen::Param par)
override

Initialize the generator.

Definition at line 48 of file HepRndmGenerator.h.

49  {
50  StatusCode status = RndmGen::initialize( par );
51  if ( status.isSuccess() ) {
52  try {
53  m_specs = dynamic_cast<TYPE*>( m_params.get() );
54  if ( m_specs ) {
55  BaseEngine* engine = dynamic_cast<BaseEngine*>( m_engine.get() );
56  if ( engine ) {
57  m_hepEngine = engine->hepEngine();
58  if ( m_hepEngine ) {
59  return StatusCode::SUCCESS;
60  }
61  }
62  }
63  } catch ( ... ) {
64  }
65  }
66  return StatusCode::FAILURE;
67  }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:75
TYPE * get() const
Get interface pointer.
Definition: SmartIF.h:82
SmartIF< IRndmEngine > m_engine
Hosting service: Access must always be possible.
Definition: RndmGen.h:48
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:28
StatusCode initialize(const IRndmGen::Param &par) override
IRndmGen implementation.
Definition: RndmGen.cpp:26
T get(T...args)
std::unique_ptr< IRndmGen::Param > m_params
Generation parameters.
Definition: RndmGen.h:46
CLHEP::HepRandomEngine * m_hepEngine
template<class TYPE >
double HepRndm::Generator< TYPE >::shoot ( ) const
override

Single shot.

template<>
double HepRndm::Generator< Rndm::Flat >::shoot ( ) const

Definition at line 56 of file HepRndmGenerators.cpp.

57  {
58  return RandFlat::shoot( m_hepEngine, m_specs->minimum(), m_specs->maximum() );
59  }
CLHEP::HepRandomEngine * m_hepEngine
template<>
double HepRndm::Generator< Rndm::Bit >::shoot ( ) const

Definition at line 63 of file HepRndmGenerators.cpp.

64  {
65  return RandFlat::shootBit( m_hepEngine );
66  }
CLHEP::HepRandomEngine * m_hepEngine
template<>
double HepRndm::Generator< Rndm::Gauss >::shoot ( ) const

Definition at line 70 of file HepRndmGenerators.cpp.

71  {
72  return RandGaussQ::shoot( m_hepEngine, m_specs->mean(), m_specs->sigma() );
73  }
CLHEP::HepRandomEngine * m_hepEngine
template<>
double HepRndm::Generator< Rndm::Poisson >::shoot ( ) const

Definition at line 83 of file HepRndmGenerators.cpp.

84  {
85  return RandPoisson::shoot( m_hepEngine, m_specs->mean() );
86  }
CLHEP::HepRandomEngine * m_hepEngine
template<>
double HepRndm::Generator< Rndm::Exponential >::shoot ( ) const

Definition at line 95 of file HepRndmGenerators.cpp.

96  {
97  return RandExponential::shoot( m_hepEngine, m_specs->mean() );
98  }
CLHEP::HepRandomEngine * m_hepEngine
template<>
double HepRndm::Generator< Rndm::BreitWigner >::shoot ( ) const

Definition at line 102 of file HepRndmGenerators.cpp.

103  {
104  return RandBreitWigner::shoot( m_hepEngine, m_specs->mean(), m_specs->gamma() );
105  }
CLHEP::HepRandomEngine * m_hepEngine
template<>
double HepRndm::Generator< Rndm::BreitWignerCutOff >::shoot ( ) const

Definition at line 109 of file HepRndmGenerators.cpp.

110  {
111  return RandBreitWigner::shoot( m_hepEngine, m_specs->mean(), m_specs->gamma(), m_specs->cutOff() );
112  }
CLHEP::HepRandomEngine * m_hepEngine
template<>
double HepRndm::Generator< Rndm::Chi2 >::shoot ( ) const

Definition at line 116 of file HepRndmGenerators.cpp.

117  {
118  return RandChiSquare::shoot( m_hepEngine, m_specs->nDOF() );
119  }
CLHEP::HepRandomEngine * m_hepEngine
template<>
double HepRndm::Generator< Rndm::StudentT >::shoot ( ) const

Definition at line 123 of file HepRndmGenerators.cpp.

124  {
125  return RandStudentT::shoot( m_hepEngine, m_specs->aValue() );
126  }
CLHEP::HepRandomEngine * m_hepEngine
template<>
double HepRndm::Generator< Rndm::Gamma >::shoot ( ) const

Definition at line 129 of file HepRndmGenerators.cpp.

130  {
131  return RandGamma::shoot( m_hepEngine, m_specs->kValue(), m_specs->lambda() );
132  }
CLHEP::HepRandomEngine * m_hepEngine
template<>
double HepRndm::Generator< Rndm::Binomial >::shoot ( ) const

Definition at line 136 of file HepRndmGenerators.cpp.

137  {
138  return RandBinomial::shoot( m_hepEngine, m_specs->nEvent(), m_specs->probability() );
139  }
CLHEP::HepRandomEngine * m_hepEngine
template<>
double HepRndm::Generator< Rndm::Landau >::shoot ( ) const

Definition at line 158 of file HepRndmGenerators.cpp.

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  }
CLHEP::HepRandomEngine * m_hepEngine
template<>
double HepRndm::Generator< Rndm::GaussianTail >::shoot ( ) const

Definition at line 350 of file HepRndmGenerators.cpp.

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  }
string s
Definition: gaudirun.py:253
T sqrt(T...args)
CLHEP::HepRandomEngine * m_hepEngine

Member Data Documentation

template<class TYPE >
CLHEP::HepRandomEngine* HepRndm::Generator< TYPE >::m_hepEngine = nullptr
protected

Definition at line 34 of file HepRndmGenerator.h.

template<class TYPE >
TYPE* HepRndm::Generator< TYPE >::m_specs = nullptr
protected

Definition at line 35 of file HepRndmGenerator.h.


The documentation for this class was generated from the following file: