Gaudi Framework, version v21r11

Home   Generated: 30 Sep 2010

HepRndm::Generator< TYPE > Class Template Reference

#include <HepRndmGenerator.h>

Inheritance diagram for HepRndm::Generator< TYPE >:
[legend]
Collaboration diagram for HepRndm::Generator< TYPE >:
[legend]

List of all members.

Public Types

typedef TYPE Parameters

Public Member Functions

 Generator (IInterface *engine)
virtual ~Generator ()
virtual StatusCode initialize (const IRndmGen::Param &par)
 Initialize the generator.
virtual double shoot () const
 Single shot.
template<>
double shoot () const
 Single shot returning single random number according to specified distribution.
template<>
double shoot () const
 Single shot returning single random number according to specified distribution.
template<>
double shoot () const
 Single shot returning single random number according to specified distribution.
template<>
double shoot () const
 Single shot returning single random number according to specified distribution.
template<>
double shoot () const
 Single shot returning single random number according to specified distribution.
template<>
double shoot () const
 Single shot returning single random number according to specified distribution.
template<>
double shoot () const
 Single shot returning single random number according to specified distribution.
template<>
double shoot () const
 Single shot returning single random number according to specified distribution.
template<>
double shoot () const
 Single shot returning single random number according to specified distribution.
template<>
double shoot () const
 Single shot returning single random number according to specified distribution.
template<>
double shoot () const
 Single shot returning single random number according to specified distribution.
template<>
double shoot () const
 Single shot returning single random number according to specified distribution.
template<>
double shoot () const
 Single shot returning single random number according to specified distribution.

Protected Attributes

CLHEP::HepRandomEngine * m_hepEngine
TYPE * m_specs


Detailed Description

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

Definition at line 27 of file HepRndmGenerator.h.


Member Typedef Documentation

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

Definition at line 29 of file HepRndmGenerator.h.


Constructor & Destructor Documentation

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

Definition at line 42 of file HepRndmGenerator.h.

00043   : RndmGen (engine), m_hepEngine(0), m_specs(0)    {
00044   }

template<class TYPE>
HepRndm::Generator< TYPE >::~Generator (  )  [inline, virtual]

Definition at line 46 of file HepRndmGenerator.h.

00046                                                        {  
00047   }


Member Function Documentation

template<class TYPE>
StatusCode HepRndm::Generator< TYPE >::initialize ( const IRndmGen::Param par  )  [inline, virtual]

Initialize the generator.

Reimplemented from RndmGen.

Definition at line 50 of file HepRndmGenerator.h.

00050                                                                                          {
00051     StatusCode status = RndmGen::initialize(par);
00052     if ( status.isSuccess() )   {
00053       try   {
00054         m_specs = dynamic_cast<TYPE*>(m_params);
00055         if ( 0 != m_specs )  {
00056           BaseEngine* engine = dynamic_cast<BaseEngine*>(m_engine);
00057           if ( 0 != engine )    {
00058             m_hepEngine = engine->hepEngine();
00059             if ( 0 != m_hepEngine )   {
00060               return StatusCode::SUCCESS;
00061             }
00062           }
00063         }
00064       }
00065       catch (...)   {
00066       }
00067     }
00068     return StatusCode::FAILURE;
00069   }

template<class TYPE>
virtual double HepRndm::Generator< TYPE >::shoot (  )  const [virtual]

Single shot.

Reimplemented from RndmGen.

template<>
double HepRndm::Generator< Rndm::Flat >::shoot (  )  const [inline, virtual]

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 47 of file HepRndmGenerators.cpp.

00047                                                              {
00048     return RandFlat::shoot(m_hepEngine, m_specs->minimum(), m_specs->maximum());
00049   }

template<>
double HepRndm::Generator< Rndm::Bit >::shoot (  )  const [inline, virtual]

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 52 of file HepRndmGenerators.cpp.

00052                                                             {
00053     return RandFlat::shootBit(m_hepEngine);
00054   }

template<>
double HepRndm::Generator< Rndm::Gauss >::shoot (  )  const [inline, virtual]

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 57 of file HepRndmGenerators.cpp.

00057                                                               {
00058     return RandGaussQ::shoot(m_hepEngine, m_specs->mean(), m_specs->sigma());
00059   }

