Gaudi Framework, version v22r0

Home   Generated: 9 Feb 2011

HepRndm::Generator< TYPE > Class Template Reference

#include <HepRndmGenerator.h>

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
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

Protected Attributes

CLHEP::HepRandomEngine * m_hepEngine
TYPE * m_specs

Detailed Description

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

Definition at line 23 of file HepRndmGenerator.h.


Member Typedef Documentation

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

Definition at line 22 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.

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

Definition at line 42 of file HepRndmGenerator.h.

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


Member Function Documentation

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

Initialize the generator.

Definition at line 46 of file HepRndmGenerator.h.

00046                                                        {  
00047   }
00048 
00050   template <class TYPE> StatusCode Generator<TYPE>::initialize(const IRndmGen::Param& par)   {
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 (...)   {

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

Definition at line 394 of file HepRndmGenerators.cpp.

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

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

Definition at line 131 of file HepRndmGenerators.cpp.

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

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

Definition at line 111 of file HepRndmGenerators.cpp.

00111                                                                  {
00112     return RandBinomial::shoot(m_hepEngine, m_specs->nEvent(), m_specs->probability());
00113   }

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

Definition at line 106 of file HepRndmGenerators.cpp.

00106                                                               {
00107     return RandGamma::shoot(m_hepEngine, m_specs->kValue(), m_specs->lambda());
00108   }

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

Definition at line 102 of file HepRndmGenerators.cpp.

00102                                                                  {
00103     return RandStudentT::shoot(m_hepEngine, m_specs->aValue());
00104   }

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

Definition at line 97 of file HepRndmGenerators.cpp.

00097                                                              {
00098     return RandChiSquare::shoot(m_hepEngine, m_specs->nDOF());
00099   }

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

Definition at line 92 of file HepRndmGenerators.cpp.

00092                                                                           {
00093     return RandBreitWigner::shoot(m_hepEngine, m_specs->mean(), m_specs->gamma(), m_specs->cutOff());
00094   }

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

Definition at line 87 of file HepRndmGenerators.cpp.

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

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

Definition at line 82 of file HepRndmGenerators.cpp.

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

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

Definition at line 72 of file HepRndmGenerators.cpp.

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

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

Definition at line 61 of file HepRndmGenerators.cpp.

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

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

Definition at line 56 of file HepRndmGenerators.cpp.

00056                                                             {
00057     return RandFlat::shootBit(m_hepEngine);
00058   }

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

Definition at line 51 of file HepRndmGenerators.cpp.

00051                                                              {
00052     return RandFlat::shoot(m_hepEngine, m_specs->minimum(), m_specs->maximum());
00053   }

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

Single shot.


Member Data Documentation

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

Definition at line 24 of file HepRndmGenerator.h.

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

Definition at line 25 of file HepRndmGenerator.h.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Wed Feb 9 16:33:45 2011 for Gaudi Framework, version v22r0 by Doxygen version 1.6.2 written by Dimitri van Heesch, © 1997-2004