6 #include "CLHEP/Random/RandFlat.h" 40 float ts1, ts2, ts3, thpd, tpre, wd1, wd2, wd3;
43 ts1=8. ; ts2=10. ; ts3=29.3; thpd=4.0; tpre=9.0; wd1=2.0; wd2=0.7; wd3=1.0;
49 ts1=8. ; ts2=10. ; ts3=25.0; thpd=4.0; tpre=9.0; wd1=2.0; wd2=0.7; wd3=1.0;
53 ts1=8. ; ts2=10. ; ts3=29.3; thpd=4.0; tpre=7.0; wd1=2.0; wd2=0.7; wd3=1.0;
58 ts1=8. ; ts2=19. ; ts3=29.3; thpd=4.0; tpre=9.0; wd1=2.0; wd2=0.7; wd3=0.32;
62 ts1=8. ; ts2=10. ; ts3=22.3; thpd=4.0; tpre=7.0; wd1=2.0; wd2=0.7; wd3=1.0;
68 ts1=8. ; ts2=12. ; ts3=31.7; thpd=9.0; tpre=9.0; wd1=2.0; wd2=0.7; wd3=1.0;
72 ts1=8. ; ts2=12. ; ts3=31.7; thpd=9.0; tpre=9.0; wd1=2.0; wd2=0.7; wd3=1.0;
113 float wd1,
float wd2,
float wd3,
Shape &tmphpdShape_)
129 unsigned int nbin = 256;
131 std::vector<float> ntmp(nbin,0.0);
132 std::vector<float> nth(nbin,0.0);
133 std::vector<float> ntp(nbin,0.0);
134 std::vector<float> ntd(nbin,0.0);
141 for(j=0;j<thpd && j<nbin;j++){
142 nth[j] = 1.0 + ((
float)j)/thpd;
146 for(j=0;j<thpd && j<nbin;j++){
152 for(j=0;j<6*tpre && j<nbin;j++){
153 ntp[j] = ((
float)j)*
exp(-((
float)(j*j))/(tpre*tpre));
157 for(j=0;j<6*tpre && j<nbin;j++){
165 unsigned int tmax = 6 * (
int)ts3;
168 for(j=0;j<tmax && j<nbin;j++){
169 ntd[j] = wd1 *
exp(-((
float)j)/ts1) +
170 wd2 *
exp(-((
float)j)/ts2) +
171 wd3 *
exp(-((
float)j)/ts3) ;
175 for(j=0;j<tmax && j<nbin;j++){
179 unsigned int t1,t2,t3,t4;
180 for(i=0;i<tmax && i<nbin;i++){
185 for(j=0;j<thpd && j<nbin;j++){
187 for(k=0;k<4*tpre && k<nbin;k++){
191 ntmp[ntb] += ntd[
i]*nth[j]*ntp[
k];
203 for(i=0; i<nbin; i++){
207 for(i=0; i<nbin; i++){
214 unsigned int nbin = 256;
216 std::vector<float> ntmp(nbin,0.0);
218 const float k0=0.7956;
219 const float p2=1.355;
220 const float p4=2.327;
225 for(
unsigned int j = 0; j < 25 && j < nbin; ++j){
228 float sigma0 = (r0<0) ? p2 : p2*p4;
230 if(r0 < k0) ntmp[j] =
exp(-0.5*r0*r0);
231 else ntmp[j] =
exp(0.5*k0*k0-k0*r0);
235 for(
unsigned int j = 0; j < 25 && j < nbin; ++j){
248 unsigned int nbin = 250;
250 std::array<float, 250>
nt {{
251 5.22174e-12, 7.04852e-10, 3.49584e-08, 7.78029e-07, 9.11847e-06, 6.39666e-05, 0.000297587, 0.000996661, 0.00256618, 0.00535396,
252 0.00944073, 0.0145521, 0.020145, 0.0255936, 0.0303632, 0.0341078, 0.0366849, 0.0381183, 0.0385392, 0.0381327,
253 0.0370956, 0.0356113, 0.0338366, 0.0318978, 0.029891, 0.0278866, 0.0259336, 0.0240643, 0.0222981, 0.0206453,
254 0.0191097, 0.0176902, 0.0163832, 0.0151829, 0.0140826, 0.0130752, 0.0121533, 0.01131, 0.0105382, 0.00983178,
255 0.00918467, 0.00859143, 0.00804709, 0.0075471, 0.00708733, 0.00666406, 0.00627393, 0.00591389, 0.00558122, 0.00527344,
256 0.00498834, 0.00472392, 0.00447837, 0.00425007, 0.00403754, 0.00383947, 0.00365465, 0.00348199, 0.00332052, 0.00316934,
257 0.00302764, 0.0028947, 0.00276983, 0.00265242, 0.00254193, 0.00243785, 0.00233971, 0.00224709, 0.0021596, 0.00207687,
258 0.0019986, 0.00192447, 0.00185421, 0.00178756, 0.0017243, 0.00166419, 0.00160705, 0.00155268, 0.00150093, 0.00145162,
259 0.00140461, 0.00135976, 0.00131696, 0.00127607, 0.00123699, 0.00119962, 0.00116386, 0.00112963, 0.00109683, 0.0010654,
260 0.00103526, 0.00100634, 0.000978578, 0.000951917, 0.000926299, 0.000901672, 0.000877987, 0.000855198, 0.00083326, 0.000812133,
261 0.000791778, 0.000772159, 0.000753242, 0.000734994, 0.000717384, 0.000700385, 0.000683967, 0.000668107, 0.000652779, 0.00063796,
262 0.000623629, 0.000609764, 0.000596346, 0.000583356, 0.000570777, 0.000558592, 0.000546785, 0.00053534, 0.000524243, 0.000513481,
263 0.00050304, 0.000492907, 0.000483072, 0.000473523, 0.000464248, 0.000455238, 0.000446483, 0.000437974, 0.0004297, 0.000421655,
264 0.00041383, 0.000406216, 0.000398807, 0.000391595, 0.000384574, 0.000377736, 0.000371076, 0.000364588, 0.000358266, 0.000352104,
265 0.000346097, 0.00034024, 0.000334528, 0.000328956, 0.00032352, 0.000318216, 0.000313039, 0.000307986, 0.000303052, 0.000298234,
266 0.000293528, 0.000288931, 0.000284439, 0.00028005, 0.000275761, 0.000271567, 0.000267468, 0.000263459, 0.000259538, 0.000255703,
267 0.000251951, 0.00024828, 0.000244688, 0.000241172, 0.00023773, 0.000234361, 0.000231061, 0.00022783, 0.000224666, 0.000221566,
268 0.000218528, 0.000215553, 0.000212636, 0.000209778, 0.000206977, 0.00020423, 0.000201537, 0.000198896, 0.000196307, 0.000193767,
269 0.000191275, 0.000188831, 0.000186432, 0.000184079, 0.000181769, 0.000179502, 0.000177277, 0.000175092, 0.000172947, 0.000170841,
270 0.000168772, 0.000166741, 0.000164745, 0.000162785, 0.000160859, 0.000158967, 0.000157108, 0.00015528, 0.000153484, 0.000151719,
271 0.000149984, 0.000148278, 0.000146601, 0.000144951, 0.000143329, 0.000141734, 0.000140165, 0.000138622, 0.000137104, 0.00013561,
272 0.000134141, 0.000132695, 0.000131272, 0.000129871, 0.000128493, 0.000127136, 0.000125801, 0.000124486, 0.000123191, 0.000121917,
273 0.000120662, 0.000119426, 0.000118209, 0.00011701, 0.000115829, 0.000114665, 0.000113519, 0.00011239, 0.000111278, 0.000110182,
274 0.000109102, 0.000108037, 0.000106988, 0.000105954, 0.000104935, 0.00010393, 0.000102939, 0.000101963, 0.000101, 0.000100051,
275 9.91146e-05, 9.81915e-05, 9.7281e-05, 9.63831e-05, 9.54975e-05, 9.46239e-05, 9.37621e-05, 9.2912e-05, 9.20733e-05, 9.12458e-05
281 for (
unsigned int j = 0; j < nbin; ++j) {
282 norm += (
nt[j]>0) ?
nt[j] : 0.;
285 for (
unsigned int j = 0; j < nbin; ++j) {
299 unsigned int nbin = 250;
301 std::array<float, 250>
nt {{
302 3.97958e-29, 1.11634e-22, 9.96106e-18, 6.25334e-14, 5.08863e-11, 8.59141e-09, 4.32285e-07, 8.56617e-06, 8.28549e-05, 0.000461447,
303 0.00168052, 0.00441395, 0.00901637, 0.0151806, 0.0220314, 0.028528, 0.0338471, 0.0375578, 0.0395985, 0.0401567,
304 0.0395398, 0.0380776, 0.0360669, 0.0337474, 0.0312984, 0.0288457, 0.0264721, 0.0242276, 0.0221393, 0.0202181,
305 0.0184647, 0.0168731, 0.0154335, 0.0141346, 0.0129639, 0.0119094, 0.0109594, 0.0101031, 0.0093305, 0.00863267,
306 0.0080015, 0.00742977, 0.00691107, 0.00643969, 0.00601059, 0.00561931, 0.00526188, 0.00493483, 0.00463505, 0.00435981,
307 0.00410667, 0.00387348, 0.00365832, 0.00345949, 0.00327547, 0.0031049, 0.00294656, 0.00279938, 0.00266237, 0.00253467,
308 0.00241548, 0.0023041, 0.00219989, 0.00210227, 0.00201072, 0.00192476, 0.00184397, 0.00176795, 0.00169634, 0.00162884,
309 0.00156512, 0.00150494, 0.00144803, 0.00139418, 0.00134317, 0.00129481, 0.00124894, 0.00120537, 0.00116398, 0.00112461,
310 0.00108715, 0.00105147, 0.00101747, 0.000985042, 0.000954096, 0.000924545, 0.000896308, 0.000869311, 0.000843482, 0.000818758,
311 0.000795077, 0.000772383, 0.000750623, 0.000729747, 0.00070971, 0.000690466, 0.000671977, 0.000654204, 0.00063711, 0.000620663,
312 0.000604831, 0.000589584, 0.000574894, 0.000560735, 0.000547081, 0.00053391, 0.0005212, 0.000508929, 0.000497078, 0.000485628,
313 0.000474561, 0.000463862, 0.000453514, 0.000443501, 0.000433811, 0.000424429, 0.000415343, 0.00040654, 0.00039801, 0.000389741,
314 0.000381722, 0.000373944, 0.000366398, 0.000359074, 0.000351964, 0.00034506, 0.000338353, 0.000331838, 0.000325505, 0.00031935,
315 0.000313365, 0.000307544, 0.000301881, 0.000296371, 0.000291009, 0.000285788, 0.000280705, 0.000275755, 0.000270932, 0.000266233,
316 0.000261653, 0.00025719, 0.000252837, 0.000248593, 0.000244454, 0.000240416, 0.000236475, 0.00023263, 0.000228876, 0.000225212,
317 0.000221633, 0.000218138, 0.000214724, 0.000211389, 0.00020813, 0.000204945, 0.000201831, 0.000198787, 0.000195811, 0.0001929,
318 0.000190053, 0.000187268, 0.000184543, 0.000181876, 0.000179266, 0.000176711, 0.00017421, 0.000171761, 0.000169363, 0.000167014,
319 0.000164713, 0.000162459, 0.00016025, 0.000158086, 0.000155964, 0.000153885, 0.000151847, 0.000149848, 0.000147888, 0.000145966,
320 0.000144081, 0.000142232, 0.000140418, 0.000138638, 0.000136891, 0.000135177, 0.000133494, 0.000131843, 0.000130221, 0.00012863,
321 0.000127066, 0.000125531, 0.000124023, 0.000122543, 0.000121088, 0.000119658, 0.000118254, 0.000116874, 0.000115518, 0.000114185,
322 0.000112875, 0.000111587, 0.000110321, 0.000109076, 0.000107851, 0.000106648, 0.000105464, 0.000104299, 0.000103154, 0.000102027,
323 0.000100918, 9.98271e-05, 9.87537e-05, 9.76974e-05, 9.66578e-05, 9.56346e-05, 9.46274e-05, 9.3636e-05, 9.26599e-05, 9.16989e-05,
324 9.07526e-05, 8.98208e-05, 8.89032e-05, 8.79995e-05, 8.71093e-05, 8.62325e-05, 8.53688e-05, 8.45179e-05, 8.36796e-05, 8.28536e-05,
325 8.20397e-05, 8.12376e-05, 8.04471e-05, 7.96681e-05, 7.89002e-05, 7.81433e-05, 7.73972e-05, 7.66616e-05, 7.59364e-05, 7.52213e-05,
326 7.45163e-05, 7.3821e-05, 7.31354e-05, 7.24592e-05, 7.17923e-05, 7.11345e-05, 7.04856e-05, 6.98455e-05, 6.9214e-05, 6.8591e-05
333 for (
unsigned int j = 0; j < nbin; ++j) {
334 norm += (
nt[j]>0) ?
nt[j] : 0.;
337 for (
unsigned int j = 0; j < nbin; ++j) {
346 unsigned int nbin = 128;
349 std::array<float, 128>
nt {{
350 2.782980485851731e-6, 4.518134885954626e-5, 2.7689305197392056e-4, 9.18328418900969e-4, .002110072599166349, .003867856860331454, .006120046224897771, .008754774090536956,
351 0.0116469503358586, .01467007449455966, .01770489955229477, .02064621450689512, .02340678093764222, .02591874610854916, .02813325527435303, 0.0300189241965647,
352 .03155968107671164, .03275234052577155, .03360415306318798, .03413048377960748, .03435270899678218, .03429637464659661, .03398962975487166, .03346192884394954,
353 .03274298516247742, .03186195009136525, .03084679116113031, 0.0297238406141036, .02851748748929785, .02724998816332392, .02594137274487424, .02460942736731527,
354 .02326973510736116, .02193576080366117, 0.0206189674254987, .01932895378564653, 0.0180736052958666, .01685925112650875, 0.0156908225633535, .01457200857138456,
355 .01350540559602467, .01249265947824805, .01153459805300423, .01063135355597282, .009782474412011936, .008987026319784546, 0.00824368281357106, .007550805679909604,
356 .006906515742762193, .006308754629755056, .005755338185695127, .005244002229973356, .004772441359900532, .004338341490928299, .003939406800854143, 0.00357338171220501,
357 0.0032380685079891, .002931341133259233, .002651155690306086, .002395558090237333, .002162689279320922, .001950788415487319, .001758194329648101, .001583345567913682,
358 .001424779275191974, .001281129147671334, 0.00115112265163774, .001033577678808199, 9.273987838127585e-4, 8.315731274976846e-4, 7.451662302008696e-4, 6.673176219006913e-4,
359 5.972364609644049e-4, 5.341971801529036e-4, 4.775352065178378e-4, 4.266427928961177e-4, 3.8096498904225923e-4, 3.3999577417327287e-4, 3.032743659102713e-4, 2.703817158798329e-4,
360 2.4093719775272793e-4, 2.145954900503894e-4, 1.9104365317752797e-4, 1.6999839784346724e-4, 1.5120354022478893e-4, 1.3442763782650755e-4, 1.1946179895521507e-4, 1.0611765796993575e-4,
361 9.422550797617687e-5, 8.363258233342666e-5, 7.420147621931836e-5, 6.580869950304933e-5, 5.834335229919868e-5, 5.17059147771959e-5, 4.5807143072062634e-5, 4.0567063461299446e-5,
362 3.591405732740723e-5, 3.178402980354131e-5, 2.811965539165646e-5, 2.4869694240316126e-5, 2.1988373166730962e-5, 1.9434825899529382e-5, 1.717258740121378e-5, 1.5169137499243157e-5,
363 1.339548941011129e-5, 1.1825819079078403e-5, 1.0437131581057595e-5, 9.208961130078894e-6, 8.12310153137994e-6, 7.163364176588591e-6, 6.315360932244386e-6, 5.566309502463164e-6,
364 4.904859063429651e-6, 4.320934164082596e-6, 3.8055950719111903e-6, 3.350912911083174e-6, 2.9498580949517117e-6, 2.596200697612328e-6, 2.2844215378879293e-6, 2.0096328693141094e-6,
365 1.7675076766686654e-6, 1.5542166787225756e-6, 1.366372225473431e-6, 1.200978365778838e-6, 1.0553864128982371e-6, 9.272554464808518e-7, 8.145171945902259e-7, 7.153448381918271e-7
371 for (
unsigned int j = 0; j < nbin; ++j) {
372 norm += (
nt[j]>0) ?
nt[j] : 0.;
375 for (
unsigned int j = 0; j < nbin; ++j) {
385 return siPMShapeMC2017;
393 return siPMShapeMC2018;
399 ShapeMap::const_iterator shapeMapItr =
theShapes.find(shapeType);
404 return *(shapeMapItr->second);
417 ShapeMap::const_iterator shapeMapItr =
theShapes.find(shapeType);
421 return *(shapeMapItr->second);
433 ShapeMap::const_iterator shapeMapItr =
theShapes.find(shapeType);
437 return *(shapeMapItr->second);
465 inline double gexp(
double t,
double A,
double c,
double t0,
double s) {
466 static double const root2(
sqrt(2));
467 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);
471 return (t<theta) ? 0 : A*TMath::LogNormal(t,sigma,theta,m);
476 double A1(0.08757),
c1(-0.5257), t01(2.4013), s1(0.6721);
477 double A2(0.007598), c2(-0.1501), t02(6.9412),
s2(0.8710);
478 return gexp(t,A1,
c1,t01,s1) +
gexp(t,A2,c2,t02,s2);
483 double A1(5.204/6.94419), sigma1_shape(0.5387), theta1_loc(-0.3976), m1_scale(4.428);
484 double A2(1.855/6.94419), sigma2_shape(0.8132), theta2_loc(7.025), m2_scale(12.29);
486 onePulse(t,A1,sigma1_shape,theta1_loc,m1_scale) +
487 onePulse(t,A2,sigma2_shape,theta2_loc,m2_scale);
515 return exp(-0.0635-0.1518*t +
log(t)*2.528)/2485.9;
528 A=0.104204; n=0.44064; t0=10.0186;
529 if(t>shift) fit = A*(1-
exp(-(t-shift)/n))*
exp(-(t-shift)/
t0);
533 double norm,mpv,sigma,corTerm;
534 norm=0.0809882; mpv=0; sigma=20;
535 if(t>shift) corTerm = norm*TMath::Landau((t-shift),mpv,sigma);
540 double val = (1-
frac)*fit + frac*corTerm;
542 if(val >= 0)
return val;
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)