CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HCALResponse.cc
Go to the documentation of this file.
1 //updated by Reza Goldouzian
2 //FastSimulation headers
6 
7 // CMSSW Headers
10 
11 #include <iostream>
12 #include <vector>
13 #include <string>
14 #include <math.h>
15 
16 using namespace edm;
17 
19  //switches
20  debug = pset.getParameter<bool>("debug");
21  usemip = pset.getParameter<bool>("usemip");
22 
23 //values for "old" response parameterizations
24 //--------------------------------------------------------------------
25  RespPar[HCAL][0][0] = pset.getParameter<double>("HadronBarrelResolution_Stochastic");
26  RespPar[HCAL][0][1] = pset.getParameter<double>("HadronBarrelResolution_Constant");
27  RespPar[HCAL][0][2] = pset.getParameter<double>("HadronBarrelResolution_Noise");
28 
29  RespPar[HCAL][1][0] = pset.getParameter<double>("HadronEndcapResolution_Stochastic");
30  RespPar[HCAL][1][1] = pset.getParameter<double>("HadronEndcapResolution_Constant");
31  RespPar[HCAL][1][2] = pset.getParameter<double>("HadronEndcapResolution_Noise");
32 
33  RespPar[VFCAL][0][0] = pset.getParameter<double>("HadronForwardResolution_Stochastic");
34  RespPar[VFCAL][0][1] = pset.getParameter<double>("HadronForwardResolution_Constant");
35  RespPar[VFCAL][0][2] = pset.getParameter<double>("HadronForwardResolution_Noise");
36 
37  RespPar[VFCAL][1][0] = pset.getParameter<double>("ElectronForwardResolution_Stochastic");
38  RespPar[VFCAL][1][1] = pset.getParameter<double>("ElectronForwardResolution_Constant");
39  RespPar[VFCAL][1][2] = pset.getParameter<double>("ElectronForwardResolution_Noise");
40 
41  eResponseScale[0] = pset.getParameter<double>("eResponseScaleHB");
42  eResponseScale[1] = pset.getParameter<double>("eResponseScaleHE");
43  eResponseScale[2] = pset.getParameter<double>("eResponseScaleHF");
44 
45  eResponsePlateau[0] = pset.getParameter<double>("eResponsePlateauHB");
46  eResponsePlateau[1] = pset.getParameter<double>("eResponsePlateauHE");
47  eResponsePlateau[2] = pset.getParameter<double>("eResponsePlateauHF");
48 
49  eResponseExponent = pset.getParameter<double>("eResponseExponent");
50  eResponseCoefficient = pset.getParameter<double>("eResponseCoefficient");
51 
52 //pion parameters
53 //--------------------------------------------------------------------
54  //energy values
55  maxHDe[0] = pset.getParameter<int>("maxHBe");
56  maxHDe[1] = pset.getParameter<int>("maxHEe");
57  maxHDe[2] = pset.getParameter<int>("maxHFe");
58  maxHDe[3] = pset.getParameter<int>("maxHFlowe");
59 
60  eGridHD[0] = pset.getParameter<vec1>("eGridHB");
61  eGridHD[1] = pset.getParameter<vec1>("eGridHE");
62  eGridHD[2] = pset.getParameter<vec1>("eGridHF");
63  eGridHD[3] = pset.getParameter<vec1>("loweGridHF");
64 
65  //region eta indices calculated from eta values
66  etaStep = pset.getParameter<double>("etaStep");
67  //eta boundaries
68  HDeta[0] = abs((int)(pset.getParameter<double>("HBeta") / etaStep));
69  HDeta[1] = abs((int)(pset.getParameter<double>("HEeta") / etaStep));
70  HDeta[2] = abs((int)(pset.getParameter<double>("HFeta") / etaStep));
71  HDeta[3] = abs((int)(pset.getParameter<double>("maxHDeta") / etaStep)); //add 1 because this is the max index
72  //eta ranges
73  maxHDetas[0] = HDeta[1] - HDeta[0];
74  maxHDetas[1] = HDeta[2] - HDeta[1];
75  maxHDetas[2] = HDeta[3] - HDeta[2];
76 
77  //parameter info
78  nPar = pset.getParameter<int>("nPar");
79  parNames = pset.getParameter<std::vector<std::string> >("parNames");
80  std::string detNames[] = {"_HB","_HE","_HF"};
81  std::string mipNames[] = {"_mip","_nomip",""};
82  std::string fraction="f";
83  //setup parameters (5D vector)
84  parameters = vec5(nPar,vec4(3,vec3(3)));
85  for(int p = 0; p < nPar; p++){ //loop over parameters
86  for(int m = 0; m < 3; m++){ //loop over mip, nomip, total
87  for(int d = 0; d < 3; d++){ //loop over dets: HB, HE, HF
88  //get from python
89  std::string pname = parNames[p] + detNames[d] + mipNames[m];
90  vec1 tmp = pset.getParameter<vec1>(pname);
91 
92  //resize vector for energy range of det d
93  parameters[p][m][d].resize(maxHDe[d]);
94 
95  for(int i = 0; i < maxHDe[d]; i++){ //loop over energy for det d
96  //resize vector for eta range of det d
97  parameters[p][m][d][i].resize(maxHDetas[d]);
98 
99  for(int j = 0; j < maxHDetas[d]; j++){ //loop over eta for det d
100  //fill in parameters vector from python
101  parameters[p][m][d][i][j] = tmp[i*maxHDetas[d] + j];
102  }
103  }
104  }
105  }
106  }
107 //set up Poisson parameters for low energy Hadrons in HF
108 //----------------------------------------------------------------------
109  PoissonParameters= vec3(4);
110  std::string PoissonParName[] = {"mean_overall","shift_overall","mean_between","shift_between"};
111  for(int d = 0; d < 4; d++){ //loop over Poisson parameteres
112  vec1 tmp1 = pset.getParameter<vec1>(PoissonParName[d]);
113  for(int i = 0; i < maxHDe[3]; i++){ //loop over energy for low HF energy points
114  PoissonParameters[d].resize(maxHDe[3]);
115  for(int j = 0; j < maxHDetas[2]; j++){ //loop over HF eta points
116  PoissonParameters[d][i].resize(maxHDetas[2]);
117  PoissonParameters[d][i][j]= tmp1[i*maxHDetas[2] + j];
118  }
119  }
120  }
121 
122 
123 //MIP fraction fill in 3d vector
125  mipfraction = vec3(3);
126  for(int d = 0; d < 3; d++){ //loop over dets: HB, HE, HF
127  //get from python
128  std::string mipname = fraction + mipNames[0] + detNames[d] ;
129  vec1 tmp1 = pset.getParameter<vec1>(mipname);
130  mipfraction[d].resize(maxHDe[d]);
131  for(int i = 0; i < maxHDe[d]; i++){ //loop over energy for det d
132  //resize vector for eta range of det d
133  mipfraction[d][i].resize(maxHDetas[d]);
134  for(int j = 0; j < maxHDetas[d]; j++){ //loop over eta for det d
135  //fill in parameters vector from python
136  mipfraction[d][i][j]= tmp1[i*maxHDetas[d] + j];
137  }
138  }
139  }
140 
141 // MUON probability histos for bin size = 0.25 GeV (0-10 GeV, 40 bins)
142 //--------------------------------------------------------------------
143  muStep = pset.getParameter<double>("muStep");
144  maxMUe = pset.getParameter<int>("maxMUe");
145  maxMUeta = pset.getParameter<int>("maxMUeta");
146  maxMUbin = pset.getParameter<int>("maxMUbin");
147  eGridMU = pset.getParameter<vec1>("eGridMU");
148  etaGridMU = pset.getParameter<vec1>("etaGridMU");
149  vec1 _responseMU[2] = {pset.getParameter<vec1>("responseMUBarrel"),pset.getParameter<vec1>("responseMUEndcap")};
150 
151  //get muon region eta indices from the eta grid
152  double _barrelMUeta = pset.getParameter<double>("barrelMUeta");
153  double _endcapMUeta = pset.getParameter<double>("endcapMUeta");
154  barrelMUeta = endcapMUeta = maxMUeta;
155  for(int i = 0; i < maxMUeta; i++) {
156  if(fabs(_barrelMUeta) <= etaGridMU[i]) { barrelMUeta = i; break; }
157  }
158  for(int i = 0; i < maxMUeta; i++) {
159  if(fabs(_endcapMUeta) <= etaGridMU[i]) { endcapMUeta = i; break; }
160  }
161  int maxMUetas[] = {endcapMUeta - barrelMUeta, maxMUeta - endcapMUeta};
162 
163  //initialize 3D vector
164  responseMU = vec3(maxMUe,vec2(maxMUeta,vec1(maxMUbin,0)));
165 
166  //fill in 3D vector
167  //(complementary cumulative distribution functions, from normalized response distributions)
168  int loc, eta_loc;
169  loc = eta_loc = -1;
170  for(int i = 0; i < maxMUe; i++){
171  for(int j = 0; j < maxMUeta; j++){
172  //check location - barrel, endcap, or forward
173  if(j==barrelMUeta) {loc = 0; eta_loc = barrelMUeta;}
174  else if(j==endcapMUeta) {loc = 1; eta_loc = endcapMUeta;}
175 
176  for(int k = 0; k < maxMUbin; k++){
177  responseMU[i][j][k] = _responseMU[loc][i*maxMUetas[loc]*maxMUbin + (j-eta_loc)*maxMUbin + k];
178 
179  if(debug) {
180  //cout.width(6);
181  LogInfo("FastCalorimetry") << " responseMU " << i << " " << j << " " << k << " = "
182  << responseMU[i][j][k] << std::endl;
183  }
184  }
185  }
186  }
187 
188 // values for EM response in HF
189 //--------------------------------------------------------------------
190  maxEMe = pset.getParameter<int>("maxEMe");
191  maxEMeta = maxHDetas[2];
192  respFactorEM = pset.getParameter<double>("respFactorEM");
193  eGridEM = pset.getParameter<vec1>("eGridEM");
194 
195  // e-gamma mean response and sigma in HF
196  vec1 _meanEM = pset.getParameter<vec1>("meanEM");
197  vec1 _sigmaEM = pset.getParameter<vec1>("sigmaEM");
198 
199  //fill in 2D vectors (w/ correction factor applied)
200  meanEM = vec2(maxEMe,vec1(maxEMeta,0));
201  sigmaEM = vec2(maxEMe,vec1(maxEMeta,0));
202  for(int i = 0; i < maxEMe; i++){
203  for(int j = 0; j < maxEMeta; j++){
204  meanEM[i][j] = respFactorEM * _meanEM[i*maxEMeta + j];
205  sigmaEM[i][j] = respFactorEM * _sigmaEM[i*maxEMeta + j];
206  }
207  }
208 
209 }
210 
211 double HCALResponse::getMIPfraction(double energy, double eta){
212  int ieta = abs((int)(eta / etaStep)) ;
213  int ie = -1;
214  //check eta and det
215  int det = getDet(ieta);
216  int deta = ieta - HDeta[det];
217  if(deta >= maxHDetas[det]) deta = maxHDetas[det] - 1;
218  else if(deta < 0 ) deta = 0;
219  //find energy range
220  for (int i = 0; i < maxHDe[det]; i++) {
221  if(energy < eGridHD[det][i]) {
222  if(i == 0) return mipfraction [det][0][deta]; // less than minimal - the first value is used instead of extrapolating
223  else ie = i-1;
224  break;
225  }
226  }
227  if(ie == -1) return mipfraction [det][maxHDe[det]-1][deta]; // more than maximal - the last value is used instead of extrapolating
228  double y1, y2;
229  double x1 = eGridHD[det][ie];
230  double x2 = eGridHD[det][ie+1];
231  y1=mipfraction[det][ie][deta];
232  y2=mipfraction[det][ie+1][deta];
233  double mean = 0;
234  mean=(y1*(x2-energy) + y2*(energy-x1))/(x2-x1);
235  return mean;
236  }
237 
238 double HCALResponse::responseHCAL(int _mip, double energy, double eta, int partype, RandomEngineAndDistribution const* random) {
239 
240 
241  int ieta = abs((int)(eta / etaStep)) ;
242  int ie = -1;
243 
244  int mip;
245  if(usemip) mip = _mip;
246  else mip = 2; //ignore mip, use only overall (mip + nomip) parameters
247 
248  double mean = 0;
249 
250  // e/gamma in HF
251  if(partype == 0) {
252  //check eta
253  ieta -= HDeta[2]; // HF starts at ieta=30 till ieta=51
254  // but resp.vector from index=0 through 20
255  if(ieta >= maxEMeta ) ieta = maxEMeta-1;
256  else if(ieta < 0) ieta = 0;
257 
258  //find energy range
259  for (int i = 0; i < maxEMe; i++) {
260  if(energy < eGridEM[i]) {
261  if(i == 0) ie = 0; // less than minimal - back extrapolation with the 1st interval
262  else ie = i-1;
263  break;
264  }
265  }
266  if(ie == -1) ie = maxEMe - 2; // more than maximum - extrapolation with last interval
267 
268  //do smearing
269  mean = interEM(energy, ie, ieta, random);
270  }
271 
272  // hadrons
273  else if(partype == 1) {
274  //check eta and det
275  int det = getDet(ieta);
276  int deta = ieta - HDeta[det];
277  if(deta >= maxHDetas[det]) deta = maxHDetas[det] - 1;
278  else if(deta < 0 ) deta = 0;
279 
280  //find energy range
281  for (int i = 0; i < maxHDe[det]; i++) {
282  if(energy < eGridHD[det][i]) {
283  if(i == 0) ie = 0; // less than minimal - back extrapolation with the 1st interval
284  else ie = i-1;
285  break;
286  }
287  }
288  if(ie == -1) ie = maxHDe[det] - 2; // more than maximum - extrapolation with last interval
289 
290 //different energy smearing for low energy hadrons in HF
291  if(det==2 && energy <20 && deta>5){
292  for (int i = 0; i < maxHDe[3]; i++) {
293  if(energy < eGridHD[3][i]) {
294  if(i == 0) ie = 0; // less than minimal - back extrapolation with the 1st interval
295  else ie = i-1;
296  break;
297  }
298  }
299  }
300  //do smearing
301  mean = interHD(mip, energy, ie, deta, det, random);
302  }
303 
304 
305  // muons
306  else if(partype == 2) {
307  //check eta
308  ieta = maxMUeta;
309  for(int i = 0; i < maxMUeta; i++) {
310  if(fabs(eta) < etaGridMU[i]) {
311  ieta = i;
312  break;
313  }
314  }
315  if(ieta < 0) ieta = 0;
316 
317  if(ieta < maxMUeta) { // HB-HE
318  //find energy range
319  for (int i = 0; i < maxMUe; i++) {
320  if(energy < eGridMU[i]) {
321  if(i == 0) ie = 0; // less than minimal - back extrapolation with the 1st interval
322  else ie = i-1;
323  break;
324  }
325  }
326  if(ie == -1) ie = maxMUe - 2; // more than maximum - extrapolation with last interval
327 
328  //do smearing
329  mean = interMU(energy, ie, ieta, random);
330  if(mean > energy) mean = energy;
331  }
332  }
333 
334  // debugging
335  if(debug) {
336  // cout.width(6);
337  LogInfo("FastCalorimetry") << std::endl
338  << " HCALResponse::responseHCAL, partype = " << partype
339  << " E, eta = " << energy << " " << eta
340  << " mean = " << mean << std::endl;
341  }
342 
343  return mean;
344 }
345 
346 double HCALResponse::interMU(double e, int ie, int ieta, RandomEngineAndDistribution const* random) {
347  double x = random->flatShoot();
348 
349  int bin1 = maxMUbin;
350  for(int i = 0; i < maxMUbin; i++) {
351  if(x > responseMU[ie][ieta][i]) {
352  bin1 = i-1;
353  break;
354  }
355  }
356  int bin2 = maxMUbin;
357  for(int i = 0; i < maxMUbin; i++) {
358  if(x > responseMU[ie+1][ieta][i]) {
359  bin2 = i-1;
360  break;
361  }
362  }
363 
364  double x1 = eGridMU[ie];
365  double x2 = eGridMU[ie+1];
366  double y1 = (bin1 + random->flatShoot()) * muStep;
367  double y2 = (bin2 + random->flatShoot()) * muStep;
368 
369  if(debug) {
370  // cout.width(6);
371  LogInfo("FastCalorimetry") << std::endl
372  << " HCALResponse::interMU " << std::endl
373  << " x, x1-x2, y1-y2 = "
374  << e << ", " << x1 <<"-" << x2 << " " << y1 <<"-" << y2 << std::endl;
375 
376  }
377 
378  //linear interpolation
379  double mean = (y1*(x2-e) + y2*(e-x1))/(x2-x1);
380 
381  if(debug) {
382  //cout.width(6);
383  LogInfo("FastCalorimetry") << std::endl
384  << " HCALResponse::interMU " << std::endl
385  << " e, ie, ieta = " << e << " " << ie << " " << ieta << std::endl
386  << " response = " << mean << std::endl;
387  }
388 
389  return mean;
390 }
391 
392 double HCALResponse::interHD(int mip, double e, int ie, int ieta, int det, RandomEngineAndDistribution const* random) {
393  double x1, x2;
394  double y1, y2;
395  if(det==2) mip=2; //ignore mip status for HF
396  double mean = 0;
397  vec1 pars(nPar,0);
398 
399  // for ieta < 5 there is overlap between HE and HF, and measurement comes from HE
400  if (det==2 && ieta>5 && e<20){
401 
402  for(int p = 0; p < 4; p++){
403  y1=PoissonParameters[p][ie][ieta];
404  y2=PoissonParameters[p][ie+1][ieta];
405  if(e>5){
406  x1 = eGridHD[det+1][ie];
407  x2 = eGridHD[det+1][ie+1];
408  pars[p] = (y1*(x2-e) + y2*(e-x1))/(x2-x1);
409  }
410  else pars[p] = y1;
411  }
412  mean =random->poissonShoot((int (PoissonShootNoNegative(pars[0],pars[1],random))+(int (PoissonShootNoNegative(pars[2],pars[3],random)))/4+random->flatShoot()/4) *6)/(0.3755*6);
413  }
414 
415  else{
416 
417  x1 = eGridHD[det][ie];
418  x2 = eGridHD[det][ie+1];
419 
420  //calculate all parameters
421  for(int p = 0; p < nPar; p++){
422  y1 = parameters[p][mip][det][ie][ieta];
423  y2 = parameters[p][mip][det][ie+1][ieta];
424 
425  //par-specific checks
426  double custom = 0;
427  bool use_custom = false;
428 
429  //do not let mu or sigma get extrapolated below zero for low energies
430  //especially important for HF since extrapolation is used for E < 15 GeV
431  if((p==0 || p==1) && e < x1){
432  double tmp = (y1*x2-y2*x1)/(x2-x1); //extrapolate down to e=0
433  if(tmp<0) { //require mu,sigma > 0 for E > 0
434  custom = y1*e/x1;
435  use_custom = true;
436  }
437  }
438  //tail parameters have lower bounds - never extrapolate down
439  else if((p==2 || p==3 || p==4 || p==5)){
440  if(e < x1 && y1 < y2){
441  custom = y1;
442  use_custom = true;
443  }
444  else if(e > x2 && y2 < y1){
445  custom = y2;
446  use_custom = true;
447  }
448  }
449 
450  //linear interpolation
451  if(use_custom) pars[p] = custom;
452  else pars[p] = (y1*(x2-e) + y2*(e-x1))/(x2-x1);
453  }
454 
455  //random smearing
456  if(nPar==6) mean = cballShootNoNegative(pars[0],pars[1],pars[2],pars[3],pars[4],pars[5], random);
457  else if(nPar==2) mean = gaussShootNoNegative(pars[0],pars[1], random); //gaussian fallback
458  }
459  return mean;
460 }
461 
462 
463 double HCALResponse::interEM(double e, int ie, int ieta, RandomEngineAndDistribution const* random) {
464  double y1 = meanEM[ie][ieta];
465  double y2 = meanEM[ie+1][ieta];
466  double x1 = eGridEM[ie];
467  double x2 = eGridEM[ie+1];
468 
469  if(debug) {
470  // cout.width(6);
471  LogInfo("FastCalorimetry") << std::endl
472  << " HCALResponse::interEM mean " << std::endl
473  << " x, x1-x2, y1-y2 = "
474  << e << ", " << x1 <<"-" << x2 << " " << y1 <<"-" << y2 << std::endl;
475  }
476 
477  //linear interpolation
478  double mean = (y1*(x2-e) + y2*(e-x1))/(x2-x1);
479 
480  y1 = sigmaEM[ie][ieta];
481  y2 = sigmaEM[ie+1][ieta];
482 
483  if(debug) {
484  // cout.width(6);
485  LogInfo("FastCalorimetry") << std::endl
486  << " HCALResponse::interEM sigma" << std::endl
487  << " x, x1-x2, y1-y2 = "
488  << e << ", " << x1 <<"-" << x2 << " " << y1 <<"-" << y2 << std::endl;
489  }
490 
491  //linear interpolation
492  double sigma = (y1*(x2-e) + y2*(e-x1))/(x2-x1);
493 
494  //random smearing
495  double rndm = gaussShootNoNegative(mean, sigma, random);
496 
497  return rndm;
498 }
499 
500 // Old parameterization of the calo response to hadrons
502  //response
503  double s = eResponseScale[hit];
504  double n = eResponseExponent;
505  double p = eResponsePlateau[hit];
506  double c = eResponseCoefficient;
507 
508  double response = e * p / (1+c*exp(n * log(s/e)));
509 
510  if(response<0.) response = 0.;
511 
512  //resolution
513  double resolution;
514  if(hit==hcforward)
515  resolution = e *sqrt( RespPar[VFCAL][1][0]*RespPar[VFCAL][1][0] / e + RespPar[VFCAL][1][1]*RespPar[VFCAL][1][1] );
516  else
517  resolution = e * sqrt( RespPar[HCAL][hit][0]*RespPar[HCAL][hit][0]/(e) + RespPar[HCAL][hit][1]*RespPar[HCAL][hit][1] );
518 
519  //random smearing
520  double rndm = gaussShootNoNegative(response, resolution, random);
521 
522  return rndm;
523 }
524 
525 //find subdet and eta offset
526 int HCALResponse::getDet(int ieta){
527  int d;
528  for(d = 0; d < 2; d++){
529  if(ieta < HDeta[d+1]){
530  break;
531  }
532  }
533  return d;
534 }
535 
536 // Remove (most) hits with negative energies
538  double out = random->gaussShoot(e,sigma);
539  if (e >= 0.) {
540  while (out < 0.) out = random->gaussShoot(e,sigma);
541  }
542  //else give up on re-trying, otherwise too much time can be lost before emeas comes out positive
543 
544  return out;
545 }
546 
547 // Remove (most) hits with negative energies
548 double HCALResponse::cballShootNoNegative(double mu, double sigma, double aL, double nL, double aR, double nR,
550  double out = cball.shoot(mu,sigma,aL,nL,aR,nR, random);
551  if (mu >= 0.) {
552  while (out < 0.) out = cball.shoot(mu,sigma,aL,nL,aR,nR, random);
553  }
554  //else give up on re-trying, otherwise too much time can be lost before emeas comes out positive
555 
556  return out;
557 }
559  double out = -1;
560  while (out < 0.) {
561  out = random->poissonShoot(e);
562  out = out + sigma;
563  }
564  return out;
565 
566 }
567 
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
dictionary parameters
Definition: Parameters.py:2
double responseHCAL(int _mip, double energy, double eta, int partype, RandomEngineAndDistribution const *)
double flatShoot(double xmin=0.0, double xmax=1.0) const
int getDet(int ieta)
double getHCALEnergyResponse(double e, int hit, RandomEngineAndDistribution const *)
double interEM(double e, int ie, int ieta, RandomEngineAndDistribution const *)
TRandom random
Definition: MVATrainer.cc:138
T eta() const
double PoissonShootNoNegative(double e, double sigma, RandomEngineAndDistribution const *)
std::vector< vec4 > vec5
Definition: HCALResponse.h:19
std::vector< vec2 > vec3
Definition: HCALResponse.h:17
std::vector< double > vec1
Definition: HCALResponse.h:15
T sqrt(T t)
Definition: SSEVec.h:48
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double getMIPfraction(double energy, double eta)
double interHD(int mip, double e, int ie, int ieta, int det, RandomEngineAndDistribution const *)
int j
Definition: DBlmapReader.cc:9
std::vector< vec3 > vec4
Definition: HCALResponse.h:18
const int mu
Definition: Constants.h:22
tuple out
Definition: dbtoconf.py:99
#define debug
Definition: HDRShower.cc:19
double interMU(double e, int ie, int ieta, RandomEngineAndDistribution const *)
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
double gaussShoot(double mean=0.0, double sigma=1.0) const
unsigned int poissonShoot(double mean) const
HCALResponse(const edm::ParameterSet &pset)
Definition: HCALResponse.cc:18
Definition: DDAxes.h:10
std::vector< vec1 > vec2
Definition: HCALResponse.h:16
double gaussShootNoNegative(double e, double sigma, RandomEngineAndDistribution const *)
double cballShootNoNegative(double mu, double sigma, double aL, double nL, double aR, double nR, RandomEngineAndDistribution const *)