Gaudi Framework, version v20r2

Generated: 18 Jul 2008

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.

Detailed Description

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

Definition at line 27 of file HepRndmGenerator.h.

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


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  ) 

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 (  )  [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  )  [virtual]

Initialize the generator.

Reimplemented from RndmGen.

Definition at line 50 of file HepRndmGenerator.h.

References StatusCode::FAILURE, HepRndm::BaseEngine::hepEngine(), RndmGen::initialize(), StatusCode::isSuccess(), RndmGen::m_engine, HepRndm::Generator< TYPE >::m_hepEngine, RndmGen::m_params, HepRndm::Generator< TYPE >::m_specs, and StatusCode::SUCCESS.

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 [virtual]

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 46 of file HepRndmGenerators.cpp.

References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.

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

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

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 51 of file HepRndmGenerators.cpp.

References HepRndm::Generator< TYPE >::m_hepEngine.

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

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

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 56 of file HepRndmGenerators.cpp.

References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.

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

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

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 61 of file HepRndmGenerators.cpp.

References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.

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

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

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 66 of file HepRndmGenerators.cpp.

References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.

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

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

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 71 of file HepRndmGenerators.cpp.

References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.

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

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

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 76 of file HepRndmGenerators.cpp.

References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.

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

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

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 81 of file HepRndmGenerators.cpp.

References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.

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

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

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 86 of file HepRndmGenerators.cpp.

References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.

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

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

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 90 of file HepRndmGenerators.cpp.

References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.

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

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

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 95 of file HepRndmGenerators.cpp.

References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.

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

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

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 115 of file HepRndmGenerators.cpp.

References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.

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

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

Single shot returning single random number according to specified distribution.

Reimplemented from RndmGen.

Definition at line 372 of file HepRndmGenerators.cpp.

References HepRndm::Generator< TYPE >::m_hepEngine, HepRndm::Generator< TYPE >::m_specs, and Gaudi::Units::s.

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


Member Data Documentation

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

Definition at line 31 of file HepRndmGenerator.h.

Referenced by HepRndm::Generator< Rndm::DefinedPdf >::initialize(), HepRndm::Generator< TYPE >::initialize(), HepRndm::Generator< Rndm::DefinedPdf >::shoot(), and HepRndm::Generator< TYPE >::shoot().

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

Definition at line 32 of file HepRndmGenerator.h.

Referenced by HepRndm::Generator< TYPE >::initialize(), and HepRndm::Generator< TYPE >::shoot().


The documentation for this class was generated from the following file:
Generated at Fri Jul 18 12:10:52 2008 for Gaudi Framework, version v20r2 by Doxygen version 1.5.1 written by Dimitri van Heesch, © 1997-2004