CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Private Types | Private Member Functions | Private Attributes
HcalPulseShapes Class Reference

#include <HcalPulseShapes.h>

Public Types

typedef HcalPulseShape Shape
 

Public Member Functions

void beginRun (edm::EventSetup const &es)
 
const ShapedefaultShape (const HcalDetId &detId) const
 in case of conditions problems More...
 
void endRun ()
 
const ShapegetShape (int shapeType) const
 
const ShapehbShape () const
 
 HcalPulseShapes ()
 
const ShapeheShape () const
 
const ShapehfShape () const
 
const ShapehoShape (bool sipm=false) const
 
const Shapeshape (const HcalDetId &detId) const
 automatically figures out which shape to return More...
 
const ShapeshapeForReco (const HcalDetId &detId) const
 
 ~HcalPulseShapes ()
 

Static Public Member Functions

static double analyticPulseShapeSiPMHE (double t)
 
static double analyticPulseShapeSiPMHO (double t)
 
template<class F1 , class F2 >
static std::vector< double > convolve (unsigned nbin, F1 f1, F2 f2)
 
static double generatePhotonTime (CLHEP::HepRandomEngine *engine)
 
static double Y11TimePDF (double t)
 

Static Public Attributes

static constexpr float deltaTSiPM_ = 0.5
 
static constexpr float invDeltaTSiPM_ = 2.0
 
static const int nBinsSiPM_ = 250
 
static constexpr float Y11MAX_ = 0.04
 
static constexpr float Y11RANGE_ = nBinsSiPM_
 

Private Types

typedef std::map< int, const Shape * > ShapeMap
 

Private Member Functions

void computeHFShape ()
 
void computeHPDShape (float, float, float, float, float, float, float, float, Shape &)
 
void computeSiPMShape ()
 
void computeSiPMShape2017 ()
 
void computeSiPMShapeData2017 ()
 

Private Attributes

Shape hfShape_
 
Shape hpdBV30Shape_v2
 
Shape hpdBV30ShapeMC_v2
 
Shape hpdShape_
 
Shape hpdShape_v2
 
Shape hpdShape_v3
 
Shape hpdShapeMC_v2
 
Shape hpdShapeMC_v3
 
Shape siPMShape2017_
 
Shape siPMShape_
 
Shape siPMShapeData2017_
 
HcalMCParamstheMCParams
 
HcalRecoParamstheRecoParams
 
ShapeMap theShapes
 
const HcalTopologytheTopology
 

Detailed Description

Author
J. Mans - Minnesota

Definition at line 23 of file HcalPulseShapes.h.

Member Typedef Documentation

Definition at line 25 of file HcalPulseShapes.h.

typedef std::map<int, const Shape *> HcalPulseShapes::ShapeMap
private

Definition at line 81 of file HcalPulseShapes.h.

Constructor & Destructor Documentation

HcalPulseShapes::HcalPulseShapes ( )

Definition at line 22 of file HcalPulseShapes.cc.

References computeHFShape(), computeHPDShape(), computeSiPMShape(), computeSiPMShape2017(), computeSiPMShapeData2017(), hfShape_, hpdBV30Shape_v2, hpdBV30ShapeMC_v2, hpdShape_, hpdShape_v2, hpdShape_v3, hpdShapeMC_v2, hpdShapeMC_v3, siPMShape2017_, siPMShape_, siPMShapeData2017_, and theShapes.