template<>
double HepRndm::Generator< Rndm::Poisson >::shoot (  )  const [inline, virtual]

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 68 of file HepRndmGenerators.cpp.

00068                                                                 {
00069     return RandPoisson::shoot(m_hepEngine, m_specs->mean());
00070   }

template<>
double HepRndm::Generator< Rndm::Exponential >::shoot (  )  const [inline, virtual]

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 78 of file HepRndmGenerators.cpp.

00078                                                                     {
00079     return RandExponential::shoot(m_hepEngine, m_specs->mean());
00080   }

template<>
double HepRndm::Generator< Rndm::BreitWigner >::shoot (  )  const [inline, virtual]

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 83 of file HepRndmGenerators.cpp.

00083                                                                     {
00084     return RandBreitWigner::shoot(m_hepEngine, m_specs->mean(), m_specs->gamma());
00085   }

template<>
double HepRndm::Generator< Rndm::BreitWignerCutOff >::shoot (  )  const [inline, virtual]

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 88 of file HepRndmGenerators.cpp.

00088                                                                           {
00089     return RandBreitWigner::shoot(m_hepEngine, m_specs->mean(), m_specs->gamma(), m_specs->cutOff());
00090   }

template<>
double HepRndm::Generator< Rndm::Chi2 >::shoot (  )  const [inline, virtual]

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 93 of file HepRndmGenerators.cpp.

00093                                                              {
00094     return RandChiSquare::shoot(m_hepEngine, m_specs->nDOF());
00095   }

template<>
double HepRndm::Generator< Rndm::StudentT >::shoot (  )  const [inline, virtual]

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 98 of file HepRndmGenerators.cpp.

00098                                                                  {
00099     return RandStudentT::shoot(m_hepEngine, m_specs->aValue());
00100   }

template<>
double HepRndm::Generator< Rndm::Gamma >::shoot (  )  const [inline, virtual]

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 102 of file HepRndmGenerators.cpp.

00102                                                               {
00103     return RandGamma::shoot(m_hepEngine, m_specs->kValue(), m_specs->lambda());
00104   }

template<>
double HepRndm::Generator< Rndm::Binomial >::shoot (  )  const [inline, virtual]

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 107 of file HepRndmGenerators.cpp.

00107                                                                  {
00108     return RandBinomial::shoot(m_hepEngine, m_specs->nEvent(), m_specs->probability());
00109   }

template<>
double HepRndm::Generator< Rndm::Landau >::shoot (  )  const [inline, virtual]

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 127 of file HepRndmGenerators.cpp.

