![]() |
|
|
Generated: 8 Jan 2009 |
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