23 : theMCParams(nullptr),
24  theTopology(nullptr),
25  theRecoParams(nullptr),
26  theShapes()
27 {
28 /*
29 
30 Reco MC
31 --------------------------------------------------------------------------------------
32 000 not used (reserved)
33 101 101 hpdShape_ HPD (original version)
34 102 102 =101 HPD BV 30 volts in HBP iphi54
35 103 123 hpdShape_v2, hpdShapeMC_v2 HPD (2011. oct version)
36 104 124 hpdBV30Shape_v2, hpdBV30ShapeMC_v2 HPD bv30 in HBP iph54
37 105 125 hpdShape_v2, hpdShapeMC_v2 HPD (2011.11.12 version)
38 201 201 siPMShape_ SiPMs Zecotec shape (HO)
39 202 202 =201, SiPMs Hamamatsu shape (HO)
40 203 203 siPMShape2017_ SiPMs Hamamatsu shape (HE 2017)
41 205 205 siPMShapeData2017_ SiPMs from Data (HE data 2017)
42 301 301 hfShape_ regular HF PMT shape
43 401 401 regular ZDC shape
44 --------------------------------------------------------------------------------------
45 
46 */
47 
48 
49  float ts1, ts2, ts3, thpd, tpre, wd1, wd2, wd3;
50 
51  // HPD Shape Version 1 (used before CMSSW5, until Oct 2011)
52  ts1=8. ; ts2=10. ; ts3=29.3; thpd=4.0; tpre=9.0; wd1=2.0; wd2=0.7; wd3=1.0;
53  computeHPDShape(ts1,ts2,ts3,thpd,tpre,wd1,wd2,wd3, hpdShape_);
54  theShapes[101] = &hpdShape_;
55  theShapes[102] = theShapes[101];
56 
57  // HPD Shape Version 2 for CMSSW 5. Nov 2011 (RECO and MC separately)
58  ts1=8. ; ts2=10. ; ts3=25.0; thpd=4.0; tpre=9.0; wd1=2.0; wd2=0.7; wd3=1.0;
59  computeHPDShape(ts1,ts2,ts3,thpd,tpre,wd1,wd2,wd3, hpdShape_v2);
60  theShapes[103] = &hpdShape_v2;
61 
62  ts1=8. ; ts2=10. ; ts3=29.3; thpd=4.0; tpre=7.0; wd1=2.0; wd2=0.7; wd3=1.0;
63  computeHPDShape(ts1,ts2,ts3,thpd,tpre,wd1,wd2,wd3, hpdShapeMC_v2);
64  theShapes[123] = &hpdShapeMC_v2;
65 
66  // HPD Shape Version 3 for CMSSW 5. Nov 2011 (RECO and MC separately)
67  ts1=8. ; ts2=19. ; ts3=29.3; thpd=4.0; tpre=9.0; wd1=2.0; wd2=0.7; wd3=0.32;
68  computeHPDShape(ts1,ts2,ts3,thpd,tpre,wd1,wd2,wd3, hpdShape_v3);
69  theShapes[105] = &hpdShape_v3;
70 
71  ts1=8. ; ts2=10. ; ts3=22.3; thpd=4.0; tpre=7.0; wd1=2.0; wd2=0.7; wd3=1.0;
72  computeHPDShape(ts1,ts2,ts3,thpd,tpre,wd1,wd2,wd3, hpdShapeMC_v3);
73  theShapes[125] = &hpdShapeMC_v3;
74 
75  // HPD with Bias Voltage 30 volts, wider pulse. (HBPlus iphi54)
76 
77  ts1=8. ; ts2=12. ; ts3=31.7; thpd=9.0; tpre=9.0; wd1=2.0; wd2=0.7; wd3=1.0;
78  computeHPDShape(ts1,ts2,ts3,thpd,tpre,wd1,wd2,wd3, hpdBV30Shape_v2);
79  theShapes[104] = &hpdBV30Shape_v2;
80 
81  ts1=8. ; ts2=12. ; ts3=31.7; thpd=9.0; tpre=9.0; wd1=2.0; wd2=0.7; wd3=1.0;
82  computeHPDShape(ts1,ts2,ts3,thpd,tpre,wd1,wd2,wd3, hpdBV30ShapeMC_v2);
84 
85  // HF and SiPM
86 
91 
92  theShapes[201] = &siPMShape_;
93  theShapes[202] = theShapes[201];
94  theShapes[203] = &siPMShape2017_;
96  theShapes[301] = &hfShape_;
97  //theShapes[401] = new CaloCachedShapeIntegrator(&theZDCShape);
98 
99 }
HcalRecoParams * theRecoParams
void computeSiPMShapeData2017()
void computeHPDShape(float, float, float, float, float, float, float, float, Shape &)
const HcalTopology * theTopology
HcalMCParams * theMCParams
HcalPulseShapes::~HcalPulseShapes ( )

Definition at line 102 of file HcalPulseShapes.cc.

References theMCParams, theRecoParams, and theTopology.

102  {
103  if (theMCParams) delete theMCParams;
104  if (theRecoParams) delete theRecoParams;
105  if (theTopology) delete theTopology;
106 }
HcalRecoParams * theRecoParams
const HcalTopology * theTopology
HcalMCParams * theMCParams

Member Function Documentation

double HcalPulseShapes::analyticPulseShapeSiPMHE ( double  t)
static

Definition at line 800 of file HcalPulseShapes.cc.

References onePulse().

Referenced by HcalSiPMShape::computeShape(), and computeSiPMShape2017().

800  {
801  // taken from fit to laser measurement taken by Iouri M. in Spring 2016.
802  double A1(5.204/6.94419), sigma1_shape(0.5387), theta1_loc(-0.3976), m1_scale(4.428);
803  double A2(1.855/6.94419), sigma2_shape(0.8132), theta2_loc(7.025), m2_scale(12.29);
804  return
805  onePulse(t,A1,sigma1_shape,theta1_loc,m1_scale) +
806  onePulse(t,A2,sigma2_shape,theta2_loc,m2_scale);
807 }
double onePulse(double t, double A, double sigma, double theta, double m)
double HcalPulseShapes::analyticPulseShapeSiPMHO ( double  t)
static

Definition at line 793 of file HcalPulseShapes.cc.

References alignmentValidation::c1, gexp(), and indexGen::s2.

Referenced by HcalSiPMShape::computeShape().

793  {
794  // HO SiPM pulse shape fit from Jake Anderson ca. 2013
795  double A1(0.08757), c1(-0.5257), t01(2.4013), s1(0.6721);
796  double A2(0.007598), c2(-0.1501), t02(6.9412), s2(0.8710);
797  return gexp(t,A1,c1,t01,s1) + gexp(t,A2,c2,t02,s2);
798 }
double gexp(double t, double A, double c, double t0, double s)
void HcalPulseShapes::beginRun ( edm::EventSetup const &  es)

