![]() |
|
|
Generated: 18 Jul 2008 |
#include <HepRndmGenerator.h>
Inheritance diagram for HepRndm::Generator< TYPE >:


Definition at line 27 of file 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 |
| Single shot returning single random number according to specified distribution. | |
| template<> | |
| double | shoot () const |
| Single shot returning single random number according to specified distribution. | |
| template<> | |
| double | shoot () const |
| Single shot returning single random number according to specified distribution. | |
| template<> | |
| double | shoot () const |
| Single shot returning single random number according to specified distribution. | |
| template<> | |
| double | shoot () const |
| Single shot returning single random number according to specified distribution. | |
| template<> | |
| double | shoot () const |
| Single shot returning single random number according to specified distribution. | |
| template<> | |
| double | shoot () const |
| Single shot returning single random number according to specified distribution. | |
| template<> | |
| double | shoot () const |
| Single shot returning single random number according to specified distribution. | |
| template<> | |
| double | shoot () const |
| Single shot returning single random number according to specified distribution. | |
| template<> | |
| double | shoot () const |
| Single shot returning single random number according to specified distribution. | |
| template<> | |
| double | shoot () const |
| Single shot returning single random number according to specified distribution. | |
| template<> | |
| double | shoot () const |
| Single shot returning single random number according to specified distribution. | |
| template<> | |
| double | shoot () const |
| Single shot returning single random number according to specified distribution. | |
Protected Attributes | |
| CLHEP::HepRandomEngine * | m_hepEngine |
| TYPE * | m_specs |
| typedef TYPE HepRndm::Generator< TYPE >::Parameters |
Definition at line 29 of file HepRndmGenerator.h.
| HepRndm::Generator< TYPE >::Generator | ( | IInterface * | engine | ) |
Definition at line 42 of file HepRndmGenerator.h.
00043 : RndmGen (engine), m_hepEngine(0), m_specs(0) { 00044 }
| HepRndm::Generator< TYPE >::~Generator | ( | ) | [virtual] |
| StatusCode HepRndm::Generator< TYPE >::initialize | ( | const IRndmGen::Param & | par | ) | [virtual] |
Initialize the generator.
Reimplemented from RndmGen.
Definition at line 50 of file HepRndmGenerator.h.
References StatusCode::FAILURE, HepRndm::BaseEngine::hepEngine(), RndmGen::initialize(), StatusCode::isSuccess(), RndmGen::m_engine, HepRndm::Generator< TYPE >::m_hepEngine, RndmGen::m_params, HepRndm::Generator< TYPE >::m_specs, and StatusCode::SUCCESS.
00050 { 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 (...) { 00066 } 00067 } 00068 return StatusCode::FAILURE; 00069 }
| virtual double HepRndm::Generator< TYPE >::shoot | ( | ) | const [virtual] |
| double HepRndm::Generator< Rndm::Flat >::shoot | ( | ) | const [virtual] |
Single shot returning single random number according to specified distribution.
Reimplemented from RndmGen.
Definition at line 46 of file HepRndmGenerators.cpp.
References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.
00046 { 00047 return RandFlat::shoot(m_hepEngine, m_specs->minimum(), m_specs->maximum()); 00048 }
| double HepRndm::Generator< Rndm::Bit >::shoot | ( | ) | const [virtual] |
Single shot returning single random number according to specified distribution.
Reimplemented from RndmGen.
Definition at line 51 of file HepRndmGenerators.cpp.
References HepRndm::Generator< TYPE >::m_hepEngine.
00051 { 00052 return RandFlat::shootBit(m_hepEngine); 00053 }
| double HepRndm::Generator< Rndm::Gauss >::shoot | ( | ) | const [virtual] |
Single shot returning single random number according to specified distribution.
Reimplemented from RndmGen.
Definition at line 56 of file HepRndmGenerators.cpp.
References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.
00056 { 00057 return RandGaussQ::shoot(m_hepEngine, m_specs->mean(), m_specs->sigma()); 00058 }
| double HepRndm::Generator< Rndm::Poisson >::shoot | ( | ) | const [virtual] |
Single shot returning single random number according to specified distribution.
Reimplemented from RndmGen.
Definition at line 61 of file HepRndmGenerators.cpp.
References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.
00061 { 00062 return RandPoisson::shoot(m_hepEngine, m_specs->mean()); 00063 }
| double HepRndm::Generator< Rndm::Exponential >::shoot | ( | ) | const [virtual] |
Single shot returning single random number according to specified distribution.
Reimplemented from RndmGen.
Definition at line 66 of file HepRndmGenerators.cpp.
References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.
00066 { 00067 return RandExponential::shoot(m_hepEngine, m_specs->mean()); 00068 }
| double HepRndm::Generator< Rndm::BreitWigner >::shoot | ( | ) | const [virtual] |
Single shot returning single random number according to specified distribution.
Reimplemented from RndmGen.
Definition at line 71 of file HepRndmGenerators.cpp.
References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.
00071 { 00072 return RandBreitWigner::shoot(m_hepEngine, m_specs->mean(), m_specs->gamma()); 00073 }
| double HepRndm::Generator< Rndm::BreitWignerCutOff >::shoot | ( | ) | const [virtual] |
Single shot returning single random number according to specified distribution.
Reimplemented from RndmGen.
Definition at line 76 of file HepRndmGenerators.cpp.
References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.
00076 { 00077 return RandBreitWigner::shoot(m_hepEngine, m_specs->mean(), m_specs->gamma(), m_specs->cutOff()); 00078 }
| double HepRndm::Generator< Rndm::Chi2 >::shoot | ( | ) | const [virtual] |
Single shot returning single random number according to specified distribution.
Reimplemented from RndmGen.
Definition at line 81 of file HepRndmGenerators.cpp.
References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.
00081 { 00082 return RandChiSquare::shoot(m_hepEngine, m_specs->nDOF()); 00083 }
| double HepRndm::Generator< Rndm::StudentT >::shoot | ( | ) | const [virtual] |
Single shot returning single random number according to specified distribution.
Reimplemented from RndmGen.
Definition at line 86 of file HepRndmGenerators.cpp.
References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.
00086 { 00087 return RandStudentT::shoot(m_hepEngine, m_specs->aValue()); 00088 }
| double HepRndm::Generator< Rndm::Gamma >::shoot | ( | ) | const [virtual] |
Single shot returning single random number according to specified distribution.
Reimplemented from RndmGen.
Definition at line 90 of file HepRndmGenerators.cpp.
References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.
00090 { 00091 return RandGamma::shoot(m_hepEngine, m_specs->kValue(), m_specs->lambda()); 00092 }
| double HepRndm::Generator< Rndm::Binomial >::shoot | ( | ) | const [virtual] |
Single shot returning single random number according to specified distribution.
Reimplemented from RndmGen.
Definition at line 95 of file HepRndmGenerators.cpp.
References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.
00095 { 00096 return RandBinomial::shoot(m_hepEngine, m_specs->nEvent(), m_specs->probability()); 00097 }
| double HepRndm::Generator< Rndm::Landau >::shoot | ( | ) | const [virtual] |
Single shot returning single random number according to specified distribution.
Reimplemented from RndmGen.
Definition at line 115 of file HepRndmGenerators.cpp.
References HepRndm::Generator< TYPE >::m_hepEngine, and HepRndm::Generator< TYPE >::m_specs.
00115 { 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 }
| double HepRndm::Generator< Rndm::GaussianTail >::shoot | ( | ) | const [virtual] |
Single shot returning single random number according to specified distribution.
Reimplemented from RndmGen.
Definition at line 372 of file HepRndmGenerators.cpp.
References HepRndm::Generator< TYPE >::m_hepEngine, HepRndm::Generator< TYPE >::m_specs, and Gaudi::Units::s.
00372 { 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 }
CLHEP::HepRandomEngine* HepRndm::Generator< TYPE >::m_hepEngine [protected] |
Definition at line 31 of file HepRndmGenerator.h.
Referenced by HepRndm::Generator< Rndm::DefinedPdf >::initialize(), HepRndm::Generator< TYPE >::initialize(), HepRndm::Generator< Rndm::DefinedPdf >::shoot(), and HepRndm::Generator< TYPE >::shoot().
TYPE* HepRndm::Generator< TYPE >::m_specs [protected] |
Definition at line 32 of file HepRndmGenerator.h.
Referenced by HepRndm::Generator< TYPE >::initialize(), and HepRndm::Generator< TYPE >::shoot().