6 #include "CLHEP/Random/RandFlat.h"
36 float ts1, ts2, ts3, thpd, tpre, wd1, wd2, wd3;
150 float ts1,
float ts2,
float ts3,
float thpd,
float tpre,
float wd1,
float wd2,
float wd3,
Shape& tmphpdShape_) {
164 unsigned int nbin = 256;
166 std::vector<float> ntmp(
nbin, 0.0);
167 std::vector<float> nth(
nbin, 0.0);
168 std::vector<float> ntp(
nbin, 0.0);
169 std::vector<float> ntd(
nbin, 0.0);
171 unsigned int i,
j,
k;
176 for (
j = 0;
j < thpd &&
j <
nbin;
j++) {
177 nth[
j] = 1.0 + ((
float)
j) / thpd;
181 for (
j = 0;
j < thpd &&
j <
nbin;
j++) {
187 for (
j = 0;
j < 6 * tpre &&
j <
nbin;
j++) {
188 ntp[
j] = ((
float)
j) *
exp(-((
float)(
j *
j)) / (tpre * tpre));
192 for (
j = 0;
j < 6 * tpre &&
j <
nbin;
j++) {
200 unsigned int tmax = 6 * (
int)ts3;
204 ntd[
j] = wd1 *
exp(-((
float)
j) / ts1) + wd2 *
exp(-((
float)
j) / ts2) + wd3 *
exp(-((
float)
j) / ts3);
212 unsigned int t1,
t2,
t3, t4;
218 for (
j = 0;
j < thpd &&
j <
nbin;
j++) {
220 for (
k = 0;
k < 4 * tpre &&
k <
nbin;
k++) {
223 unsigned int ntb = t4;
224 ntmp[ntb] += ntd[
i] * nth[
j] * ntp[
k];
247 unsigned int nbin = 256;
249 std::vector<float> ntmp(
nbin, 0.0);
251 const float k0 = 0.7956;
252 const float p2 = 1.355;
253 const float p4 = 2.327;
254 const float p1 = 4.3;
258 for (
unsigned int j = 0;
j < 25 &&
j <
nbin; ++
j) {
260 float sigma0 = (r0 < 0) ?
p2 :
p2 *
p4;
263 ntmp[
j] =
exp(-0.5 * r0 * r0);
269 for (
unsigned int j = 0;
j < 25 &&
j <
nbin; ++
j) {
279 unsigned int nbin = 250;
281 std::array<float, 250>
nt{
282 {5.22174e-12, 7.04852e-10, 3.49584e-08, 7.78029e-07, 9.11847e-06, 6.39666e-05, 0.000297587, 0.000996661,
283 0.00256618, 0.00535396, 0.00944073, 0.0145521, 0.020145, 0.0255936, 0.0303632, 0.0341078,
284 0.0366849, 0.0381183, 0.0385392, 0.0381327, 0.0370956, 0.0356113, 0.0338366, 0.0318978,
285 0.029891, 0.0278866, 0.0259336, 0.0240643, 0.0222981, 0.0206453, 0.0191097, 0.0176902,
286 0.0163832, 0.0151829, 0.0140826, 0.0130752, 0.0121533, 0.01131, 0.0105382, 0.00983178,
287 0.00918467, 0.00859143, 0.00804709, 0.0075471, 0.00708733, 0.00666406, 0.00627393, 0.00591389,
288 0.00558122, 0.00527344, 0.00498834, 0.00472392, 0.00447837, 0.00425007, 0.00403754, 0.00383947,
289 0.00365465, 0.00348199, 0.00332052, 0.00316934, 0.00302764, 0.0028947, 0.00276983, 0.00265242,
290 0.00254193, 0.00243785, 0.00233971, 0.00224709, 0.0021596, 0.00207687, 0.0019986, 0.00192447,
291 0.00185421, 0.00178756, 0.0017243, 0.00166419, 0.00160705, 0.00155268, 0.00150093, 0.00145162,
292 0.00140461, 0.00135976, 0.00131696, 0.00127607, 0.00123699, 0.00119962, 0.00116386, 0.00112963,
293 0.00109683, 0.0010654, 0.00103526, 0.00100634, 0.000978578, 0.000951917, 0.000926299, 0.000901672,
294 0.000877987, 0.000855198, 0.00083326, 0.000812133, 0.000791778, 0.000772159, 0.000753242, 0.000734994,
295 0.000717384, 0.000700385, 0.000683967, 0.000668107, 0.000652779, 0.00063796, 0.000623629, 0.000609764,
296 0.000596346, 0.000583356, 0.000570777, 0.000558592, 0.000546785, 0.00053534, 0.000524243, 0.000513481,
297 0.00050304, 0.000492907, 0.000483072, 0.000473523, 0.000464248, 0.000455238, 0.000446483, 0.000437974,
298 0.0004297, 0.000421655, 0.00041383, 0.000406216, 0.000398807, 0.000391595, 0.000384574, 0.000377736,
299 0.000371076, 0.000364588, 0.000358266, 0.000352104, 0.000346097, 0.00034024, 0.000334528, 0.000328956,
300 0.00032352, 0.000318216, 0.000313039, 0.000307986, 0.000303052, 0.000298234, 0.000293528, 0.000288931,
301 0.000284439, 0.00028005, 0.000275761, 0.000271567, 0.000267468, 0.000263459, 0.000259538, 0.000255703,
302 0.000251951, 0.00024828, 0.000244688, 0.000241172, 0.00023773, 0.000234361, 0.000231061, 0.00022783,
303 0.000224666, 0.000221566, 0.000218528, 0.000215553, 0.000212636, 0.000209778, 0.000206977, 0.00020423,
304 0.000201537, 0.000198896, 0.000196307, 0.000193767, 0.000191275, 0.000188831, 0.000186432, 0.000184079,
305 0.000181769, 0.000179502, 0.000177277, 0.000175092, 0.000172947, 0.000170841, 0.000168772, 0.000166741,
306 0.000164745, 0.000162785, 0.000160859, 0.000158967, 0.000157108, 0.00015528, 0.000153484, 0.000151719,
307 0.000149984, 0.000148278, 0.000146601, 0.000144951, 0.000143329, 0.000141734, 0.000140165, 0.000138622,
308 0.000137104, 0.00013561, 0.000134141, 0.000132695, 0.000131272, 0.000129871, 0.000128493, 0.000127136,
309 0.000125801, 0.000124486, 0.000123191, 0.000121917, 0.000120662, 0.000119426, 0.000118209, 0.00011701,
310 0.000115829, 0.000114665, 0.000113519, 0.00011239, 0.000111278, 0.000110182, 0.000109102, 0.000108037,
311 0.000106988, 0.000105954, 0.000104935, 0.00010393, 0.000102939, 0.000101963, 0.000101, 0.000100051,
312 9.91146e-05, 9.81915e-05, 9.7281e-05, 9.63831e-05, 9.54975e-05, 9.46239e-05, 9.37621e-05, 9.2912e-05,
313 9.20733e-05, 9.12458e-05}};
318 for (
unsigned int j = 0;
j <
nbin; ++
j) {
319 norm += (
nt[
j] > 0) ?
nt[
j] : 0.;
322 for (
unsigned int j = 0;
j <
nbin; ++
j) {
333 unsigned int nbin = 250;
335 std::array<float, 250>
nt{
336 {3.97958e-29, 1.11634e-22, 9.96106e-18, 6.25334e-14, 5.08863e-11, 8.59141e-09, 4.32285e-07, 8.56617e-06,
337 8.28549e-05, 0.000461447, 0.00168052, 0.00441395, 0.00901637, 0.0151806, 0.0220314, 0.028528,
338 0.0338471, 0.0375578, 0.0395985, 0.0401567, 0.0395398, 0.0380776, 0.0360669, 0.0337474,
339 0.0312984, 0.0288457, 0.0264721, 0.0242276, 0.0221393, 0.0202181, 0.0184647, 0.0168731,
340 0.0154335, 0.0141346, 0.0129639, 0.0119094, 0.0109594, 0.0101031, 0.0093305, 0.00863267,
341 0.0080015, 0.00742977, 0.00691107, 0.00643969, 0.00601059, 0.00561931, 0.00526188, 0.00493483,
342 0.00463505, 0.00435981, 0.00410667, 0.00387348, 0.00365832, 0.00345949, 0.00327547, 0.0031049,
343 0.00294656, 0.00279938, 0.00266237, 0.00253467, 0.00241548, 0.0023041, 0.00219989, 0.00210227,
344 0.00201072, 0.00192476, 0.00184397, 0.00176795, 0.00169634, 0.00162884, 0.00156512, 0.00150494,
345 0.00144803, 0.00139418, 0.00134317, 0.00129481, 0.00124894, 0.00120537, 0.00116398, 0.00112461,
346 0.00108715, 0.00105147, 0.00101747, 0.000985042, 0.000954096, 0.000924545, 0.000896308, 0.000869311,
347 0.000843482, 0.000818758, 0.000795077, 0.000772383, 0.000750623, 0.000729747, 0.00070971, 0.000690466,
348 0.000671977, 0.000654204, 0.00063711, 0.000620663, 0.000604831, 0.000589584, 0.000574894, 0.000560735,
349 0.000547081, 0.00053391, 0.0005212, 0.000508929, 0.000497078, 0.000485628, 0.000474561, 0.000463862,
350 0.000453514, 0.000443501, 0.000433811, 0.000424429, 0.000415343, 0.00040654, 0.00039801, 0.000389741,
351 0.000381722, 0.000373944, 0.000366398, 0.000359074, 0.000351964, 0.00034506, 0.000338353, 0.000331838,
352 0.000325505, 0.00031935, 0.000313365, 0.000307544, 0.000301881, 0.000296371, 0.000291009, 0.000285788,
353 0.000280705, 0.000275755, 0.000270932, 0.000266233, 0.000261653, 0.00025719, 0.000252837, 0.000248593,
354 0.000244454, 0.000240416, 0.000236475, 0.00023263, 0.000228876, 0.000225212, 0.000221633, 0.000218138,
355 0.000214724, 0.000211389, 0.00020813, 0.000204945, 0.000201831, 0.000198787, 0.000195811, 0.0001929,
356 0.000190053, 0.000187268, 0.000184543, 0.000181876, 0.000179266, 0.000176711, 0.00017421, 0.000171761,
357 0.000169363, 0.000167014, 0.000164713, 0.000162459, 0.00016025, 0.000158086, 0.000155964, 0.000153885,
358 0.000151847, 0.000149848, 0.000147888, 0.000145966, 0.000144081, 0.000142232, 0.000140418, 0.000138638,
359 0.000136891, 0.000135177, 0.000133494, 0.000131843, 0.000130221, 0.00012863, 0.000127066, 0.000125531,
360 0.000124023, 0.000122543, 0.000121088, 0.000119658, 0.000118254, 0.000116874, 0.000115518, 0.000114185,
361 0.000112875, 0.000111587, 0.000110321, 0.000109076, 0.000107851, 0.000106648, 0.000105464, 0.000104299,
362 0.000103154, 0.000102027, 0.000100918, 9.98271e-05, 9.87537e-05, 9.76974e-05, 9.66578e-05, 9.56346e-05,
363 9.46274e-05, 9.3636e-05, 9.26599e-05, 9.16989e-05, 9.07526e-05, 8.98208e-05, 8.89032e-05, 8.79995e-05,
364 8.71093e-05, 8.62325e-05, 8.53688e-05, 8.45179e-05, 8.36796e-05, 8.28536e-05, 8.20397e-05, 8.12376e-05,
365 8.04471e-05, 7.96681e-05, 7.89002e-05, 7.81433e-05, 7.73972e-05, 7.66616e-05, 7.59364e-05, 7.52213e-05,
366 7.45163e-05, 7.3821e-05, 7.31354e-05, 7.24592e-05, 7.17923e-05, 7.11345e-05, 7.04856e-05, 6.98455e-05,
367 6.9214e-05, 6.8591e-05}};
372 for (
unsigned int j = 0;
j <
nbin; ++
j) {
373 norm += (
nt[
j] > 0) ?
nt[
j] : 0.;
376 for (
unsigned int j = 0;
j <
nbin; ++
j) {
383 unsigned int nbin = 128;
386 std::array<float, 128>
nt{
387 {2.782980485851731e-6, 4.518134885954626e-5, 2.7689305197392056e-4, 9.18328418900969e-4,
388 .002110072599166349, .003867856860331454, .006120046224897771, .008754774090536956,
389 0.0116469503358586, .01467007449455966, .01770489955229477, .02064621450689512,
390 .02340678093764222, .02591874610854916, .02813325527435303, 0.0300189241965647,
391 .03155968107671164, .03275234052577155, .03360415306318798, .03413048377960748,
392 .03435270899678218, .03429637464659661, .03398962975487166, .03346192884394954,
393 .03274298516247742, .03186195009136525, .03084679116113031, 0.0297238406141036,
394 .02851748748929785, .02724998816332392, .02594137274487424, .02460942736731527,
395 .02326973510736116, .02193576080366117, 0.0206189674254987, .01932895378564653,
396 0.0180736052958666, .01685925112650875, 0.0156908225633535, .01457200857138456,
397 .01350540559602467, .01249265947824805, .01153459805300423, .01063135355597282,
398 .009782474412011936, .008987026319784546, 0.00824368281357106, .007550805679909604,
399 .006906515742762193, .006308754629755056, .005755338185695127, .005244002229973356,
400 .004772441359900532, .004338341490928299, .003939406800854143, 0.00357338171220501,
401 0.0032380685079891, .002931341133259233, .002651155690306086, .002395558090237333,
402 .002162689279320922, .001950788415487319, .001758194329648101, .001583345567913682,
403 .001424779275191974, .001281129147671334, 0.00115112265163774, .001033577678808199,
404 9.273987838127585e-4, 8.315731274976846e-4, 7.451662302008696e-4, 6.673176219006913e-4,
405 5.972364609644049e-4, 5.341971801529036e-4, 4.775352065178378e-4, 4.266427928961177e-4,
406 3.8096498904225923e-4, 3.3999577417327287e-4, 3.032743659102713e-4, 2.703817158798329e-4,
407 2.4093719775272793e-4, 2.145954900503894e-4, 1.9104365317752797e-4, 1.6999839784346724e-4,
408 1.5120354022478893e-4, 1.3442763782650755e-4, 1.1946179895521507e-4, 1.0611765796993575e-4,
409 9.422550797617687e-5, 8.363258233342666e-5, 7.420147621931836e-5, 6.580869950304933e-5,
410 5.834335229919868e-5, 5.17059147771959e-5, 4.5807143072062634e-5, 4.0567063461299446e-5,
411 3.591405732740723e-5, 3.178402980354131e-5, 2.811965539165646e-5, 2.4869694240316126e-5,
412 2.1988373166730962e-5, 1.9434825899529382e-5, 1.717258740121378e-5, 1.5169137499243157e-5,
413 1.339548941011129e-5, 1.1825819079078403e-5, 1.0437131581057595e-5, 9.208961130078894e-6,
414 8.12310153137994e-6, 7.163364176588591e-6, 6.315360932244386e-6, 5.566309502463164e-6,
415 4.904859063429651e-6, 4.320934164082596e-6, 3.8055950719111903e-6, 3.350912911083174e-6,
416 2.9498580949517117e-6, 2.596200697612328e-6, 2.2844215378879293e-6, 2.0096328693141094e-6,
417 1.7675076766686654e-6, 1.5542166787225756e-6, 1.366372225473431e-6, 1.200978365778838e-6,
418 1.0553864128982371e-6, 9.272554464808518e-7, 8.145171945902259e-7, 7.153448381918271e-7}};
423 for (
unsigned int j = 0;
j <
nbin; ++
j) {
424 norm += (
nt[
j] > 0) ?
nt[
j] : 0.;
427 for (
unsigned int j = 0;
j <
nbin; ++
j) {
437 return siPMShapeMC2017;
445 return siPMShapeMC2018;
449 ShapeMap::const_iterator shapeMapItr =
theShapes.find(shapeType);
454 return *(shapeMapItr->second);
464 ShapeMap::const_iterator shapeMapItr =
theShapes.find(shapeType);
468 return *(shapeMapItr->second);
478 ShapeMap::const_iterator shapeMapItr =
theShapes.find(shapeType);
482 return *(shapeMapItr->second);
507 inline double gexp(
double t,
double A,
double c,
double t0,
double s) {
508 static double const root2(
sqrt(2));
509 return -
A * 0.5 *
exp(
c *
t + 0.5 *
c *
c *
s *
s -
c *
s) * (erf(-0.5 * root2 /
s * (
t -
t0 +
c *
s *
s)) - 1);
513 return (
t <
theta) ? 0 :
A * TMath::LogNormal(
t, sigma,
theta,
m);
518 double A1(0.08757),
c1(-0.5257), t01(2.4013), s1(0.6721);
519 double A2(0.007598), c2(-0.1501), t02(6.9412),
s2(0.8710);
525 double A1(5.204 / 6.94419), sigma1_shape(0.5387), theta1_loc(-0.3976), m1_scale(4.428);
526 double A2(1.855 / 6.94419), sigma2_shape(0.8132), theta2_loc(7.025), m2_scale(12.29);
527 return onePulse(
t, A1, sigma1_shape, theta1_loc, m1_scale) +
onePulse(
t, A2, sigma2_shape, theta2_loc, m2_scale);
531 if (signalShape == 206)
577 double norm, mpv, sigma, corTerm;
582 corTerm = norm * TMath::Landau((
t -
shift), mpv, sigma);