Definition at line 109 of file HcalPulseShapes.cc.

References edm::EventSetup::get(), AlCaHLTBitMon_ParallelJobs::p, edm::ESHandle< T >::product(), lumiQueryAPI::q, HcalCondObjectContainerBase::setTopo(), theMCParams, theRecoParams, and theTopology.

Referenced by HcalPulseContainmentManager::beginRun().

void HcalPulseShapes::computeHFShape ( )
private

Definition at line 241 of file HcalPulseShapes.cc.

References JetChargeProducer_cfi::exp, hfShape_, reco::ParticleMasses::k0, p1, p2, p4, HcalPulseShape::setNBin(), and HcalPulseShape::setShapeBin().

Referenced by HcalPulseShapes().

241  {
242  // first create pulse shape over a range of time 0 ns to 255 ns in 1 ns steps
243  unsigned int nbin = 256;
244  hfShape_.setNBin(nbin);
245  std::vector<float> ntmp(nbin,0.0); //
246 
247  const float k0=0.7956; // shape parameters
248  const float p2=1.355;
249  const float p4=2.327;
250  const float p1=4.3; // position parameter
251 
252  float norm = 0.0;
253 
254  for(unsigned int j = 0; j < 25 && j < nbin; ++j){
255 
256  float r0 = j-p1;
257  float sigma0 = (r0<0) ? p2 : p2*p4;
258  r0 /= sigma0;
259  if(r0 < k0) ntmp[j] = exp(-0.5*r0*r0);
260  else ntmp[j] = exp(0.5*k0*k0-k0*r0);
261  norm += ntmp[j];
262  }
263  // normalize pulse area to 1.0
264  for(unsigned int j = 0; j < 25 && j < nbin; ++j){
265  ntmp[j] /= norm;
266  hfShape_.setShapeBin(j,ntmp[j]);
267  }
268 }
void setNBin(int n)
void setShapeBin(int i, float f)
double p4[4]
Definition: TauolaWrapper.h:92
double p2[4]
Definition: TauolaWrapper.h:90
double p1[4]
Definition: TauolaWrapper.h:89
void HcalPulseShapes::computeHPDShape ( float  ts1,
float  ts2,
float  ts3,
float  thpd,
float  tpre,
float  wd1,
float  wd2,
float  wd3,
Shape tmphpdShape_ 
)
private

Definition at line 141 of file HcalPulseShapes.cc.

References JetChargeProducer_cfi::exp, objects.autophobj::float, mps_fire::i, createfilelist::int, gen::k, HcalPulseShape::setNBin(), HcalPulseShape::setShapeBin(), reco::t2, and tmax.

Referenced by HcalPulseShapes().

143 {
144 
145 // pulse shape time constants in ns
146 /*
147  const float ts1 = 8.; // scintillation time constants : 1,2,3
148  const float ts2 = 10.;
149  const float ts3 = 29.3;
150  const float thpd = 4.; // HPD current collection drift time
151  const float tpre = 9.; // preamp time constant (refit on TB04 data)
152 
153  const float wd1 = 2.; // relative weights of decay exponents
154  const float wd2 = 0.7;
155  const float wd3 = 1.;
156 */
157  // pulse shape components over a range of time 0 ns to 255 ns in 1 ns steps
158  unsigned int nbin = 256;
159  tmphpdShape_.setNBin(nbin);
160  std::vector<float> ntmp(nbin,0.0); // zeroing output pulse shape
161  std::vector<float> nth(nbin,0.0); // zeroing HPD drift shape
162  std::vector<float> ntp(nbin,0.0); // zeroing Binkley preamp shape
163  std::vector<float> ntd(nbin,0.0); // zeroing Scintillator decay shape
164 
165  unsigned int i,j,k;
166  float norm;
167 
168  // HPD starts at I and rises to 2I in thpd of time
169  norm=0.0;
170  for(j=0;j<thpd && j<nbin;j++){
171  nth[j] = 1.0 + ((float)j)/thpd;
172  norm += nth[j];
173  }
174  // normalize integrated current to 1.0
175  for(j=0;j<thpd && j<nbin;j++){
176  nth[j] /= norm;
177  }
178 
179  // Binkley shape over 6 time constants
180  norm=0.0;
181  for(j=0;j<6*tpre && j<nbin;j++){
182  ntp[j] = ((float)j)*exp(-((float)(j*j))/(tpre*tpre));
183  norm += ntp[j];
184  }
185  // normalize pulse area to 1.0
186  for(j=0;j<6*tpre && j<nbin;j++){
187  ntp[j] /= norm;
188  }
189 
190 // ignore stochastic variation of photoelectron emission
191 // <...>
192 
193 // effective tile plus wave-length shifter decay time over 4 time constants
194  unsigned int tmax = 6 * (int)ts3;
195 
196  norm=0.0;
197  for(j=0;j<tmax && j<nbin;j++){
198  ntd[j] = wd1 * exp(-((float)j)/ts1) +
199  wd2 * exp(-((float)j)/ts2) +
200  wd3 * exp(-((float)j)/ts3) ;
201  norm += ntd[j];
202  }
203  // normalize pulse area to 1.0
204  for(j=0;j<tmax && j<nbin;j++){
205  ntd[j] /= norm;
206  }
207 
208  unsigned int t1,t2,t3,t4;
209  for(i=0;i<tmax && i<nbin;i++){
210  t1 = i;
211  // t2 = t1 + top*rand;
212  // ignoring jitter from optical path length
213  t2 = t1;
214  for(j=0;j<thpd && j<nbin;j++){
215  t3 = t2 + j;
216  for(k=0;k<4*tpre && k<nbin;k++){ // here "4" is set deliberately,
217  t4 = t3 + k; // as in test fortran toy MC ...
218  if(t4<nbin){
219  unsigned int ntb=t4;
220  ntmp[ntb] += ntd[i]*nth[j]*ntp[k];
221  }
222  }
223  }
224  }
225 
226  // normalize for 1 GeV pulse height
227  norm = 0.;
228  for(i=0;i<nbin;i++){
229  norm += ntmp[i];
230  }
231 
232  for(i=0; i<nbin; i++){
233  ntmp[i] /= norm;
234  }
235 
236  for(i=0; i<nbin; i++){
237  tmphpdShape_.setShapeBin(i,ntmp[i]);
238  }
239 }
auto const T2 &decltype(t1.eta()) t2
Definition: deltaR.h:16
int k[5][pyjets_maxn]
static const double tmax[3]
void HcalPulseShapes::computeSiPMShape ( )
private