00127                                                                {
00128   //  Generate a random number following a Landau distribution
00129   //  with average value mean and rms
00130   //  Converted by Rene Brun from CERNLIB routine ranlan(G110)
00131   static double f[982] = {
00132        0       , 0       , 0       ,0        ,0        ,-2.244733,
00133       -2.204365,-2.168163,-2.135219,-2.104898,-2.076740,-2.050397,
00134       -2.025605,-2.002150,-1.979866,-1.958612,-1.938275,-1.918760,
00135       -1.899984,-1.881879,-1.864385,-1.847451,-1.831030,-1.815083,
00136       -1.799574,-1.784473,-1.769751,-1.755383,-1.741346,-1.727620,
00137       -1.714187,-1.701029,-1.688130,-1.675477,-1.663057,-1.650858,
00138       -1.638868,-1.627078,-1.615477,-1.604058,-1.592811,-1.581729,
00139       -1.570806,-1.560034,-1.549407,-1.538919,-1.528565,-1.518339,
00140       -1.508237,-1.498254,-1.488386,-1.478628,-1.468976,-1.459428,
00141       -1.449979,-1.440626,-1.431365,-1.422195,-1.413111,-1.404112,
00142       -1.395194,-1.386356,-1.377594,-1.368906,-1.360291,-1.351746,
00143       -1.343269,-1.334859,-1.326512,-1.318229,-1.310006,-1.301843,
00144       -1.293737,-1.285688,-1.277693,-1.269752,-1.261863,-1.254024,
00145       -1.246235,-1.238494,-1.230800,-1.223153,-1.215550,-1.207990,
00146       -1.200474,-1.192999,-1.185566,-1.178172,-1.170817,-1.163500,
00147       -1.156220,-1.148977,-1.141770,-1.134598,-1.127459,-1.120354,
00148       -1.113282,-1.106242,-1.099233,-1.092255,
00149       -1.085306,-1.078388,-1.071498,-1.064636,-1.057802,-1.050996,
00150       -1.044215,-1.037461,-1.030733,-1.024029,-1.017350,-1.010695,
00151       -1.004064, -.997456, -.990871, -.984308, -.977767, -.971247,
00152        -.964749, -.958271, -.951813, -.945375, -.938957, -.932558,
00153        -.926178, -.919816, -.913472, -.907146, -.900838, -.894547,
00154        -.888272, -.882014, -.875773, -.869547, -.863337, -.857142,
00155        -.850963, -.844798, -.838648, -.832512, -.826390, -.820282,
00156        -.814187, -.808106, -.802038, -.795982, -.789940, -.783909,
00157        -.777891, -.771884, -.765889, -.759906, -.753934, -.747973,
00158        -.742023, -.736084, -.730155, -.724237, -.718328, -.712429,
00159        -.706541, -.700661, -.694791, -.688931, -.683079, -.677236,
00160        -.671402, -.665576, -.659759, -.653950, -.648149, -.642356,
00161        -.636570, -.630793, -.625022, -.619259, -.613503, -.607754,
00162        -.602012, -.596276, -.590548, -.584825, -.579109, -.573399,
00163        -.567695, -.561997, -.556305, -.550618, -.544937, -.539262,
00164        -.533592, -.527926, -.522266, -.516611, -.510961, -.505315,
00165        -.499674, -.494037, -.488405, -.482777,
00166        -.477153, -.471533, -.465917, -.460305, -.454697, -.449092,
00167        -.443491, -.437893, -.432299, -.426707, -.421119, -.415534,
00168        -.409951, -.404372, -.398795, -.393221, -.387649, -.382080,
00169        -.376513, -.370949, -.365387, -.359826, -.354268, -.348712,
00170        -.343157, -.337604, -.332053, -.326503, -.320955, -.315408,
00171        -.309863, -.304318, -.298775, -.293233, -.287692, -.282152,
00172        -.276613, -.271074, -.265536, -.259999, -.254462, -.248926,
00173        -.243389, -.237854, -.232318, -.226783, -.221247, -.215712,
00174        -.210176, -.204641, -.199105, -.193568, -.188032, -.182495,
00175        -.176957, -.171419, -.165880, -.160341, -.154800, -.149259,
00176        -.143717, -.138173, -.132629, -.127083, -.121537, -.115989,
00177        -.110439, -.104889, -.099336, -.093782, -.088227, -.082670,
00178        -.077111, -.071550, -.065987, -.060423, -.054856, -.049288,
00179        -.043717, -.038144, -.032569, -.026991, -.021411, -.015828,
00180        -.010243, -.004656,  .000934,  .006527,  .012123,  .017722,
00181         .023323,  .028928,  .034535,  .040146,  .045759,  .051376,
00182         .056997,  .062620,  .068247,  .073877,
00183         .079511,  .085149,  .090790,  .096435,  .102083,  .107736,
00184         .113392,  .119052,  .124716,  .130385,  .136057,  .141734,
00185         .147414,  .153100,  .158789,  .164483,  .170181,  .175884,
00186         .181592,  .187304,  .193021,  .198743,  .204469,  .210201,
00187         .215937,  .221678,  .227425,  .233177,  .238933,  .244696,
00188         .250463,  .256236,  .262014,  .267798,  .273587,  .279382,
00189         .285183,  .290989,  .296801,  .302619,  .308443,  .314273,
00190         .320109,  .325951,  .331799,  .337654,  .343515,  .349382,
00191         .355255,  .361135,  .367022,  .372915,  .378815,  .384721,
00192         .390634,  .396554,  .402481,  .408415,  .414356,  .420304,
00193         .426260,  .432222,  .438192,  .444169,  .450153,  .456145,
00194         .462144,  .468151,  .474166,  .480188,  .486218,  .492256,
00195         .498302,  .504356,  .510418,  .516488,  .522566,  .528653,
00196         .534747,  .540850,  .546962,  .553082,  .559210,  .565347,
00197         .571493,  .577648,  .583811,  .589983,  .596164,  .602355,
00198         .608554,  .614762,  .620980,  .627207,  .633444,  .639689,
00199         .645945,  .652210,  .658484,  .664768,
00200         .671062,  .677366,  .683680,  .690004,  .696338,  .702682,
00201         .709036,  .715400,  .721775,  .728160,  .734556,  .740963,
00202         .747379,  .753807,  .760246,  .766695,  .773155,  .779627,
00203         .786109,  .792603,  .799107,  .805624,  .812151,  .818690,
00204         .825241,  .831803,  .838377,  .844962,  .851560,  .858170,
00205         .864791,  .871425,  .878071,  .884729,  .891399,  .898082,
00206         .904778,  .911486,  .918206,  .924940,  .931686,  .938446,
00207         .945218,  .952003,  .958802,  .965614,  .972439,  .979278,
00208         .986130,  .992996,  .999875, 1.006769, 1.013676, 1.020597,
00209        1.027533, 1.034482, 1.041446, 1.048424, 1.055417, 1.062424,
00210        1.069446, 1.076482, 1.083534, 1.090600, 1.097681, 1.104778,
00211        1.111889, 1.119016, 1.126159, 1.133316, 1.140490, 1.147679,
00212        1.154884, 1.162105, 1.169342, 1.176595, 1.183864, 1.191149,
00213        1.198451, 1.205770, 1.213105, 1.220457, 1.227826, 1.235211,
00214        1.242614, 1.250034, 1.257471, 1.264926, 1.272398, 1.279888,
00215        1.287395, 1.294921, 1.302464, 1.310026, 1.317605, 1.325203,
00216        1.332819, 1.340454, 1.348108, 1.355780,
00217        1.363472, 1.371182, 1.378912, 1.386660, 1.394429, 1.402216,
00218        1.410024, 1.417851, 1.425698, 1.433565, 1.441453, 1.449360,
00219        1.457288, 1.465237, 1.473206, 1.481196, 1.489208, 1.497240,
00220        1.505293, 1.513368, 1.521465, 1.529583, 1.537723, 1.545885,
00221        1.554068, 1.562275, 1.570503, 1.578754, 1.587028, 1.595325,
00222        1.603644, 1.611987, 1.620353, 1.628743, 1.637156, 1.645593,
00223        1.654053, 1.662538, 1.671047, 1.679581, 1.688139, 1.696721,
00224        1.705329, 1.713961, 1.722619, 1.731303, 1.740011, 1.748746,
00225        1.757506, 1.766293, 1.775106, 1.783945, 1.792810, 1.801703,
00226        1.810623, 1.819569, 1.828543, 1.837545, 1.846574, 1.855631,
00227        1.864717, 1.873830, 1.882972, 1.892143, 1.901343, 1.910572,
00228        1.919830, 1.929117, 1.938434, 1.947781, 1.957158, 1.966566,
00229        1.976004, 1.985473, 1.994972, 2.004503, 2.014065, 2.023659,
00230        2.033285, 2.042943, 2.052633, 2.062355, 2.072110, 2.081899,
00231        2.091720, 2.101575, 2.111464, 2.121386, 2.131343, 2.141334,
00232        2.151360, 2.161421, 2.171517, 2.181648, 2.191815, 2.202018,
00233        2.212257, 2.222533, 2.232845, 2.243195,
00234        2.253582, 2.264006, 2.274468, 2.284968, 2.295507, 2.306084,
00235        2.316701, 2.327356, 2.338051, 2.348786, 2.359562, 2.370377,
00236        2.381234, 2.392131, 2.403070, 2.414051, 2.425073, 2.436138,
00237        2.447246, 2.458397, 2.469591, 2.480828, 2.492110, 2.503436,
00238        2.514807, 2.526222, 2.537684, 2.549190, 2.560743, 2.572343,
00239        2.583989, 2.595682, 2.607423, 2.619212, 2.631050, 2.642936,
00240        2.654871, 2.666855, 2.678890, 2.690975, 2.703110, 2.715297,
00241        2.727535, 2.739825, 2.752168, 2.764563, 2.777012, 2.789514,
00242        2.802070, 2.814681, 2.827347, 2.840069, 2.852846, 2.865680,
00243        2.878570, 2.891518, 2.904524, 2.917588, 2.930712, 2.943894,
00244        2.957136, 2.970439, 2.983802, 2.997227, 3.010714, 3.024263,
00245        3.037875, 3.051551, 3.065290, 3.079095, 3.092965, 3.106900,
00246        3.120902, 3.134971, 3.149107, 3.163312, 3.177585, 3.191928,
00247        3.206340, 3.220824, 3.235378, 3.250005, 3.264704, 3.279477,
00248        3.294323, 3.309244, 3.324240, 3.339312, 3.354461, 3.369687,
00249        3.384992, 3.400375, 3.415838, 3.431381, 3.447005, 3.462711,
00250        3.478500, 3.494372, 3.510328, 3.526370,
00251        3.542497, 3.558711, 3.575012, 3.591402, 3.607881, 3.624450,
00252        3.641111, 3.657863, 3.674708, 3.691646, 3.708680, 3.725809,
00253        3.743034, 3.760357, 3.777779, 3.795300, 3.812921, 3.830645,
00254        3.848470, 3.866400, 3.884434, 3.902574, 3.920821, 3.939176,
00255        3.957640, 3.976215, 3.994901, 4.013699, 4.032612, 4.051639,
00256        4.070783, 4.090045, 4.109425, 4.128925, 4.148547, 4.168292,
00257        4.188160, 4.208154, 4.228275, 4.248524, 4.268903, 4.289413,
00258        4.310056, 4.330832, 4.351745, 4.372794, 4.393982, 4.415310,
00259        4.436781, 4.458395, 4.480154, 4.502060, 4.524114, 4.546319,
00260        4.568676, 4.591187, 4.613854, 4.636678, 4.659662, 4.682807,
00261        4.706116, 4.729590, 4.753231, 4.777041, 4.801024, 4.825179,
00262        4.849511, 4.874020, 4.898710, 4.923582, 4.948639, 4.973883,
00263        4.999316, 5.024942, 5.050761, 5.076778, 5.102993, 5.129411,
00264        5.156034, 5.182864, 5.209903, 5.237156, 5.264625, 5.292312,
00265        5.320220, 5.348354, 5.376714, 5.405306, 5.434131, 5.463193,
00266        5.492496, 5.522042, 5.551836, 5.581880, 5.612178, 5.642734,
00267        5.673552, 5.704634, 5.735986, 5.767610,
00268        5.799512, 5.831694, 5.864161, 5.896918, 5.929968, 5.963316,
00269        5.996967, 6.030925, 6.065194, 6.099780, 6.134687, 6.169921,
00270        6.205486, 6.241387, 6.277630, 6.314220, 6.351163, 6.388465,
00271        6.426130, 6.464166, 6.502578, 6.541371, 6.580553, 6.620130,
00272        6.660109, 6.700495, 6.741297, 6.782520, 6.824173, 6.866262,
00273        6.908795, 6.951780, 6.995225, 7.039137, 7.083525, 7.128398,
00274        7.173764, 7.219632, 7.266011, 7.312910, 7.360339, 7.408308,
00275        7.456827, 7.505905, 7.555554, 7.605785, 7.656608, 7.708035,
00276        7.760077, 7.812747, 7.866057, 7.920019, 7.974647, 8.029953,
00277        8.085952, 8.142657, 8.200083, 8.258245, 8.317158, 8.376837,
00278        8.437300, 8.498562, 8.560641, 8.623554, 8.687319, 8.751955,
00279        8.817481, 8.883916, 8.951282, 9.019600, 9.088889, 9.159174,
00280        9.230477, 9.302822, 9.376233, 9.450735, 9.526355, 9.603118,
00281        9.681054, 9.760191, 9.840558, 9.922186,10.005107,10.089353,
00282       10.174959,10.261958,10.350389,10.440287,10.531693,10.624646,
00283       10.719188,10.815362,10.913214,11.012789,11.114137,11.217307,
00284       11.322352,11.429325,11.538283,11.649285,
00285       11.762390,11.877664,11.995170,12.114979,12.237161,12.361791,
00286       12.488946,12.618708,12.751161,12.886394,13.024498,13.165570,
00287       13.309711,13.457026,13.607625,13.761625,13.919145,14.080314,
00288       14.245263,14.414134,14.587072,14.764233,14.945778,15.131877,
00289       15.322712,15.518470,15.719353,15.925570,16.137345,16.354912,
00290       16.578520,16.808433,17.044929,17.288305,17.538873,17.796967,
00291       18.062943,18.337176,18.620068,18.912049,19.213574,19.525133,
00292       19.847249,20.180480,20.525429,20.882738,21.253102,21.637266,
00293       22.036036,22.450278,22.880933,23.329017,23.795634,24.281981,
00294       24.789364,25.319207,25.873062,26.452634,27.059789,27.696581,
00295       28.365274,29.068370,29.808638,30.589157,31.413354,32.285060,
00296       33.208568,34.188705,35.230920,36.341388,37.527131,38.796172,
00297       40.157721,41.622399,43.202525,44.912465,46.769077,48.792279,
00298       51.005773,53.437996,56.123356,59.103894 };
00299 
00300     if ( m_specs->sigma() > 0 )    {
00301       double mean = m_specs->mean();
00302       double sigma = m_specs->sigma();
00303       double x = RandFlat::shoot(m_hepEngine, 0., 1.);
00304       double u = 1000.0*x;
00305       long i = long(u);
00306       double ranlan, v;
00307       u -= i;
00308       if (i >= 70 && i < 800) {
00309          ranlan = f[i-1] + u*(f[i] - f[i-1]);
00310       } else if (i >= 7 && i <= 980) {
00311          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]));
00312       } else if (i < 7) {
00313          v = log(x);
00314          u = 1/v;
00315          ranlan = ((0.99858950+(3.45213058E1+1.70854528E1*u)*u)/
00316                    (1         +(3.41760202E1+4.01244582  *u)*u))*
00317                    (-log(-0.91893853-v)-1);
00318       } else {
00319          u = 1-x;
00320          v = u*u;
00321          if (x <= 0.999) {
00322           ranlan = (1.00060006+2.63991156E2*u+4.37320068E3*v)/
00323                   ((1         +2.57368075E2*u+3.41448018E3*v)*u);
00324          } else {
00325           ranlan = (1.00001538+6.07514119E3*u+7.34266409E5*v)/
00326                   ((1         +6.06511919E3*u+6.94021044E5*v)*u);
00327          }
00328       }
00329       return mean + sigma*ranlan;
00330     }
00331     return DBL_MAX;
00332   }

