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