Definition at line 546 of file HcalPulseShapes.cc.

References nt, HcalPulseShape::setNBin(), HcalPulseShape::setShapeBin(), and siPMShape_.

Referenced by HcalPulseShapes().

547 {
548 
549  unsigned int nbin = 128;
550 
551 //From Jake Anderson: toy MC convolution of SiPM pulse + WLS fiber shape + SiPM nonlinear response
552  std::vector<float> nt = {
553  2.782980485851731e-6,
554  4.518134885954626e-5,
555  2.7689305197392056e-4,
556  9.18328418900969e-4,
557  .002110072599166349,
558  .003867856860331454,
559  .006120046224897771,
560  .008754774090536956,
561  0.0116469503358586,
562  .01467007449455966,
563  .01770489955229477,
564  .02064621450689512,
565  .02340678093764222,
566  .02591874610854916,
567  .02813325527435303,
568  0.0300189241965647,
569  .03155968107671164,
570  .03275234052577155,
571  .03360415306318798,
572  .03413048377960748,
573  .03435270899678218,
574  .03429637464659661,
575  .03398962975487166,
576  .03346192884394954,
577  .03274298516247742,
578  .03186195009136525,
579  .03084679116113031,
580  0.0297238406141036,
581  .02851748748929785,
582  .02724998816332392,
583  .02594137274487424,
584  .02460942736731527,
585  .02326973510736116,
586  .02193576080366117,
587  0.0206189674254987,
588  .01932895378564653,
589  0.0180736052958666,
590  .01685925112650875,
591  0.0156908225633535,
592  .01457200857138456,
593  .01350540559602467,
594  .01249265947824805,
595  .01153459805300423,
596  .01063135355597282,
597  .009782474412011936,
598  .008987026319784546,
599  0.00824368281357106,
600  .007550805679909604,
601  .006906515742762193,
602  .006308754629755056,
603  .005755338185695127,
604  .005244002229973356,
605  .004772441359900532,
606  .004338341490928299,
607  .003939406800854143,
608  0.00357338171220501,
609  0.0032380685079891,
610  .002931341133259233,
611  .002651155690306086,
612  .002395558090237333,
613  .002162689279320922,
614  .001950788415487319,
615  .001758194329648101,
616  .001583345567913682,
617  .001424779275191974,
618  .001281129147671334,
619  0.00115112265163774,
620  .001033577678808199,
621  9.273987838127585e-4,
622  8.315731274976846e-4,
623  7.451662302008696e-4,
624  6.673176219006913e-4,
625  5.972364609644049e-4,
626  5.341971801529036e-4,
627  4.775352065178378e-4,
628  4.266427928961177e-4,
629  3.8096498904225923e-4,
630  3.3999577417327287e-4,
631  3.032743659102713e-4,
632  2.703817158798329e-4,
633  2.4093719775272793e-4,
634  2.145954900503894e-4,
635  1.9104365317752797e-4,
636  1.6999839784346724e-4,
637  1.5120354022478893e-4,
638  1.3442763782650755e-4,
639  1.1946179895521507e-4,
640  1.0611765796993575e-4,
641  9.422550797617687e-5,
642  8.363258233342666e-5,
643  7.420147621931836e-5,
644  6.580869950304933e-5,
645  5.834335229919868e-5,
646  5.17059147771959e-5,
647  4.5807143072062634e-5,
648  4.0567063461299446e-5,
649  3.591405732740723e-5,
650  3.178402980354131e-5,
651  2.811965539165646e-5,
652  2.4869694240316126e-5,
653  2.1988373166730962e-5,
654  1.9434825899529382e-5,
655  1.717258740121378e-5,
656  1.5169137499243157e-5,
657  1.339548941011129e-5,
658  1.1825819079078403e-5,
659  1.0437131581057595e-5,
660  9.208961130078894e-6,
661  8.12310153137994e-6,
662  7.163364176588591e-6,
663  6.315360932244386e-6,
664  5.566309502463164e-6,
665  4.904859063429651e-6,
666  4.320934164082596e-6,
667  3.8055950719111903e-6,
668  3.350912911083174e-6,
669  2.9498580949517117e-6,
670  2.596200697612328e-6,
671  2.2844215378879293e-6,
672  2.0096328693141094e-6,
673  1.7675076766686654e-6,
674  1.5542166787225756e-6,
675  1.366372225473431e-6,
676  1.200978365778838e-6,
677  1.0553864128982371e-6,
678  9.272554464808518e-7,
679  8.145171945902259e-7,
680  7.153448381918271e-7
681  };
682 
683  siPMShape_.setNBin(nbin);
684 
685  double norm = 0.;
686  for (unsigned int j = 0; j < nbin; ++j) {
687  norm += (nt[j]>0) ? nt[j] : 0.;
688  }
689 
690  for (unsigned int j = 0; j < nbin; ++j) {
691  nt[j] /= norm;
692  siPMShape_.setShapeBin(j,nt[j]);
693  }
694 }
void setNBin(int n)
void setShapeBin(int i, float f)
int nt
Definition: AMPTWrapper.h:32
void HcalPulseShapes::computeSiPMShape2017 ( )
private

