Gaudi Framework, version v21r7

Home   Generated: 22 Jan 2010

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

Generated at Fri Jan 22 20:28:09 2010 for Gaudi Framework, version v21r7 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004