template<>
double HepRndm::Generator< Rndm::GaussianTail >::shoot (  )  const [inline, virtual]

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 390 of file HepRndmGenerators.cpp.

00390                                                                      {
00391     /* Code obtained and adapted from GSL 
00392      gsl_ran_gaussian_tail (const gsl_rng * r, const double a, const double sigma)
00393      Returns a gaussian random variable larger than a
00394      This implementation does one-sided upper-tailed deviates.
00395     */
00396     double a = m_specs->cut();
00397     double sigma = m_specs->sigma();
00398     double s = a / sigma;
00399     if (s < 1) {
00400       /* For small s, use a direct rejection method. The limit s < 1
00401          can be adjusted to optimise the overall efficiency */
00402       double x;
00403       do {
00404               //x = gsl_ran_gaussian (r, 1.0);
00405         x = RandGaussQ::shoot(m_hepEngine, 0.0, 1.0);
00406       } while (x < s);
00407       return x * sigma;
00408     } else {
00409       /* Use the "supertail" deviates from the last two steps
00410        * of Marsaglia's rectangle-wedge-tail method, as described
00411        * in Knuth, v2, 3rd ed, pp 123-128.  (See also exercise 11, p139,
00412        * and the solution, p586.)
00413        */
00414       double u, v, x;
00415       do {
00416               // u = gsl_rng_uniform (r);
00417         u = RandFlat::shoot(m_hepEngine);
00418         do {
00419           // v = gsl_rng_uniform (r);
00420           v = RandFlat::shoot(m_hepEngine);
00421         } while (v == 0.0);
00422               x = sqrt (s * s - 2 * log (v));
00423       } while (x * u > s);
00424       return x * sigma;
00425     }
00426 #ifdef __ICC
00427 // re-enable icc remark #1572
00428 #pragma warning(pop)
00429 #endif
00430   } 


Member Data Documentation

template<class TYPE>
CLHEP::HepRandomEngine* HepRndm::Generator< TYPE >::m_hepEngine [protected]

Definition at line 31 of file HepRndmGenerator.h.

template<class TYPE>
TYPE* HepRndm::Generator< TYPE >::m_specs [protected]

Definition at line 32 of file HepRndmGenerator.h.


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

Generated at Thu Sep 30 09:59:05 2010 for Gaudi Framework, version v21r11 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004