Definition at line 696 of file HcalPulseShapes.cc.

References analyticPulseShapeSiPMHE(), convolve(), nBinsSiPM_, nt, HcalPulseShape::setNBin(), HcalPulseShape::setShapeBin(), siPMShape2017_, and Y11TimePDF().

Referenced by HcalPulseShapes().

697 {
698  //numerical convolution of SiPM pulse + WLS fiber shape
700 
702 
703  //skip first bin, always 0
704  double norm = 0.;
705  for (unsigned int j = 1; j <= nBinsSiPM_; ++j) {
706  norm += (nt[j]>0) ? nt[j] : 0.;
707  }
708 
709  for (unsigned int j = 1; j <= nBinsSiPM_; ++j) {
710  nt[j] /= norm;
711  siPMShape2017_.setShapeBin(j,nt[j]);
712  }
713 }
void setNBin(int n)
void setShapeBin(int i, float f)
static const int nBinsSiPM_
static double analyticPulseShapeSiPMHE(double t)
static std::vector< double > convolve(unsigned nbin, F1 f1, F2 f2)
int nt
Definition: AMPTWrapper.h:32
static double Y11TimePDF(double t)
void HcalPulseShapes::computeSiPMShapeData2017 ( )
private

Definition at line 271 of file HcalPulseShapes.cc.

References nt, HcalPulseShape::setNBin(), HcalPulseShape::setShapeBin(), and siPMShapeData2017_.

Referenced by HcalPulseShapes().

