Gaudi Framework, version v21r7

Home   Generated: 22 Jan 2010

HepRndm::Generator< TYPE > Class Template Reference

#include <HepRndmGenerator.h>

Inheritance diagram for HepRndm::Generator< TYPE >:

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

Collaboration graph
[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
TYPEm_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 62 of file HepRndmGenerators.cpp.

00062                                                                 {
00063     return RandPoisson::shoot(m_hepEngine, m_specs->mean());
00064   }

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 67 of file HepRndmGenerators.cpp.

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

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 72 of file HepRndmGenerators.cpp.

00072                                                                     {
00073     return RandBreitWigner::shoot(m_hepEngine, m_specs->mean(), m_specs->gamma());
00074   }

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 77 of file HepRndmGenerators.cpp.

00077                                                                           {
00078     return RandBreitWigner::shoot(m_hepEngine, m_specs->mean(), m_specs->gamma(), m_specs->cutOff());
00079   }

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 82 of file HepRndmGenerators.cpp.

00082                                                              {
00083     return RandChiSquare::shoot(m_hepEngine, m_specs->nDOF());
00084   }

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 87 of file HepRndmGenerators.cpp.

00087                                                                  {
00088     return RandStudentT::shoot(m_hepEngine, m_specs->aValue());
00089   }

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 91 of file HepRndmGenerators.cpp.

00091                                                               {
00092     return RandGamma::shoot(m_hepEngine, m_specs->kValue(), m_specs->lambda());
00093   }

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 96 of file HepRndmGenerators.cpp.

00096                                                                  {
00097     return RandBinomial::shoot(m_hepEngine, m_specs->nEvent(), m_specs->probability());
00098   }

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 116 of file HepRndmGenerators.cpp.

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

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 373 of file HepRndmGenerators.cpp.

00373                                                                      {
00374     /* Code obtained and adapted from GSL 
00375      gsl_ran_gaussian_tail (const gsl_rng * r, const double a, const double sigma)
00376      Returns a gaussian random variable larger than a
00377      This implementation does one-sided upper-tailed deviates.
00378     */
00379     double a = m_specs->cut();
00380     double sigma = m_specs->sigma();
00381     double s = a / sigma;
00382     if (s < 1) {
00383       /* For small s, use a direct rejection method. The limit s < 1
00384          can be adjusted to optimise the overall efficiency */
00385       double x;
00386       do {
00387               //x = gsl_ran_gaussian (r, 1.0);
00388         x = RandGaussQ::shoot(m_hepEngine, 0.0, 1.0);
00389       } while (x < s);
00390       return x * sigma;
00391     } else {
00392       /* Use the "supertail" deviates from the last two steps
00393        * of Marsaglia's rectangle-wedge-tail method, as described
00394        * in Knuth, v2, 3rd ed, pp 123-128.  (See also exercise 11, p139,
00395        * and the solution, p586.)
00396        */
00397       double u, v, x;
00398       do {
00399               // u = gsl_rng_uniform (r);
00400         u = RandFlat::shoot(m_hepEngine);
00401         do {
00402           // v = gsl_rng_uniform (r);
00403           v = RandFlat::shoot(m_hepEngine);
00404         } while (v == 0.0);
00405               x = sqrt (s * s - 2 * log (v));
00406       } while (x * u > s);
00407       return x * sigma;
00408     }
00409   } 


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 Fri Jan 22 20:45:17 2010 for Gaudi Framework, version v21r7 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004