15 #define HEPRNDM_HEPRNDMGENSVC_CPP 33 #include "CLHEP/Random/RandBinomial.h" 34 #include "CLHEP/Random/RandBreitWigner.h" 35 #include "CLHEP/Random/RandChiSquare.h" 36 #include "CLHEP/Random/RandExponential.h" 37 #include "CLHEP/Random/RandFlat.h" 38 #include "CLHEP/Random/RandGamma.h" 39 #include "CLHEP/Random/RandGaussQ.h" 40 #include "CLHEP/Random/RandGeneral.h" 41 #include "CLHEP/Random/RandPoisson.h" 42 #include "CLHEP/Random/RandStudentT.h" 43 #include "CLHEP/Random/RandomEngine.h" 49 using namespace CLHEP;
58 return RandFlat::shoot( m_hepEngine, m_specs->minimum(), m_specs->maximum() );
65 return RandFlat::shootBit( m_hepEngine );
72 return RandGaussQ::shoot( m_hepEngine, m_specs->mean(), m_specs->sigma() );
78 #pragma warning( push ) 79 #pragma warning( disable : 2259 ) 85 return RandPoisson::shoot( m_hepEngine, m_specs->mean() );
90 #pragma warning( pop ) 97 return RandExponential::shoot( m_hepEngine, m_specs->mean() );
104 return RandBreitWigner::shoot( m_hepEngine, m_specs->mean(), m_specs->gamma() );
111 return RandBreitWigner::shoot( m_hepEngine, m_specs->mean(), m_specs->gamma(), m_specs->cutOff() );
118 return RandChiSquare::shoot( m_hepEngine, m_specs->nDOF() );
125 return RandStudentT::shoot( m_hepEngine, m_specs->aValue() );
131 return RandGamma::shoot( m_hepEngine, m_specs->kValue(), m_specs->lambda() );
138 return RandBinomial::shoot( m_hepEngine, m_specs->nEvent(), m_specs->probability() );
163 static double f[982] = {
164 0, 0, 0, 0, 0, -2.244733, -2.204365, -2.168163, -2.135219, -2.104898,
165 -2.076740, -2.050397, -2.025605, -2.002150, -1.979866, -1.958612, -1.938275, -1.918760, -1.899984, -1.881879,
166 -1.864385, -1.847451, -1.831030, -1.815083, -1.799574, -1.784473, -1.769751, -1.755383, -1.741346, -1.727620,
167 -1.714187, -1.701029, -1.688130, -1.675477, -1.663057, -1.650858, -1.638868, -1.627078, -1.615477, -1.604058,
168 -1.592811, -1.581729, -1.570806, -1.560034, -1.549407, -1.538919, -1.528565, -1.518339, -1.508237, -1.498254,
169 -1.488386, -1.478628, -1.468976, -1.459428, -1.449979, -1.440626, -1.431365, -1.422195, -1.413111, -1.404112,
170 -1.395194, -1.386356, -1.377594, -1.368906, -1.360291, -1.351746, -1.343269, -1.334859, -1.326512, -1.318229,
171 -1.310006, -1.301843, -1.293737, -1.285688, -1.277693, -1.269752, -1.261863, -1.254024, -1.246235, -1.238494,
172 -1.230800, -1.223153, -1.215550, -1.207990, -1.200474, -1.192999, -1.185566, -1.178172, -1.170817, -1.163500,
173 -1.156220, -1.148977, -1.141770, -1.134598, -1.127459, -1.120354, -1.113282, -1.106242, -1.099233, -1.092255,
174 -1.085306, -1.078388, -1.071498, -1.064636, -1.057802, -1.050996, -1.044215, -1.037461, -1.030733, -1.024029,
175 -1.017350, -1.010695, -1.004064, -.997456, -.990871, -.984308, -.977767, -.971247, -.964749, -.958271,
176 -.951813, -.945375, -.938957, -.932558, -.926178, -.919816, -.913472, -.907146, -.900838, -.894547,
177 -.888272, -.882014, -.875773, -.869547, -.863337, -.857142, -.850963, -.844798, -.838648, -.832512,
178 -.826390, -.820282, -.814187, -.808106, -.802038, -.795982, -.789940, -.783909, -.777891, -.771884,
179 -.765889, -.759906, -.753934, -.747973, -.742023, -.736084, -.730155, -.724237, -.718328, -.712429,
180 -.706541, -.700661, -.694791, -.688931, -.683079, -.677236, -.671402, -.665576, -.659759, -.653950,
181 -.648149, -.642356, -.636570, -.630793, -.625022, -.619259, -.613503, -.607754, -.602012, -.596276,
182 -.590548, -.584825, -.579109, -.573399, -.567695, -.561997, -.556305, -.550618, -.544937, -.539262,
183 -.533592, -.527926, -.522266, -.516611, -.510961, -.505315, -.499674, -.494037, -.488405, -.482777,
184 -.477153, -.471533, -.465917, -.460305, -.454697, -.449092, -.443491, -.437893, -.432299, -.426707,
185 -.421119, -.415534, -.409951, -.404372, -.398795, -.393221, -.387649, -.382080, -.376513, -.370949,
186 -.365387, -.359826, -.354268, -.348712, -.343157, -.337604, -.332053, -.326503, -.320955, -.315408,
187 -.309863, -.304318, -.298775, -.293233, -.287692, -.282152, -.276613, -.271074, -.265536, -.259999,
188 -.254462, -.248926, -.243389, -.237854, -.232318, -.226783, -.221247, -.215712, -.210176, -.204641,
189 -.199105, -.193568, -.188032, -.182495, -.176957, -.171419, -.165880, -.160341, -.154800, -.149259,
190 -.143717, -.138173, -.132629, -.127083, -.121537, -.115989, -.110439, -.104889, -.099336, -.093782,
191 -.088227, -.082670, -.077111, -.071550, -.065987, -.060423, -.054856, -.049288, -.043717, -.038144,
192 -.032569, -.026991, -.021411, -.015828, -.010243, -.004656, .000934, .006527, .012123, .017722,
193 .023323, .028928, .034535, .040146, .045759, .051376, .056997, .062620, .068247, .073877,
194 .079511, .085149, .090790, .096435, .102083, .107736, .113392, .119052, .124716, .130385,
195 .136057, .141734, .147414, .153100, .158789, .164483, .170181, .175884, .181592, .187304,
196 .193021, .198743, .204469, .210201, .215937, .221678, .227425, .233177, .238933, .244696,
197 .250463, .256236, .262014, .267798, .273587, .279382, .285183, .290989, .296801, .302619,
198 .308443, .314273, .320109, .325951, .331799, .337654, .343515, .349382, .355255, .361135,
199 .367022, .372915, .378815, .384721, .390634, .396554, .402481, .408415, .414356, .420304,
200 .426260, .432222, .438192, .444169, .450153, .456145, .462144, .468151, .474166, .480188,
201 .486218, .492256, .498302, .504356, .510418, .516488, .522566, .528653, .534747, .540850,
202 .546962, .553082, .559210, .565347, .571493, .577648, .583811, .589983, .596164, .602355,
203 .608554, .614762, .620980, .627207, .633444, .639689, .645945, .652210, .658484, .664768,
204 .671062, .677366, .683680, .690004, .696338, .702682, .709036, .715400, .721775, .728160,
205 .734556, .740963, .747379, .753807, .760246, .766695, .773155, .779627, .786109, .792603,
206 .799107, .805624, .812151, .818690, .825241, .831803, .838377, .844962, .851560, .858170,
207 .864791, .871425, .878071, .884729, .891399, .898082, .904778, .911486, .918206, .924940,
208 .931686, .938446, .945218, .952003, .958802, .965614, .972439, .979278, .986130, .992996,
209 .999875, 1.006769, 1.013676, 1.020597, 1.027533, 1.034482, 1.041446, 1.048424, 1.055417, 1.062424,
210 1.069446, 1.076482, 1.083534, 1.090600, 1.097681, 1.104778, 1.111889, 1.119016, 1.126159, 1.133316,
211 1.140490, 1.147679, 1.154884, 1.162105, 1.169342, 1.176595, 1.183864, 1.191149, 1.198451, 1.205770,
212 1.213105, 1.220457, 1.227826, 1.235211, 1.242614, 1.250034, 1.257471, 1.264926, 1.272398, 1.279888,
213 1.287395, 1.294921, 1.302464, 1.310026, 1.317605, 1.325203, 1.332819, 1.340454, 1.348108, 1.355780,
214 1.363472, 1.371182, 1.378912, 1.386660, 1.394429, 1.402216, 1.410024, 1.417851, 1.425698, 1.433565,
215 1.441453, 1.449360, 1.457288, 1.465237, 1.473206, 1.481196, 1.489208, 1.497240, 1.505293, 1.513368,
216 1.521465, 1.529583, 1.537723, 1.545885, 1.554068, 1.562275, 1.570503, 1.578754, 1.587028, 1.595325,
217 1.603644, 1.611987, 1.620353, 1.628743, 1.637156, 1.645593, 1.654053, 1.662538, 1.671047, 1.679581,
218 1.688139, 1.696721, 1.705329, 1.713961, 1.722619, 1.731303, 1.740011, 1.748746, 1.757506, 1.766293,
219 1.775106, 1.783945, 1.792810, 1.801703, 1.810623, 1.819569, 1.828543, 1.837545, 1.846574, 1.855631,
220 1.864717, 1.873830, 1.882972, 1.892143, 1.901343, 1.910572, 1.919830, 1.929117, 1.938434, 1.947781,
221 1.957158, 1.966566, 1.976004, 1.985473, 1.994972, 2.004503, 2.014065, 2.023659, 2.033285, 2.042943,
222 2.052633, 2.062355, 2.072110, 2.081899, 2.091720, 2.101575, 2.111464, 2.121386, 2.131343, 2.141334,
223 2.151360, 2.161421, 2.171517, 2.181648, 2.191815, 2.202018, 2.212257, 2.222533, 2.232845, 2.243195,
224 2.253582, 2.264006, 2.274468, 2.284968, 2.295507, 2.306084, 2.316701, 2.327356, 2.338051, 2.348786,
225 2.359562, 2.370377, 2.381234, 2.392131, 2.403070, 2.414051, 2.425073, 2.436138, 2.447246, 2.458397,
226 2.469591, 2.480828, 2.492110, 2.503436, 2.514807, 2.526222, 2.537684, 2.549190, 2.560743, 2.572343,
227 2.583989, 2.595682, 2.607423, 2.619212, 2.631050, 2.642936, 2.654871, 2.666855, 2.678890, 2.690975,
228 2.703110, 2.715297, 2.727535, 2.739825, 2.752168, 2.764563, 2.777012, 2.789514, 2.802070, 2.814681,
229 2.827347, 2.840069, 2.852846, 2.865680, 2.878570, 2.891518, 2.904524, 2.917588, 2.930712, 2.943894,
230 2.957136, 2.970439, 2.983802, 2.997227, 3.010714, 3.024263, 3.037875, 3.051551, 3.065290, 3.079095,
231 3.092965, 3.106900, 3.120902, 3.134971, 3.149107, 3.163312, 3.177585, 3.191928, 3.206340, 3.220824,
232 3.235378, 3.250005, 3.264704, 3.279477, 3.294323, 3.309244, 3.324240, 3.339312, 3.354461, 3.369687,
233 3.384992, 3.400375, 3.415838, 3.431381, 3.447005, 3.462711, 3.478500, 3.494372, 3.510328, 3.526370,
234 3.542497, 3.558711, 3.575012, 3.591402, 3.607881, 3.624450, 3.641111, 3.657863, 3.674708, 3.691646,
235 3.708680, 3.725809, 3.743034, 3.760357, 3.777779, 3.795300, 3.812921, 3.830645, 3.848470, 3.866400,
236 3.884434, 3.902574, 3.920821, 3.939176, 3.957640, 3.976215, 3.994901, 4.013699, 4.032612, 4.051639,
237 4.070783, 4.090045, 4.109425, 4.128925, 4.148547, 4.168292, 4.188160, 4.208154, 4.228275, 4.248524,
238 4.268903, 4.289413, 4.310056, 4.330832, 4.351745, 4.372794, 4.393982, 4.415310, 4.436781, 4.458395,
239 4.480154, 4.502060, 4.524114, 4.546319, 4.568676, 4.591187, 4.613854, 4.636678, 4.659662, 4.682807,
240 4.706116, 4.729590, 4.753231, 4.777041, 4.801024, 4.825179, 4.849511, 4.874020, 4.898710, 4.923582,
241 4.948639, 4.973883, 4.999316, 5.024942, 5.050761, 5.076778, 5.102993, 5.129411, 5.156034, 5.182864,
242 5.209903, 5.237156, 5.264625, 5.292312, 5.320220, 5.348354, 5.376714, 5.405306, 5.434131, 5.463193,
243 5.492496, 5.522042, 5.551836, 5.581880, 5.612178, 5.642734, 5.673552, 5.704634, 5.735986, 5.767610,
244 5.799512, 5.831694, 5.864161, 5.896918, 5.929968, 5.963316, 5.996967, 6.030925, 6.065194, 6.099780,
245 6.134687, 6.169921, 6.205486, 6.241387, 6.277630, 6.314220, 6.351163, 6.388465, 6.426130, 6.464166,
246 6.502578, 6.541371, 6.580553, 6.620130, 6.660109, 6.700495, 6.741297, 6.782520, 6.824173, 6.866262,
247 6.908795, 6.951780, 6.995225, 7.039137, 7.083525, 7.128398, 7.173764, 7.219632, 7.266011, 7.312910,
248 7.360339, 7.408308, 7.456827, 7.505905, 7.555554, 7.605785, 7.656608, 7.708035, 7.760077, 7.812747,
249 7.866057, 7.920019, 7.974647, 8.029953, 8.085952, 8.142657, 8.200083, 8.258245, 8.317158, 8.376837,
250 8.437300, 8.498562, 8.560641, 8.623554, 8.687319, 8.751955, 8.817481, 8.883916, 8.951282, 9.019600,
251 9.088889, 9.159174, 9.230477, 9.302822, 9.376233, 9.450735, 9.526355, 9.603118, 9.681054, 9.760191,
252 9.840558, 9.922186, 10.005107, 10.089353, 10.174959, 10.261958, 10.350389, 10.440287, 10.531693, 10.624646,
253 10.719188, 10.815362, 10.913214, 11.012789, 11.114137, 11.217307, 11.322352, 11.429325, 11.538283, 11.649285,
254 11.762390, 11.877664, 11.995170, 12.114979, 12.237161, 12.361791, 12.488946, 12.618708, 12.751161, 12.886394,
255 13.024498, 13.165570, 13.309711, 13.457026, 13.607625, 13.761625, 13.919145, 14.080314, 14.245263, 14.414134,
256 14.587072, 14.764233, 14.945778, 15.131877, 15.322712, 15.518470, 15.719353, 15.925570, 16.137345, 16.354912,
257 16.578520, 16.808433, 17.044929, 17.288305, 17.538873, 17.796967, 18.062943, 18.337176, 18.620068, 18.912049,
258 19.213574, 19.525133, 19.847249, 20.180480, 20.525429, 20.882738, 21.253102, 21.637266, 22.036036, 22.450278,
259 22.880933, 23.329017, 23.795634, 24.281981, 24.789364, 25.319207, 25.873062, 26.452634, 27.059789, 27.696581,
260 28.365274, 29.068370, 29.808638, 30.589157, 31.413354, 32.285060, 33.208568, 34.188705, 35.230920, 36.341388,
261 37.527131, 38.796172, 40.157721, 41.622399, 43.202525, 44.912465, 46.769077, 48.792279, 51.005773, 53.437996,
262 56.123356, 59.103894};
264 if ( m_specs->sigma() > 0 ) {
265 double mean = m_specs->mean();
266 double sigma = m_specs->sigma();
267 double x = RandFlat::shoot( m_hepEngine, 0., 1. );
268 double u = 1000.0 * x;
272 if ( i >= 70 && i < 800 ) {
273 ranlan = f[i - 1] + u * ( f[i] - f[i - 1] );
274 }
else if ( i >= 7 && i <= 980 ) {
275 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] ) );
276 }
else if ( i < 7 ) {
279 ranlan = ( ( 0.99858950 + ( 3.45213058E1 + 1.70854528E1 * u ) * u ) /
280 ( 1 + ( 3.41760202E1 + 4.01244582 * u ) * u ) ) *
281 ( -
log( -0.91893853 - v ) - 1 );
286 ranlan = ( 1.00060006 + 2.63991156E2 * u + 4.37320068E3 * v ) /
287 ( ( 1 + 2.57368075E2 * u + 3.41448018E3 * v ) * u );
289 ranlan = ( 1.00001538 + 6.07514119E3 * u + 7.34266409E5 * v ) /
290 ( ( 1 + 6.06511919E3 * u + 6.94021044E5 * v ) * u );
293 return mean + sigma * ranlan;
303 HepRandomEngine* m_hepEngine =
nullptr;
339 double shoot()
const override {
return m_generator->shoot( m_hepEngine ); }
345 #pragma warning( push ) 346 #pragma warning( disable : 1572 ) 357 double a = m_specs->cut();
358 double sigma = m_specs->sigma();
359 double s = a / sigma;
366 x = RandGaussQ::shoot( m_hepEngine, 0.0, 1.0 );
378 u = RandFlat::shoot( m_hepEngine );
381 v = RandFlat::shoot( m_hepEngine );
382 }
while ( v == 0.0 );
383 x = sqrt( s * s - 2 *
log( v ) );
384 }
while ( x * u > s );
389 #pragma warning( pop ) 394 using namespace Rndm;
395 #define DECLARE_GENERATOR_FACTORY( x, i ) \ 396 typedef HepRndm::Generator<x> b##i; \ 397 DECLARE_FACTORY_WITH_ID( b##i, x::typeID(), ObjFactory )
Parameters for the bit value generation: returns values 0 and 1.
Parameters for the Poisson distributed random number generation with a given mean.
StatusCode initialize(const IRndmGen::Param &par) override
Initialize the generator.
bool isSuccess() const
Test for a status code of SUCCESS.
Generator(IInterface *engine)
Standard Constructor.
std::unique_ptr< RandGeneral > m_generator
Parameters for the Gauss random number generation.
long interpolation() const
Access interpolation type.
This class is used for returning status codes from appropriate routines.
Parameters for the flat random number generation within boundaries [minimum, maximum].
Definition of the basic interface.
StatusCode initialize(const IRndmGen::Param &par) override
IRndmGen implementation.
Random Generator definition.
StatusCode finalize() override
Finalize the generator.
Parameters for the StudentT distributed random number generation.
Parameters for the Binomial distributed random number generation.
Parameters for the Landau distributed random number generation.
Parameters for the Chi2 distributed random number generation.
Parameters for the BreitWigner distributed random number generation with cut off;.
Parameters for the Gamma distributed random number generation.
#define DECLARE_GENERATOR_FACTORY(x, i)
StatusCode finalize() override
Finalize the generator.
Parameters for the Gaussian tail number generation.
Generate a random number Generator following generally distributed random values, given a user-define...
Parameters for the Gauss random number generation.
double shoot() const override
Single shot.
Parameters for the BreitWigner distributed random number generation.
CLHEP::HepRandomEngine * hepEngine()
std::vector< double > & pdf()
Access pdf.