272 {
273  //From Jay Lawhorn: derived from data Edward Laird phase scan may2017
274  //https://indico.cern.ch/event/641978/contributions/2604491/attachments/1468666/2271582/17-05-31-hcal-hep17-pulse-shape.pdf
275  //Run numbers are 294736-294740 and 294929-294950
276 
277  unsigned int nbin = 250;
278 
279  std::vector<float> nt = {
280  3.97958e-29,
281  1.11634e-22,
282  9.96106e-18,
283  6.25334e-14,
284  5.08863e-11,
285  8.59141e-09,
286  4.32285e-07,
287  8.56617e-06,
288  8.28549e-05,
289  0.000461447,
290  0.00168052,
291  0.00441395,
292  0.00901637,
293  0.0151806,
294  0.0220314,
295  0.028528,
296  0.0338471,
297  0.0375578,
298  0.0395985,
299  0.0401567,
300  0.0395398,
301  0.0380776,
302  0.0360669,
303  0.0337474,
304  0.0312984,
305  0.0288457,
306  0.0264721,
307  0.0242276,
308  0.0221393,
309  0.0202181,
310  0.0184647,
311  0.0168731,
312  0.0154335,
313  0.0141346,
314  0.0129639,
315  0.0119094,
316  0.0109594,
317  0.0101031,
318  0.0093305,
319  0.00863267,
320  0.0080015,
321  0.00742977,
322  0.00691107,
323  0.00643969,
324  0.00601059,
325  0.00561931,
326  0.00526188,
327  0.00493483,
328  0.00463505,
329  0.00435981,
330  0.00410667,
331  0.00387348,
332  0.00365832,
333  0.00345949,
334  0.00327547,
335  0.0031049,
336  0.00294656,
337  0.00279938,
338  0.00266237,
339  0.00253467,
340  0.00241548,
341  0.0023041,
342  0.00219989,
343  0.00210227,
344  0.00201072,
345  0.00192476,
346  0.00184397,
347  0.00176795,
348  0.00169634,
349  0.00162884,
350  0.00156512,
351  0.00150494,
352  0.00144803,
353  0.00139418,
354  0.00134317,
355  0.00129481,
356  0.00124894,
357  0.00120537,
358  0.00116398,
359  0.00112461,
360  0.00108715,
361  0.00105147,
362  0.00101747,
363  0.000985042,
364  0.000954096,
365  0.000924545,
366  0.000896308,
367  0.000869311,
368  0.000843482,
369  0.000818758,
370  0.000795077,
371  0.000772383,
372  0.000750623,
373  0.000729747,
374  0.00070971,
375  0.000690466,
376  0.000671977,
377  0.000654204,
378  0.00063711,
379  0.000620663,
380  0.000604831,
381  0.000589584,
382  0.000574894,
383  0.000560735,
384  0.000547081,
385  0.00053391,
386  0.0005212,
387  0.000508929,
388  0.000497078,
389  0.000485628,
390  0.000474561,
391  0.000463862,
392  0.000453514,
393  0.000443501,
394  0.000433811,
395  0.000424429,
396  0.000415343,
397  0.00040654,
398  0.00039801,
399  0.000389741,
400  0.000381722,
401  0.000373944,
402  0.000366398,
403  0.000359074,
404  0.000351964,
405  0.00034506,
406  0.000338353,
407  0.000331838,
408  0.000325505,
409  0.00031935,
410  0.000313365,
411  0.000307544,
412  0.000301881,
413  0.000296371,
414  0.000291009,
415  0.000285788,
416  0.000280705,
417  0.000275755,
418  0.000270932,
419  0.000266233,
420  0.000261653,
421  0.00025719,
422  0.000252837,
423  0.000248593,
424  0.000244454,
425  0.000240416,
426  0.000236475,
427  0.00023263,
428  0.000228876,
429  0.000225212,
430  0.000221633,
431  0.000218138,
432  0.000214724,
433  0.000211389,
434  0.00020813,
435  0.000204945,
436  0.000201831,
437  0.000198787,
438  0.000195811,
439  0.0001929,
440  0.000190053,
441  0.000187268,
442  0.000184543,
443  0.000181876,
444  0.000179266,
445  0.000176711,
446  0.00017421,
447  0.000171761,
448  0.000169363,
449  0.000167014,
450  0.000164713,
451  0.000162459,
452  0.00016025,
453  0.000158086,
454  0.000155964,
455  0.000153885,
456  0.000151847,
457  0.000149848,
458  0.000147888,
459  0.000145966,
460  0.000144081,
461  0.000142232,
462  0.000140418,
463  0.000138638,
464  0.000136891,
465  0.000135177,
466  0.000133494,
467  0.000131843,
468  0.000130221,
469  0.00012863,
470  0.000127066,
471  0.000125531,
472  0.000124023,
473  0.000122543,
474  0.000121088,
475  0.000119658,
476  0.000118254,
477  0.000116874,
478  0.000115518,
479  0.000114185,
480  0.000112875,
481  0.000111587,
482  0.000110321,
483  0.000109076,
484  0.000107851,
485  0.000106648,
486  0.000105464,
487  0.000104299,
488  0.000103154,
489  0.000102027,
490  0.000100918,
491  9.98271e-05,
492  9.87537e-05,
493  9.76974e-05,
494  9.66578e-05,
495  9.56346e-05,
496  9.46274e-05,
497  9.3636e-05,
498  9.26599e-05,
499  9.16989e-05,
500  9.07526e-05,
501  8.98208e-05,
502  8.89032e-05,
503  8.79995e-05,
504  8.71093e-05,
505  8.62325e-05,
506  8.53688e-05,
507  8.45179e-05,
508  8.36796e-05,
509  8.28536e-05,
510  8.20397e-05,
511  8.12376e-05,
512  8.04471e-05,
513  7.96681e-05,
514  7.89002e-05,
515  7.81433e-05,
516  7.73972e-05,
517  7.66616e-05,
518  7.59364e-05,
519  7.52213e-05,
520  7.45163e-05,
521  7.3821e-05,
522  7.31354e-05,
523  7.24592e-05,
524  7.17923e-05,
525  7.11345e-05,
526  7.04856e-05,
527  6.98455e-05,
528  6.9214e-05,
529  6.8591e-05
530  };
531 
532 
534 
535  double norm = 0.;
536  for (unsigned int j = 0; j < nbin; ++j) {
537  norm += (nt[j]>0) ? nt[j] : 0.;
538  }
539 
540  for (unsigned int j = 0; j < nbin; ++j) {
541  nt[j] /= norm;
543  }
544 }
void setNBin(int n)
void setShapeBin(int i, float f)
int nt
Definition: AMPTWrapper.h:32
template<class F1 , class F2 >
static std::vector<double> HcalPulseShapes::convolve ( unsigned  nbin,
F1  f1,
F2  f2 
)
inlinestatic

Definition at line 55 of file HcalPulseShapes.h.

References connectstrParser::f1, connectstrParser::f2, mps_fire::i, edm::detail::isnan(), min(), or, mps_fire::result, and tmp.

Referenced by computeSiPMShape2017().

55  {
56  std::vector<double> result(2*nbin-1,0.);
57  for(unsigned i = 0; i < 2*nbin-1; ++i){
58  for(unsigned j = 0; j < std::min(i+1,nbin); ++j){
59  double tmp = f1(j)*f2(i-j);
60  if(std::isnan(tmp) or std::isinf(tmp)) continue;
61  result[i] += tmp;
62  }
63  }
64  return result;
65  }
bool isnan(float x)
Definition: math.h:13
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
T min(T a, T b)
Definition: MathUtil.h:58
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
const HcalPulseShapes::Shape & HcalPulseShapes::defaultShape ( const HcalDetId detId) const

