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;
203 for (j = 0; j < tmax && j <
nbin; j++) {
204 ntd[
j] = wd1 *
exp(-((
float)j) / ts1) + wd2 *
exp(-((
float)j) / ts2) + wd3 *
exp(-((
float)j) / ts3);
208 for (j = 0; j < tmax && j <
nbin; j++) {
212 unsigned int t1,
t2,
t3, t4;
213 for (i = 0; i < tmax && i <
nbin; i++) {
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];
232 for (i = 0; i <
nbin; i++) {
236 for (i = 0; i <
nbin; i++) {
240 for (i = 0; i <
nbin; i++) {
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);
265 ntmp[
j] =
exp(0.5 * k0 * k0 - k0 * 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);
520 return gexp(t, A1,
c1, t01, s1) +
gexp(t, A2, c2, t02, s2);
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)
572 fit = A * (1 -
exp(-(t - shift) / n)) *
exp(-(t - shift) /
t0);
577 double norm, mpv, sigma, corTerm;
582 corTerm = norm * TMath::Landau((t - shift), mpv, sigma);
588 double val = (1 -
frac) * fit + frac * corTerm;
const Shape & getShape(int shapeType) const
const Shape & heShape() const
static std::vector< double > normalizeShift(std::vector< double > nt, unsigned nbin, int shift)
HcalSubdetector subdet() const
get the subdetector
void computeSiPMShapeHO()
void setShapeBin(int i, float f)
const Shape & hoShape(bool sipm=false) const
const HcalRecoParam * getHcalRecoParam(const HcalGenericDetId &fId) const
void beginRun(edm::EventSetup const &es)
static double generatePhotonTime206(CLHEP::HepRandomEngine *engine)
constexpr uint32_t rawId() const
get the raw id
Geom::Theta< T > theta() const
static const int nBinsSiPM_
const Shape & shapeForReco(const HcalDetId &detId) const
static double analyticPulseShapeSiPMHE(double t)
double onePulse(double t, double A, double sigma, double theta, double m)
static std::vector< double > normalize(std::vector< double > nt, unsigned nbin)
const Shape & shape(const HcalDetId &detId) const
automatically figures out which shape to return
const HcalPulseShape & computeSiPMShapeHE206()
static std::vector< double > convolve(unsigned nbin, F1 f1, F2 f2)
static double Y11206(double t)
void computeSiPMShapeData2017()
const HcalPulseShape & computeSiPMShapeHE203()
void computeSiPMShapeData2018()
const HcalMCParam * getHcalMCParam(const HcalGenericDetId &fId) const
const HcalDbService * theDbService
static const double tmax[3]
const Shape & defaultShape(const HcalDetId &detId) const
in case of conditions problems
const Shape & hfShape() const
void computeHPDShape(float, float, float, float, float, float, float, float, Shape &)
static double generatePhotonTime(CLHEP::HepRandomEngine *engine, unsigned int signalShape)
double gexp(double t, double A, double c, double t0, double s)
unsigned int signalShape() const
const Shape & hbShape() const
static double Y11203(double t)
static unsigned int const shift
static double generatePhotonTime203(CLHEP::HepRandomEngine *engine)
T const * product() const
static double analyticPulseShapeSiPMHO(double t)