|
Gaudi Framework, version v22r0 |
| Home | Generated: 9 Feb 2011 |
#include <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 |
| 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 |
Definition at line 23 of file HepRndmGenerator.h.
| typedef TYPE HepRndm::Generator< TYPE >::Parameters |
Definition at line 22 of file HepRndmGenerator.h.
| HepRndm::Generator< TYPE >::Generator | ( | IInterface * | engine | ) | [inline] |
Definition at line 38 of file HepRndmGenerator.h.
| HepRndm::Generator< TYPE >::~Generator | ( | ) | [inline, virtual] |
Definition at line 42 of file HepRndmGenerator.h.
00043 : RndmGen (engine), m_hepEngine(0), m_specs(0) {
| 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 (...) {
| 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 }
| 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 }
| 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 }
| 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 }
| 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 }
| 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 }
| 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 }
| 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 }
| 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 }
| 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 }
| 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 }
| double HepRndm::Generator< Rndm::Bit >::shoot | ( | ) | const [inline] |
Definition at line 56 of file HepRndmGenerators.cpp.
00056 { 00057 return RandFlat::shootBit(m_hepEngine); 00058 }
| 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 }
| virtual double HepRndm::Generator< TYPE >::shoot | ( | ) | const [virtual] |
Single shot.
CLHEP::HepRandomEngine* HepRndm::Generator< TYPE >::m_hepEngine [protected] |
Definition at line 24 of file HepRndmGenerator.h.
TYPE* HepRndm::Generator< TYPE >::m_specs [protected] |
Definition at line 25 of file HepRndmGenerator.h.