in case of conditions problems

Definition at line 762 of file HcalPulseShapes.cc.

References Exception, hbShape(), HcalBarrel, HcalEndcap, HcalForward, HcalOuter, heShape(), hfShape(), hoShape(), and HcalDetId::subdet().

Referenced by shape(), and shapeForReco().

763 {
764  edm::LogWarning("HcalPulseShapes") << "Cannot find HCAL MC Params ";
765  HcalSubdetector subdet = detId.subdet();
766  switch(subdet) {
767  case HcalBarrel:
768  return hbShape();
769  case HcalEndcap:
770  return heShape();
771  case HcalForward:
772  return hfShape();
773  case HcalOuter:
774  //FIXME doesn't look for SiPMs
775  return hoShape(false);
776  default:
777  throw cms::Exception("HcalPulseShapes") << "unknown detId";
778  break;
779  }
780 }
const Shape & heShape() const
HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:49
const Shape & hoShape(bool sipm=false) const
HcalSubdetector
Definition: HcalAssistant.h:31
const Shape & hfShape() const
const Shape & hbShape() const
void HcalPulseShapes::endRun ( )

Definition at line 127 of file HcalPulseShapes.cc.

References theMCParams, theRecoParams, and theTopology.

Referenced by HcalPulseContainmentManager::endRun().

128 {
129  if (theMCParams) delete theMCParams;
130  if (theRecoParams) delete theRecoParams;
131  if (theTopology) delete theTopology;
132 
133 
134  theMCParams = nullptr;
135  theRecoParams = nullptr;
136  theTopology = nullptr;
137 }
HcalRecoParams * theRecoParams
const HcalTopology * theTopology
HcalMCParams * theMCParams
double HcalPulseShapes::generatePhotonTime ( CLHEP::HepRandomEngine *  engine)
static

Definition at line 809 of file HcalPulseShapes.cc.

References mps_fire::result, Y11MAX_, Y11RANGE_, and Y11TimePDF().

Referenced by HcalSiPMHitResponse::add().

809  {
810  double result(0.);
811  while (true) {
812  result = CLHEP::RandFlat::shoot(engine, HcalPulseShapes::Y11RANGE_);
813  if (CLHEP::RandFlat::shoot(engine, HcalPulseShapes::Y11MAX_) < HcalPulseShapes::Y11TimePDF(result))
814  return result;
815  }
816 }
static constexpr float Y11MAX_
static constexpr float Y11RANGE_
static double Y11TimePDF(double t)
const HcalPulseShapes::Shape & HcalPulseShapes::getShape ( int  shapeType) const

Definition at line 716 of file HcalPulseShapes.cc.

References Exception, hpdShape_, and theShapes.

Referenced by SimpleHBHEPhase1Algo::reconstruct(), HcalSimpleRecAlgo::setForData(), and HcalShape::setShape().

717 {
718  ShapeMap::const_iterator shapeMapItr = theShapes.find(shapeType);
719  if(shapeMapItr == theShapes.end()) {
720  throw cms::Exception("HcalPulseShapes") << "unknown shapeType";
721  return hpdShape_; // should not return this, but...
722  } else {
723  return *(shapeMapItr->second);
724  }
725 }
const Shape& HcalPulseShapes::hbShape ( ) const
inline

Definition at line 32 of file HcalPulseShapes.h.

Referenced by defaultShape(), and HBHEPulseShapeFlagSetter::Initialize().

32 { return hpdShape_; }
const Shape& HcalPulseShapes::heShape ( ) const
inline

Definition at line 33 of file HcalPulseShapes.h.

Referenced by defaultShape().

33 { return hpdShape_; }
const Shape& HcalPulseShapes::hfShape ( ) const
inline

Definition at line 34 of file HcalPulseShapes.h.

Referenced by defaultShape().

34 { return hfShape_; }
const Shape& HcalPulseShapes::hoShape ( bool  sipm = false) const
inline

Definition at line 35 of file HcalPulseShapes.h.

References fireworks::getShape().

Referenced by defaultShape().

35 { return sipm ? siPMShape_ : hpdShape_; }
const HcalPulseShapes::Shape & HcalPulseShapes::shape ( const HcalDetId detId) const

automatically figures out which shape to return

Definition at line 729 of file HcalPulseShapes.cc.

References defaultShape(), HcalCondObjectContainer< Item >::getValues(), HcalMCParam::signalShape(), theMCParams, and theShapes.

730 {
731  if(!theMCParams) {
732  return defaultShape(detId);
733  }
734  int shapeType = theMCParams->getValues(detId)->signalShape();
735 
736  ShapeMap::const_iterator shapeMapItr = theShapes.find(shapeType);
737  if(shapeMapItr == theShapes.end()) {
738  return defaultShape(detId);
739  } else {
740  return *(shapeMapItr->second);
741  }
742 }
const Item * getValues(DetId fId, bool throwOnFail=true) const
const Shape & defaultShape(const HcalDetId &detId) const
in case of conditions problems
HcalMCParams * theMCParams
unsigned int signalShape() const
Definition: HcalMCParam.h:40
const HcalPulseShapes::Shape & HcalPulseShapes::shapeForReco ( const HcalDetId detId) const

