Gaudi Framework, version v20r4

Generated: 8 Jan 2009

HepRndmGenerators.cpp

Go to the documentation of this file.
00001 //====================================================================
00002 //      Random Generator implementations
00003 //--------------------------------------------------------------------
00004 //
00005 //      Package    : Gaudi/RndmGen ( The LHCb Offline System)
00006 //      Author     : M.Frank
00007 //  History    :
00008 // +---------+----------------------------------------------+---------
00009 // |    Date |                 Comment                      | Who     
00010 // +---------+----------------------------------------------+---------
00011 // | 29/10/99| Initial version                              | MF
00012 // +---------+----------------------------------------------+---------
00013 //
00014 //====================================================================
00015 #define HEPRNDM_HEPRNDMGENSVC_CPP
00016 
00017 // Framework include files
00018 #include "GaudiKernel/ObjectFactory.h"
00019 
00020 // STL include files
00021 #include <iostream>
00022 #include <cfloat>
00023 #include <cmath>
00024 
00025 // The order of the following two include files is significant due to template specialisation
00026 #include "RndmGen.h"
00027 #include "RndmGenSvc.h"
00028 #include "HepRndmGenerator.h"
00029 #include "GaudiKernel/RndmGenerators.h"
00030 
00031 #include "CLHEP/Random/RandomEngine.h"
00032 #include "CLHEP/Random/RandFlat.h"
00033 #include "CLHEP/Random/RandGamma.h"
00034 #include "CLHEP/Random/RandGaussQ.h"
00035 #include "CLHEP/Random/RandPoisson.h"
00036 #include "CLHEP/Random/RandGeneral.h"
00037 #include "CLHEP/Random/RandStudentT.h"
00038 #include "CLHEP/Random/RandBinomial.h"
00039 #include "CLHEP/Random/RandChiSquare.h"
00040 #include "CLHEP/Random/RandExponential.h"
00041 #include "CLHEP/Random/RandBreitWigner.h"
00042 
00043 namespace HepRndm  {
00044 
00045   // Specialized shoot function for flat distributed random number generation
00046   template <> double Generator<Rndm::Flat>::shoot()    const     {
00047     return RandFlat::shoot(m_hepEngine, m_specs->minimum(), m_specs->maximum());
00048   }
00049 
00050   // Specialized shoot function
00051   template <> double Generator<Rndm::Bit>::shoot()    const     {
00052     return RandFlat::shootBit(m_hepEngine);
00053   }
00054 
00055   // Specialized shoot function for Gauss distributed random number generation
00056   template <> double Generator<Rndm::Gauss>::shoot()    const     {
00057     return RandGaussQ::shoot(m_hepEngine, m_specs->mean(), m_specs->sigma());
00058   }
00059 
00060   // Specialized shoot function for Poisson distributed random number generation
00061   template <> double Generator<Rndm::Poisson>::shoot()    const     {
00062     return RandPoisson::shoot(m_hepEngine, m_specs->mean());
00063   }
00064 
00065   // Specialized shoot function
00066   template <> double Generator<Rndm::Exponential>::shoot()    const     {
00067     return RandExponential::shoot(m_hepEngine, m_specs->mean());
00068   }
00069 
00070   // Specialized shoot function
00071   template <> double Generator<Rndm::BreitWigner>::shoot()    const     {
00072     return RandBreitWigner::shoot(m_hepEngine, m_specs->mean(), m_specs->gamma());
00073   }
00074 
00075   // Specialized shoot function
00076   template <> double Generator<Rndm::BreitWignerCutOff>::shoot()    const     {
00077     return RandBreitWigner::shoot(m_hepEngine, m_specs->mean(), m_specs->gamma(), m_specs->cutOff());
00078   }
00079 
00080   // Specialized shoot function
00081   template <> double Generator<Rndm::Chi2>::shoot()    const     {
00082     return RandChiSquare::shoot(m_hepEngine, m_specs->nDOF());
00083   }
00084 
00085   // Specialized shoot function
00086   template <> double Generator<Rndm::StudentT>::shoot()    const     {
00087     return RandStudentT::shoot(m_hepEngine, m_specs->aValue());
00088   }
00089 
00090   template <> double Generator<Rndm::Gamma>::shoot()    const     {
00091     return RandGamma::shoot(m_hepEngine, m_specs->kValue(), m_specs->lambda());
00092   }
00093 
00094   // Specialized shoot function
00095   template <> double Generator<Rndm::Binomial>::shoot()    const     {
00096     return RandBinomial::shoot(m_hepEngine, m_specs->nEvent(), m_specs->probability());
00097   }
00098 
00099   /************************************************************************
00100   * Copyright(c) 1995-1999, The ROOT System, All rights reserved.         *
00101   * Authors: Rene Brun, Fons Rademakers.                                  *
00102   * For list of contributors see $ROOTSYS/AA_CREDITS.                     *
00103   *                                                                       *
00104   * Permission to use, copy, modify and distribute this software and its  *
00105   * documentation for non-commercial purposes is hereby granted without   *
00106   * fee, provided that the above copyright notice appears in all copies   *
00107   * and that both the copyright notice and this permission notice appear  *
00108   * in the supporting documentation. The authors make no claims about the *
00109   * suitability of this software for any purpose. It is provided "as is"  *
00110   * without express or implied warranty.                                  *
00111   ************************************************************************/
00112   // Specialized shoot function. The Landau distribution is not covered by
00113   // CLHEP yet. This is hacked up version from ROOT. The above copyright notice
00114   // should give the guys credit.
00115   template <> double Generator<Rndm::Landau>::shoot()    const     {
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   }
00321 
00322   template <>
00323   class Generator<Rndm::DefinedPdf> : public RndmGen   {
00324   protected:
00325     RandGeneral*     m_generator;
00326     HepRandomEngine* m_hepEngine;
00327   public: 
00329     Generator(IInterface* engine)
00330     : RndmGen (engine), m_generator(0), m_hepEngine(0)    {
00331     }
00333     virtual ~Generator() {
00334     }
00336     virtual StatusCode initialize(const IRndmGen::Param& par)   {
00337       StatusCode status = RndmGen::initialize(par);
00338       if ( status.isSuccess() )   {
00339         try   {
00340           Rndm::DefinedPdf* specs = dynamic_cast<Rndm::DefinedPdf*>(m_params);
00341           if ( 0 != specs )  {
00342             m_generator = new RandGeneral( &specs->pdf()[0],
00343                                            specs->pdf().size(), 
00344                                            specs->interpolation());
00345             BaseEngine* engine = dynamic_cast<BaseEngine*>(m_engine);
00346             if ( 0 != engine )    {
00347               m_hepEngine = engine->hepEngine();
00348               if ( 0 != m_hepEngine )   {
00349                 return StatusCode::SUCCESS;
00350               }
00351             }
00352           }
00353         }
00354         catch (...)   {
00355         }
00356       }
00357       return StatusCode::FAILURE;
00358     }
00360     virtual StatusCode finalize()   {
00361       if ( m_generator ) delete m_generator;
00362       m_generator = 0;
00363       return RndmGen::finalize();
00364     }
00366     virtual double shoot() const    {
00367       return m_generator->shoot(m_hepEngine);
00368     }
00369   };
00370 
00371   // Specialized shoot function
00372   template <> double Generator<Rndm::GaussianTail>::shoot()    const     {
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   } 
00409 }
00410 
00411 
00412 using namespace Rndm;
00413 #define DECLARE_GENERATOR_FACTORY(x,i)   \
00414   typedef HepRndm::Generator<x> b##i; \
00415   PLUGINSVC_FACTORY_WITH_ID(b##i,x::typeID(),IInterface*(IInterface*))
00416 
00417 
00418 DECLARE_GENERATOR_FACTORY(Bit,1)
00419 DECLARE_GENERATOR_FACTORY(Flat,2)
00420 DECLARE_GENERATOR_FACTORY(Chi2,3)
00421 DECLARE_GENERATOR_FACTORY(Gamma,4)
00422 DECLARE_GENERATOR_FACTORY(Gauss,5)
00423 DECLARE_GENERATOR_FACTORY(Landau,6)
00424 DECLARE_GENERATOR_FACTORY(Poisson,7)
00425 DECLARE_GENERATOR_FACTORY(StudentT,8)
00426 DECLARE_GENERATOR_FACTORY(Binomial,9)
00427 DECLARE_GENERATOR_FACTORY(Exponential,10)
00428 DECLARE_GENERATOR_FACTORY(BreitWigner,11)
00429 DECLARE_GENERATOR_FACTORY(BreitWignerCutOff,12)
00430 DECLARE_GENERATOR_FACTORY(DefinedPdf,13)
00431 DECLARE_GENERATOR_FACTORY(GaussianTail,14)
00432 

Generated at Thu Jan 8 17:44:24 2009 for Gaudi Framework, version v20r4 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004