Definition at line 745 of file HcalPulseShapes.cc.

References defaultShape(), HcalCondObjectContainer< Item >::getValues(), DetId::rawId(), theRecoParams, and theShapes.

Referenced by HcalPulseContainmentManager::get().

746 {
747  if(!theRecoParams) {
748  return defaultShape(detId);
749  }
750  int shapeType = theRecoParams->getValues(detId.rawId())->pulseShapeID();
751 
752  ShapeMap::const_iterator shapeMapItr = theShapes.find(shapeType);
753  if(shapeMapItr == theShapes.end()) {
754  return defaultShape(detId);
755  } else {
756  return *(shapeMapItr->second);
757  }
758 }
const Item * getValues(DetId fId, bool throwOnFail=true) const
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
HcalRecoParams * theRecoParams
const Shape & defaultShape(const HcalDetId &detId) const
in case of conditions problems
double HcalPulseShapes::Y11TimePDF ( double  t)
static

Definition at line 818 of file HcalPulseShapes.cc.

References JetChargeProducer_cfi::exp, and funct::pow().

Referenced by computeSiPMShape2017(), and generatePhotonTime().

818  {
819  return exp(-0.0635-0.1518*t)*pow(t, 2.528)/2485.9;
820 }
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40

Member Data Documentation

constexpr float HcalPulseShapes::deltaTSiPM_ = 0.5
static

Definition at line 45 of file HcalPulseShapes.h.

Referenced by HcalSiPMShape::computeShape().

Shape HcalPulseShapes::hfShape_
private

Definition at line 74 of file HcalPulseShapes.h.

Referenced by computeHFShape(), and HcalPulseShapes().

Shape HcalPulseShapes::hpdBV30Shape_v2
private

Definition at line 77 of file HcalPulseShapes.h.

Referenced by HcalPulseShapes().

Shape HcalPulseShapes::hpdBV30ShapeMC_v2
private

Definition at line 77 of file HcalPulseShapes.h.

Referenced by HcalPulseShapes().

Shape HcalPulseShapes::hpdShape_
private

Definition at line 74 of file HcalPulseShapes.h.

Referenced by getShape(), and HcalPulseShapes().

Shape HcalPulseShapes::hpdShape_v2
private

Definition at line 75 of file HcalPulseShapes.h.

Referenced by HcalPulseShapes().

Shape HcalPulseShapes::hpdShape_v3
private

Definition at line 76 of file HcalPulseShapes.h.

Referenced by HcalPulseShapes().

Shape HcalPulseShapes::hpdShapeMC_v2
private

Definition at line 75 of file HcalPulseShapes.h.

Referenced by HcalPulseShapes().

Shape HcalPulseShapes::hpdShapeMC_v3
private

Definition at line 76 of file HcalPulseShapes.h.

Referenced by HcalPulseShapes().

constexpr float HcalPulseShapes::invDeltaTSiPM_ = 2.0
static
const int HcalPulseShapes::nBinsSiPM_ = 250
static

Definition at line 44 of file HcalPulseShapes.h.

Referenced by computeSiPMShape2017().

Shape HcalPulseShapes::siPMShape2017_
private

Definition at line 74 of file HcalPulseShapes.h.

Referenced by computeSiPMShape2017(), and HcalPulseShapes().

Shape HcalPulseShapes::siPMShape_
private

Definition at line 74 of file HcalPulseShapes.h.

Referenced by computeSiPMShape(), and HcalPulseShapes().

Shape HcalPulseShapes::siPMShapeData2017_
private

Definition at line 74 of file HcalPulseShapes.h.

Referenced by computeSiPMShapeData2017(), and HcalPulseShapes().

HcalMCParams* HcalPulseShapes::theMCParams
private

Definition at line 78 of file HcalPulseShapes.h.

Referenced by beginRun(), endRun(), shape(), and ~HcalPulseShapes().

HcalRecoParams* HcalPulseShapes::theRecoParams
private

Definition at line 80 of file HcalPulseShapes.h.

Referenced by beginRun(), endRun(), shapeForReco(), and ~HcalPulseShapes().

ShapeMap HcalPulseShapes::theShapes
private

Definition at line 82 of file HcalPulseShapes.h.

Referenced by getShape(), HcalPulseShapes(), shape(), and shapeForReco().

const HcalTopology* HcalPulseShapes::theTopology
private

Definition at line 79 of file HcalPulseShapes.h.

Referenced by beginRun(), endRun(), and ~HcalPulseShapes().

constexpr float HcalPulseShapes::Y11MAX_ = 0.04
static

Definition at line 50 of file HcalPulseShapes.h.

Referenced by generatePhotonTime().

constexpr float HcalPulseShapes::Y11RANGE_ = nBinsSiPM_
static

Definition at line 49 of file HcalPulseShapes.h.

Referenced by generatePhotonTime().