CMS 3D CMS Logo

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

#include <EMShower.h>

Public Member Functions

void compute ()
 Compute the shower longitudinal and lateral development. More...
 
 EMShower (RandomEngineAndDistribution const *engine, GammaFunctionGenerator *gamma, EMECALShowerParametrization *const myParam, std::vector< const RawParticle * > *const myPart, EcalHitMaker *const myGrid=nullptr, PreshowerHitMaker *const myPreshower=nullptr, bool bFixedLength=false)
 
double getMaximumOfShower () const
 get the depth of the centre of gravity of the shower(s) More...
 
void prepareSteps ()
 Computes the steps before the real compute. More...
 
void setGrid (EcalHitMaker *const myGrid)
 set the grid address More...
 
void setHcal (HcalHitMaker *const myHcal)
 set the HCAL address More...
 
void setPreshower (PreshowerHitMaker *const myPresh)
 set the preshower address More...
 
virtual ~EMShower ()
 

Private Types

typedef std::pair< XYZPoint, double > Spot
 
typedef std::pair< unsigned int, double > Step
 
typedef Steps::const_iterator step_iterator
 
typedef std::vector< StepSteps
 
typedef math::XYZVector XYZPoint
 

Private Member Functions

double deposit (double a, double b, double t)
 
double deposit (double t, double a, double b, double dt)
 
double gam (double x, double a) const
 
void setIntervals (unsigned icomp, RadialInterval &rad)
 

Private Attributes

std::vector< double > a
 
std::vector< double > aSpot
 
std::vector< double > b
 
bool bFixedLength_
 
std::vector< double > bSpot
 
std::vector< std::vector< double > > depositedEnergy
 
std::vector< double > E
 
std::vector< double > Etot
 
double globalMaximum
 
bool hasPreshower
 
double innerDepth
 
std::vector< double > maximumOfShower
 
std::vector< double > meanDepth
 
GammaFunctionGeneratormyGammaGenerator
 
Genfun::IncompleteGamma myIncompleteGamma
 
unsigned int nPart
 
unsigned nSteps
 
double outerDepth
 
std::vector< double > photos
 
const RandomEngineAndDistributionrandom
 
Steps steps
 
bool stepsCalculated
 
std::vector< double > T
 
const ECALPropertiestheECAL
 
EcalHitMakertheGrid
 
const HCALPropertiestheHCAL
 
HcalHitMakertheHcalHitMaker
 
const PreshowerLayer1PropertiestheLayer1
 
const PreshowerLayer2PropertiestheLayer2
 
std::vector< double > theNumberOfSpots
 
EMECALShowerParametrization *const theParam
 
std::vector< const RawParticle * > *const thePart
 
PreshowerHitMakerthePreshower
 
std::vector< double > Ti
 
double totalEnergy
 
std::vector< double > TSpot
 

Detailed Description

Definition at line 26 of file EMShower.h.

Member Typedef Documentation

◆ Spot

typedef std::pair<XYZPoint, double> EMShower::Spot
private

Definition at line 29 of file EMShower.h.

◆ Step

typedef std::pair<unsigned int, double> EMShower::Step
private

Definition at line 30 of file EMShower.h.

◆ step_iterator

typedef Steps::const_iterator EMShower::step_iterator
private

Definition at line 32 of file EMShower.h.

◆ Steps

typedef std::vector<Step> EMShower::Steps
private

Definition at line 31 of file EMShower.h.

◆ XYZPoint

Definition at line 27 of file EMShower.h.

Constructor & Destructor Documentation

◆ EMShower()

EMShower::EMShower ( RandomEngineAndDistribution const *  engine,
GammaFunctionGenerator gamma,
EMECALShowerParametrization *const  myParam,
std::vector< const RawParticle * > *const  myPart,
EcalHitMaker *const  myGrid = nullptr,
PreshowerHitMaker *const  myPreshower = nullptr,
bool  bFixedLength = false 
)

Definition at line 16 of file EMShower.cc.

24  : theParam(myParam),
25  thePart(myPart),
26  theGrid(myGrid),
27  thePreshower(myPresh),
28  random(engine),
31  // Get the Famos Histos pointer
32  // myHistos = Histos::instance();
33  // myGammaGenerator = GammaFunctionGenerator::instance();
34  stepsCalculated = false;
35  hasPreshower = myPresh != nullptr;
36  theECAL = myParam->ecalProperties();
37  theHCAL = myParam->hcalProperties();
38  theLayer1 = myParam->layer1Properties();
39  theLayer2 = myParam->layer2Properties();
40 
42 
43  nPart = thePart->size();
44  totalEnergy = 0.;
45  globalMaximum = 0.;
46  double meanDepth = 0.;
47  // Initialize the shower parameters for each particle
48 
49  for (unsigned int i = 0; i < nPart; ++i) {
50  // std::cout << " AAA " << *(*thePart)[i] << std::endl;
51  // The particle and the shower energy
52  Etot.push_back(0.);
53  E.push_back(((*thePart)[i])->e());
54  totalEnergy += E[i];
55 
56  double lny = std::log(E[i] / theECAL->criticalEnergy());
57 
58  // Average and Sigma for T and alpha
59  double theMeanT = myParam->meanT(lny);
60  double theMeanAlpha = myParam->meanAlpha(lny);
61  double theMeanLnT = myParam->meanLnT(lny);
62  double theMeanLnAlpha = myParam->meanLnAlpha(lny);
63  double theSigmaLnT = myParam->sigmaLnT(lny);
64  double theSigmaLnAlpha = myParam->sigmaLnAlpha(lny);
65 
66  // The correlation matrix
67  double theCorrelation = myParam->correlationAlphaT(lny);
68  double rhop = std::sqrt((1. + theCorrelation) / 2.);
69  double rhom = std::sqrt((1. - theCorrelation) / 2.);
70 
71  // The number of spots in ECAL / HCAL
72  theNumberOfSpots.push_back(myParam->nSpots(E[i]));
73  // theNumberOfSpots.push_back(myParam->nSpots(E[i])*spotFraction);
74  //theNumberOfSpots = random->poissonShoot(myParam->nSpots(myPart->e()));
75 
76  // Photo-statistics
77  photos.push_back(E[i] * fotos);
78 
79  // The longitudinal shower development parameters
80  // Fluctuations of alpha, T and beta
81  double z1 = 0.;
82  double z2 = 0.;
83  double aa = 0.;
84 
85  // Protect against too large fluctuations (a < 1) for small energies
86  while (aa <= 1.) {
87  z1 = random->gaussShoot(0., 1.);
88  z2 = random->gaussShoot(0., 1.);
89  aa = std::exp(theMeanLnAlpha + theSigmaLnAlpha * (z1 * rhop - z2 * rhom));
90  }
91 
92  a.push_back(aa);
93  T.push_back(std::exp(theMeanLnT + theSigmaLnT * (z1 * rhop + z2 * rhom)));
94  b.push_back((a[i] - 1.) / T[i]);
95  maximumOfShower.push_back((a[i] - 1.) / b[i]);
97  meanDepth += a[i] / b[i] * E[i];
98  // std::cout << " Adding max " << maximumOfShower[i] << " " << E[i] << " " <<maximumOfShower[i]*E[i] << std::endl;
99  // std::cout << std::setw(8) << std::setprecision(5) << " a /b " << a[i] << " " << b[i] << std::endl;
100  Ti.push_back(a[i] / b[i] * (std::exp(theMeanLnAlpha) - 1.) / std::exp(theMeanLnAlpha));
101 
102  // The parameters for the number of energy spots
103  TSpot.push_back(theParam->meanTSpot(theMeanT));
104  aSpot.push_back(theParam->meanAlphaSpot(theMeanAlpha));
105  bSpot.push_back((aSpot[i] - 1.) / TSpot[i]);
106  // myHistos->fill("h7000",a[i]);
107  // myHistos->fill("h7002",E[i],a[i]);
108  }
109  // std::cout << " PS1 : " << myGrid->ps1TotalX0()
110  // << " PS2 : " << myGrid->ps2TotalX0()
111  // << " ECAL : " << myGrid->ecalTotalX0()
112  // << " HCAL : " << myGrid->hcalTotalX0()
113  // << " Offset : " << myGrid->x0DepthOffset()
114  // << std::endl;
115 
118  // std::cout << " Total Energy " << totalEnergy << " Global max " << globalMaximum << std::endl;
119 }

References a, aSpot, b, bSpot, EMECALShowerParametrization::correlationAlphaT(), ECALProperties::criticalEnergy(), MillePedeFileConverter_cfg::e, E, EMECALShowerParametrization::ecalProperties(), Etot, JetChargeProducer_cfi::exp, RandomEngineAndDistribution::gaussShoot(), globalMaximum, hasPreshower, EMECALShowerParametrization::hcalProperties(), mps_fire::i, EMECALShowerParametrization::layer1Properties(), EMECALShowerParametrization::layer2Properties(), ECALProperties::lightCollectionEfficiency(), dqm-mbProfile::log, maximumOfShower, EMECALShowerParametrization::meanAlpha(), EMECALShowerParametrization::meanAlphaSpot(), meanDepth, EMECALShowerParametrization::meanLnAlpha(), EMECALShowerParametrization::meanLnT(), EMECALShowerParametrization::meanT(), EMECALShowerParametrization::meanTSpot(), nPart, EMECALShowerParametrization::nSpots(), photos, ECALProperties::photoStatistics(), random, jetAnalyzer_cfi::rhom, EMECALShowerParametrization::sigmaLnAlpha(), EMECALShowerParametrization::sigmaLnT(), mathSSE::sqrt(), stepsCalculated, theECAL, theHCAL, theLayer1, theLayer2, theNumberOfSpots, theParam, thePart, Ti, totalEnergy, TSpot, and testProducerWithPsetDescEmpty_cfi::z2.

◆ ~EMShower()

virtual EMShower::~EMShower ( )
inlinevirtual

Definition at line 43 of file EMShower.h.

43 { ; }

Member Function Documentation

◆ compute()

void EMShower::compute ( )

Compute the shower longitudinal and lateral development.

Definition at line 263 of file EMShower.cc.

263  {
264  double t = 0.;
265  double dt = 0.;
266  if (!stepsCalculated)
267  prepareSteps();
268 
269  // Prepare the grids in EcalHitMaker
270  // theGrid->setInnerAndOuterDepth(innerDepth,outerDepth);
271  float pstot = 0.;
272  float ps2tot = 0.;
273  float ps1tot = 0.;
274  bool status = false;
275  // double E1 = 0.; // Energy layer 1
276  // double E2 = 0.; // Energy layer 2
277  // double n1 = 0.; // #mips layer 1
278  // double n2 = 0.; // #mips layer 2
279  // double E9 = 0.; // Energy ECAL
280 
281  // Loop over all segments for the longitudinal development
282  double totECalc = 0;
283 
284  for (unsigned iStep = 0; iStep < nSteps; ++iStep) {
285  // The length of the shower in this segment
286  dt = steps[iStep].second;
287 
288  // std::cout << " Detector " << steps[iStep].first << " t " << t << " " << dt << std::endl;
289 
290  // The elapsed length
291  t += dt;
292 
293  // In what detector are we ?
294  unsigned detector = steps[iStep].first;
295 
296  bool presh1 = detector == 0;
297  bool presh2 = detector == 1;
298  bool ecal = detector == 2;
299  bool hcal = detector == 3;
300  bool vfcal = detector == 4;
301  bool gap = detector == 5;
302 
303  // Temporary. Will be removed
304  if (theHCAL == nullptr)
305  hcal = false;
306 
307  // Keep only ECAL for now
308  if (vfcal)
309  continue;
310 
311  // Nothing to do in the gap
312  if (gap)
313  continue;
314 
315  // cout << " t = " << t << endl;
316  // Build the grid of crystals at this ECAL depth
317  // Actually, it might be useful to check if this grid is empty or not.
318  // If it is empty (because no crystal at this depth), it is of no use
319  // (and time consuming) to generate the spots
320 
321  // middle of the step
322  double tt = t - 0.5 * dt;
323 
324  double realTotalEnergy = 0.;
325  for (unsigned int i = 0; i < nPart; ++i) {
326  realTotalEnergy += depositedEnergy[iStep][i] * E[i];
327  }
328 
329  // std::cout << " Step " << tt << std::endl;
330  // std::cout << "ecal " << ecal << " hcal " << hcal <<std::endl;
331 
332  // If the amount of energy is greater than 1 MeV, make a new grid
333  // otherwise put in the previous one.
334  bool usePreviousGrid = (realTotalEnergy < 0.001);
335 
336  // If the amount of energy is greater than 1 MeV, make a new grid
337  // otherwise put in the previous one.
338 
339  // If less than 1 kEV. Just skip
340  if (iStep > 2 && realTotalEnergy < 0.000001)
341  continue;
342 
343  if (ecal && !usePreviousGrid) {
344  status = theGrid->getPads(meanDepth[iStep]);
345  }
346  if (hcal) {
348  }
349  if ((ecal || hcal) && !status)
350  continue;
351 
352  bool detailedShowerTail = false;
353  // check if a detailed treatment of the rear leakage should be applied
354  if (ecal && !usePreviousGrid) {
355  detailedShowerTail = (t - dt > theGrid->getX0back());
356  }
357 
358  // The particles of the shower are processed in parallel
359  for (unsigned int i = 0; i < nPart; ++i) {
360  // double Edepo=deposit(t,a[i],b[i],dt);
361 
362  // integration of the shower profile between t-dt and t
363  double dE = (!hcal) ? depositedEnergy[iStep][i] : 1. - deposit(a[i], b[i], t - dt);
364 
365  // no need to do the full machinery if there is ~nothing to distribute)
366  if (dE * E[i] < 0.000001)
367  continue;
368 
369  if (ecal && !theECAL->isHom()) {
370  double mean = dE * E[i];
371  double sigma = theECAL->resE() * sqrt(mean);
372 
373  /*
374  double meanLn = log(mean);
375  double kLn = sigma/mean+1;
376  double sigmaLn = log(kLn);
377  */
378 
379  double dE0 = dE;
380 
381  // std::cout << "dE before shoot = " << dE << std::endl;
382  dE = random->gaussShoot(mean, sigma) / E[i];
383 
384  // myGammaGenerator->setParameters(aSam,bSam,0);
385  // dE = myGammaGenerator->shoot()/E[i];
386  // std::cout << "dE shooted = " << dE << " E[i] = " << E[i] << std::endl;
387  if (dE * E[i] < 0.000001)
388  continue;
389  photos[i] = photos[i] * dE / dE0;
390  }
391 
392  /*
393  if (ecal && !theParam->ecalProperties()->isHom()){
394 
395  double cSquare = TMath::Power(theParam->ecalProperties()->resE(),2);
396  double aSam = dE/cSquare;
397  double bSam = 1./cSquare;
398 
399  // dE = dE*gam(bSam*dE, aSam)/tgamma(aSam);
400  }
401  */
402 
403  totECalc += dE;
404 
405  // The number of energy spots (or mips)
406  double nS = 0;
407 
408  // ECAL case : Account for photostatistics and long'al non-uniformity
409  if (ecal) {
410  // double aSam = E[i]*dE*one_over_resoSquare;
411  // double bSam = one_over_resoSquare;
412 
413  dE = random->poissonShoot(dE * photos[i]) / photos[i];
414  double z0 = random->gaussShoot(0., 1.);
415  dE *= 1. + z0 * theECAL->lightCollectionUniformity();
416 
417  // Expected spot number
418  nS = (theNumberOfSpots[i] * gam(bSpot[i] * tt, aSpot[i]) * bSpot[i] * dt / tgamma(aSpot[i]));
419 
420  // Preshower : Expected number of mips + fluctuation
421  } else if (hcal) {
422  nS = (theNumberOfSpots[i] * gam(bSpot[i] * tt, aSpot[i]) * bSpot[i] * dt / tgamma(aSpot[i])) *
424  double nSo = nS;
425  nS = random->poissonShoot(nS);
426  // 'Quick and dirty' fix (but this line should be better removed):
427  if (nSo > 0. && nS / nSo < 10.)
428  dE *= nS / nSo;
429 
430  // if(true)
431  // {
432  // std::cout << " theHCAL->spotFraction = " <<theHCAL->spotFraction() <<std::endl;
433  // std::cout << " nSpot Ecal : " << nSo/theHCAL->spotFraction() << " Final " << nS << std::endl;
434  // }
435  } else if (presh1) {
436  nS = random->poissonShoot(dE * E[i] * theLayer1->mipsPerGeV());
437  // std::cout << " dE *E[i] (1)" << dE*E[i] << " " << dE*E[i]*theLayer1->mipsPerGeV() << " "<< nS << std::endl;
438  pstot += dE * E[i];
439  ps1tot += dE * E[i];
440  dE = nS / (E[i] * theLayer1->mipsPerGeV());
441 
442  // E1 += dE*E[i];
443  // n1 += nS;
444  // if (presh2) { E2 += SpotEnergy; ++n2; }
445 
446  } else if (presh2) {
447  nS = random->poissonShoot(dE * E[i] * theLayer2->mipsPerGeV());
448  // std::cout << " dE *E[i] (2) " << dE*E[i] << " " << dE*E[i]*theLayer2->mipsPerGeV() << " "<< nS << std::endl;
449  pstot += dE * E[i];
450  ps2tot += dE * E[i];
451  dE = nS / (E[i] * theLayer2->mipsPerGeV());
452 
453  // E2 += dE*E[i];
454  // n2 += nS;
455  }
456 
457  if (detailedShowerTail)
458  myGammaGenerator->setParameters(floor(a[i] + 0.5), b[i], t - dt);
459 
460  // myHistos->fill("h100",t,dE);
461 
462  // The lateral development parameters
463 
464  // Energy of the spots
465  double eSpot = (nS > 0.) ? dE / nS : 0.;
466  double SpotEnergy = eSpot * E[i];
467 
468  if (hasPreshower && (presh1 || presh2))
469  thePreshower->setSpotEnergy(0.00009);
470  if (hcal) {
471  SpotEnergy *= theHCAL->hOverPi();
472  theHcalHitMaker->setSpotEnergy(SpotEnergy);
473  }
474  // Poissonian fluctuations for the number of spots
475  // int nSpot = random->poissonShoot(nS);
476  int nSpot = (int)(nS + 0.5);
477 
478  // Fig. 11 (right) *** Does not match.
479  // myHistos->fill("h101",t,(double)nSpot/theNumberOfSpots);
480 
481  //double taui = t/T;
482  double taui = tt / Ti[i];
483  double proba = theParam->p(taui, E[i]);
484  double theRC = theParam->rC(taui, E[i]);
485  double theRT = theParam->rT(taui, E[i]);
486 
487  // Fig. 10
488  // myHistos->fill("h300",taui,theRC);
489  // myHistos->fill("h301",taui,theRT);
490  // myHistos->fill("h302",taui,proba);
491 
492  double dSpotsCore = random->gaussShoot(proba * nSpot, std::sqrt(proba * (1. - proba) * nSpot));
493 
494  if (dSpotsCore < 0)
495  dSpotsCore = 0;
496 
497  unsigned nSpots_core = (unsigned)(dSpotsCore + 0.5);
498  unsigned nSpots_tail = ((unsigned)nSpot > nSpots_core) ? nSpot - nSpots_core : 0;
499 
500  for (unsigned icomp = 0; icomp < 2; ++icomp) {
501  double theR = (icomp == 0) ? theRC : theRT;
502  unsigned ncompspots = (icomp == 0) ? nSpots_core : nSpots_tail;
503 
504  RadialInterval radInterval(theR, ncompspots, SpotEnergy, random);
505  if (ecal) {
506  if (icomp == 0) {
507  setIntervals(icomp, radInterval);
508  } else {
509  setIntervals(icomp, radInterval);
510  }
511  } else {
512  radInterval.addInterval(100., 1.); // 100% of the spots
513  }
514 
515  radInterval.compute();
516  // irad = 0 : central circle; irad=1 : outside
517 
518  unsigned nrad = radInterval.nIntervals();
519 
520  for (unsigned irad = 0; irad < nrad; ++irad) {
521  double spote = radInterval.getSpotEnergy(irad);
522  if (ecal)
523  theGrid->setSpotEnergy(spote);
524  if (hcal)
526  unsigned nradspots = radInterval.getNumberOfSpots(irad);
527  double umin = radInterval.getUmin(irad);
528  double umax = radInterval.getUmax(irad);
529  // Go for the lateral development
530  // std::cout << "Couche " << iStep << " irad = " << irad << " Ene = " << E[i] << " eSpot = " << eSpot << " spote = " << spote << " nSpot = " << nS << std::endl;
531 
532  for (unsigned ispot = 0; ispot < nradspots; ++ispot) {
533  double z3 = random->flatShoot(umin, umax);
534  double ri = theR * std::sqrt(z3 / (1. - z3));
535 
536  // Generate phi
537  double phi = 2. * M_PI * random->flatShoot();
538 
539  // Add the hit in the crystal
540  // if( ecal ) theGrid->addHit(ri*theECAL->moliereRadius(),phi);
541  // Now the *moliereRadius is done in EcalHitMaker
542  if (ecal) {
543  if (detailedShowerTail) {
544  // std::cout << "About to call addHitDepth " << std::endl;
545  double depth;
546  do {
548  } while (depth > t);
549  theGrid->addHitDepth(ri, phi, depth);
550  // std::cout << " Done " << std::endl;
551  } else
552  theGrid->addHit(ri, phi);
553  } else if (hasPreshower && presh1)
554  thePreshower->addHit(ri, phi, 1);
555  else if (hasPreshower && presh2)
556  thePreshower->addHit(ri, phi, 2);
557  else if (hcal) {
558  // std::cout << " About to add a spot in the HCAL" << status << std::endl;
559  theHcalHitMaker->addHit(ri, phi);
560  // std::cout << " Added a spot in the HCAL" << status << std::endl;
561  }
562  // if (ecal) E9 += SpotEnergy;
563  // if (presh1) { E1 += SpotEnergy; ++n1; }
564  // if (presh2) { E2 += SpotEnergy; ++n2; }
565 
566  Etot[i] += spote;
567  }
568  }
569  }
570  // std::cout << " Done with the step " << std::endl;
571  // The shower!
572  //myHistos->fill("h500",theSpot.z(),theSpot.perp());
573  }
574  // std::cout << " nPart " << nPart << std::endl;
575  }
576  // std::cout << " Finshed the step loop " << std::endl;
577  // myHistos->fill("h500",E1+0.7*E2,E9);
578  // myHistos->fill("h501",n1+0.7*n2,E9);
579  // myHistos->fill("h400",n1);
580  // myHistos->fill("h401",n2);
581  // myHistos->fill("h402",E9+E1+0.7*E2);
582  // if(!standalone)theGrid->printGrid();
583  double Etotal = 0.;
584  for (unsigned i = 0; i < nPart; ++i) {
585  // myHistos->fill("h10",Etot[i]);
586  Etotal += Etot[i];
587  }
588 
589  // std::cout << "Etotal = " << Etotal << " nPart = "<< nPart << std::endl;
590  // std::cout << "totECalc = " << totECalc << std::endl;
591 
592  // myHistos->fill("h20",Etotal);
593  // if(thePreshower)
594  // std::cout << " PS " << thePreshower->layer1Calibrated() << " " << thePreshower->layer2Calibrated() << " " << thePreshower->totalCalibrated() << " " << ps1tot << " " <<ps2tot << " " << pstot << std::endl;
595 }

References a, PreshowerHitMaker::addHit(), HcalHitMaker::addHit(), EcalHitMaker::addHit(), EcalHitMaker::addHitDepth(), RadialInterval::addInterval(), aSpot, b, bSpot, RadialInterval::compute(), deposit(), depositedEnergy, LEDCalibrationChannels::depth, hgcalTestNeighbor_cfi::detector, dt, E, bsc_activity_cfg::ecal, Etot, RandomEngineAndDistribution::flatShoot(), gam(), HLT_2018_cff::gap, RandomEngineAndDistribution::gaussShoot(), RadialInterval::getNumberOfSpots(), EcalHitMaker::getPads(), RadialInterval::getSpotEnergy(), RadialInterval::getUmax(), RadialInterval::getUmin(), EcalHitMaker::getX0back(), hasPreshower, patCandidatesForDimuonsSequences_cff::hcal, HCALProperties::hOverPi(), mps_fire::i, createfilelist::int, ECALProperties::isHom(), ECALProperties::lightCollectionUniformity(), M_PI, SiStripPI::mean, meanDepth, PreshowerLayer1Properties::mipsPerGeV(), PreshowerLayer2Properties::mipsPerGeV(), myGammaGenerator, RadialInterval::nIntervals(), nPart, nSteps, EMECALShowerParametrization::p(), phi, photos, RandomEngineAndDistribution::poissonShoot(), prepareSteps(), random, EMECALShowerParametrization::rC(), ECALProperties::resE(), EMECALShowerParametrization::rT(), HcalHitMaker::setDepth(), setIntervals(), GammaFunctionGenerator::setParameters(), HcalHitMaker::setSpotEnergy(), PreshowerHitMaker::setSpotEnergy(), EcalHitMaker::setSpotEnergy(), GammaFunctionGenerator::shoot(), HCALProperties::spotFraction(), mathSSE::sqrt(), mps_update::status, steps, stepsCalculated, OrderedSet::t, theECAL, theGrid, theHCAL, theHcalHitMaker, theLayer1, theLayer2, theNumberOfSpots, theParam, thePreshower, Ti, groupFilesInBlocks::tt, and HLTMuonOfflineAnalyzer_cfi::z0.

Referenced by CalorimetryManager::EMShowerSimulation().

◆ deposit() [1/2]

double EMShower::deposit ( double  a,
double  b,
double  t 
)
private

Definition at line 663 of file EMShower.cc.

663  {
664  // std::cout << " Deposit " << std::endl;
665  myIncompleteGamma.a().setValue(a);
666  double b2 = b * t;
667  double result = 0.;
668  if (fabs(b2) < 1.e-9)
669  b2 = 1.e-9;
671  // std::cout << " deposit t = " << t << " " << result <<std::endl;
672  return result;
673 }

References a, b, b2, MillePedeFileConverter_cfg::e, myIncompleteGamma, mps_fire::result, and OrderedSet::t.

◆ deposit() [2/2]

double EMShower::deposit ( double  t,
double  a,
double  b,
double  dt 
)
private

Definition at line 632 of file EMShower.cc.

632  {
633  myIncompleteGamma.a().setValue(a);
634  double b1 = b * (t - dt);
635  double b2 = b * t;
636  double result = 0.;
637  double rb1 = (b1 != 0.) ? myIncompleteGamma(b1) : 0.;
638  double rb2 = (b2 != 0.) ? myIncompleteGamma(b2) : 0.;
639  result = (rb2 - rb1);
640  return result;
641 }

References a, b, b1, b2, dt, myIncompleteGamma, mps_fire::result, and OrderedSet::t.

Referenced by compute(), and prepareSteps().

◆ gam()

double EMShower::gam ( double  x,
double  a 
) const
private

Definition at line 597 of file EMShower.cc.

597  {
598  // A stupid gamma function
599  return std::pow(x, a - 1.) * std::exp(-x);
600 }

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

Referenced by compute().

◆ getMaximumOfShower()

double EMShower::getMaximumOfShower ( ) const
inline

get the depth of the centre of gravity of the shower(s)

get the depth of the maximum of the shower

Definition at line 55 of file EMShower.h.

55 { return globalMaximum; }

References globalMaximum.

Referenced by CalorimetryManager::EMShowerSimulation().

◆ prepareSteps()

void EMShower::prepareSteps ( )

Computes the steps before the real compute.

Definition at line 121 of file EMShower.cc.

121  {
122  // TimeMe theT("EMShower::compute");
123 
124  // Determine the longitudinal intervals
125  // std::cout << " EMShower compute" << std::endl;
126  double dt;
127  double radlen;
128  int stps;
129  int first_Ecal_step = 0;
130  int last_Ecal_step = 0;
131 
132  // The maximum is in principe 8 (with 5X0 steps in the ECAL)
133  steps.reserve(24);
134 
135  /*
136  std::cout << " PS1 : " << theGrid->ps1TotalX0()
137  << " PS2 : " << theGrid->ps2TotalX0()
138  << " PS2 and ECAL : " << theGrid->ps2eeTotalX0()
139  << " ECAL : " << theGrid->ecalTotalX0()
140  << " HCAL : " << theGrid->hcalTotalX0()
141  << " Offset : " << theGrid->x0DepthOffset()
142  << std::endl;
143  */
144 
145  radlen = -theGrid->x0DepthOffset();
146 
147  // Preshower Layer 1
148  radlen += theGrid->ps1TotalX0();
149  if (radlen > 0.) {
150  steps.push_back(Step(0, radlen));
151  radlen = 0.;
152  }
153 
154  // Preshower Layer 2
155  radlen += theGrid->ps2TotalX0();
156  if (radlen > 0.) {
157  steps.push_back(Step(1, radlen));
158  radlen = 0.;
159  }
160 
161  // add a step between preshower and ee
162  radlen += theGrid->ps2eeTotalX0();
163  if (radlen > 0.) {
164  steps.push_back(Step(5, radlen));
165  radlen = 0.;
166  }
167 
168  // ECAL
169  radlen += theGrid->ecalTotalX0();
170 
171  // std::cout << "theGrid->ecalTotalX0() = " << theGrid->ecalTotalX0() << std::endl;
172 
173  if (radlen > 0.) {
174  if (!bFixedLength_) {
175  stps = (int)((radlen + 2.5) / 5.);
176  // stps=(int)((radlen+.5)/1.);
177  if (stps == 0)
178  stps = 1;
179  dt = radlen / (double)stps;
180  Step step(2, dt);
181  first_Ecal_step = steps.size();
182  for (int ist = 0; ist < stps; ++ist)
183  steps.push_back(step);
184  last_Ecal_step = steps.size() - 1;
185  radlen = 0.;
186  } else {
187  dt = 1.0;
188  stps = static_cast<int>(radlen);
189  if (stps == 0)
190  stps = 1;
191  Step step(2, dt);
192  first_Ecal_step = steps.size();
193  for (int ist = 0; ist < stps; ++ist)
194  steps.push_back(step);
195  dt = radlen - stps;
196  if (dt > 0) {
197  Step stepLast(2, dt);
198  steps.push_back(stepLast);
199  }
200  last_Ecal_step = steps.size() - 1;
201  // std::cout << "radlen = " << radlen << " stps = " << stps << " dt = " << dt << std::endl;
202  radlen = 0.;
203  }
204  }
205 
206  // I should had a gap here !
207 
208  // HCAL
209  radlen += theGrid->hcalTotalX0();
210  if (radlen > 0.) {
211  double dtFrontHcal = theGrid->totalX0() - theGrid->hcalTotalX0();
212  // One single step for the full HCAL
213  if (dtFrontHcal < 30.) {
214  dt = 30. - dtFrontHcal;
215  Step step(3, dt);
216  steps.push_back(step);
217  }
218  }
219 
220  nSteps = steps.size();
221  if (nSteps == 0)
222  return;
223  double ESliceTot = 0.;
224  double MeanDepth = 0.;
225  depositedEnergy.resize(nSteps);
226  meanDepth.resize(nSteps);
227  double t = 0.;
228 
229  int offset = 0;
230  for (unsigned iStep = 0; iStep < nSteps; ++iStep) {
231  ESliceTot = 0.;
232  MeanDepth = 0.;
233  double realTotalEnergy = 0;
234  dt = steps[iStep].second;
235  t += dt;
236  for (unsigned int i = 0; i < nPart; ++i) {
237  depositedEnergy[iStep].push_back(deposit(t, a[i], b[i], dt));
238  ESliceTot += depositedEnergy[iStep][i];
239  MeanDepth += deposit(t, a[i] + 1., b[i], dt) / b[i] * a[i];
240  realTotalEnergy += depositedEnergy[iStep][i] * E[i];
241  }
242 
243  if (ESliceTot > 0.) // can happen for the shower tails; this depth will be skipped anyway
244  MeanDepth /= ESliceTot;
245  else
246  MeanDepth = t - dt;
247 
248  meanDepth[iStep] = MeanDepth;
249  if (realTotalEnergy < 0.001) {
250  offset -= 1;
251  }
252  }
253 
254  innerDepth = meanDepth[first_Ecal_step];
255  if (last_Ecal_step + offset >= 0)
256  outerDepth = meanDepth[last_Ecal_step + offset];
257  else
259 
260  stepsCalculated = true;
261 }

References a, b, bFixedLength_, deposit(), depositedEnergy, dt, E, EcalHitMaker::ecalTotalX0(), EcalHitMaker::hcalTotalX0(), mps_fire::i, innerDepth, createfilelist::int, meanDepth, nPart, nSteps, hltrates_dqm_sourceclient-live_cfg::offset, outerDepth, EcalHitMaker::ps1TotalX0(), EcalHitMaker::ps2eeTotalX0(), EcalHitMaker::ps2TotalX0(), steps, stepsCalculated, OrderedSet::t, theGrid, EcalHitMaker::totalX0(), and EcalHitMaker::x0DepthOffset().

Referenced by compute().

◆ setGrid()

void EMShower::setGrid ( EcalHitMaker *const  myGrid)
inline

set the grid address

Definition at line 58 of file EMShower.h.

58 { theGrid = myGrid; }

References theGrid.

Referenced by CalorimetryManager::EMShowerSimulation().

◆ setHcal()

void EMShower::setHcal ( HcalHitMaker *const  myHcal)

set the HCAL address

Definition at line 661 of file EMShower.cc.

661 { theHcalHitMaker = myHcal; }

References theHcalHitMaker.

Referenced by CalorimetryManager::EMShowerSimulation().

◆ setIntervals()

void EMShower::setIntervals ( unsigned  icomp,
RadialInterval rad 
)
private

Definition at line 643 of file EMShower.cc.

643  {
644  // std::cout << " Got the pointer " << std::endl;
645  const std::vector<double>& myValues((icomp) ? theParam->getTailIntervals() : theParam->getCoreIntervals());
646  // std::cout << " Got the vector " << myValues.size () << std::endl;
647  unsigned nvals = myValues.size() / 2;
648  for (unsigned iv = 0; iv < nvals; ++iv) {
649  // std::cout << myValues[2*iv] << " " << myValues[2*iv+1] <<std::endl;
650  rad.addInterval(myValues[2 * iv], myValues[2 * iv + 1]);
651  }
652 }

References RadialInterval::addInterval(), EMECALShowerParametrization::getCoreIntervals(), EMECALShowerParametrization::getTailIntervals(), and theParam.

Referenced by compute().

◆ setPreshower()

void EMShower::setPreshower ( PreshowerHitMaker *const  myPresh)

set the preshower address

Definition at line 654 of file EMShower.cc.

654  {
655  if (myPresh != nullptr) {
656  thePreshower = myPresh;
657  hasPreshower = true;
658  }
659 }

References hasPreshower, and thePreshower.

Referenced by CalorimetryManager::EMShowerSimulation().

Member Data Documentation

◆ a

std::vector<double> EMShower::a
private

Definition at line 98 of file EMShower.h.

Referenced by compute(), deposit(), EMShower(), gam(), and prepareSteps().

◆ aSpot

std::vector<double> EMShower::aSpot
private

Definition at line 102 of file EMShower.h.

Referenced by compute(), and EMShower().

◆ b

std::vector<double> EMShower::b
private

Definition at line 99 of file EMShower.h.

Referenced by compute(), deposit(), EMShower(), and prepareSteps().

◆ bFixedLength_

bool EMShower::bFixedLength_
private

Definition at line 144 of file EMShower.h.

Referenced by prepareSteps().

◆ bSpot

std::vector<double> EMShower::bSpot
private

Definition at line 103 of file EMShower.h.

Referenced by compute(), and EMShower().

◆ depositedEnergy

std::vector<std::vector<double> > EMShower::depositedEnergy
private

Definition at line 109 of file EMShower.h.

Referenced by compute(), and prepareSteps().

◆ E

std::vector<double> EMShower::E
private

Definition at line 95 of file EMShower.h.

Referenced by compute(), EMShower(), and prepareSteps().

◆ Etot

std::vector<double> EMShower::Etot
private

Definition at line 94 of file EMShower.h.

Referenced by compute(), and EMShower().

◆ globalMaximum

double EMShower::globalMaximum
private

Definition at line 113 of file EMShower.h.

Referenced by EMShower(), and getMaximumOfShower().

◆ hasPreshower

bool EMShower::hasPreshower
private

Definition at line 132 of file EMShower.h.

Referenced by compute(), EMShower(), and setPreshower().

◆ innerDepth

double EMShower::innerDepth
private

Definition at line 111 of file EMShower.h.

Referenced by prepareSteps().

◆ maximumOfShower

std::vector<double> EMShower::maximumOfShower
private

Definition at line 108 of file EMShower.h.

Referenced by EMShower().

◆ meanDepth

std::vector<double> EMShower::meanDepth
private

Definition at line 110 of file EMShower.h.

Referenced by compute(), EMShower(), and prepareSteps().

◆ myGammaGenerator

GammaFunctionGenerator* EMShower::myGammaGenerator
private

Definition at line 142 of file EMShower.h.

Referenced by compute().

◆ myIncompleteGamma

Genfun::IncompleteGamma EMShower::myIncompleteGamma
private

Definition at line 136 of file EMShower.h.

Referenced by deposit().

◆ nPart

unsigned int EMShower::nPart
private

Definition at line 90 of file EMShower.h.

Referenced by compute(), EMShower(), and prepareSteps().

◆ nSteps

unsigned EMShower::nSteps
private

Definition at line 119 of file EMShower.h.

Referenced by compute(), and prepareSteps().

◆ outerDepth

double EMShower::outerDepth
private

Definition at line 111 of file EMShower.h.

Referenced by prepareSteps().

◆ photos

std::vector<double> EMShower::photos
private

Definition at line 96 of file EMShower.h.

Referenced by compute(), and EMShower().

◆ random

const RandomEngineAndDistribution* EMShower::random
private

Definition at line 139 of file EMShower.h.

Referenced by compute(), and EMShower().

◆ steps

Steps EMShower::steps
private

Definition at line 118 of file EMShower.h.

Referenced by compute(), and prepareSteps().

◆ stepsCalculated

bool EMShower::stepsCalculated
private

Definition at line 120 of file EMShower.h.

Referenced by compute(), EMShower(), and prepareSteps().

◆ T

std::vector<double> EMShower::T
private

Definition at line 97 of file EMShower.h.

◆ theECAL

const ECALProperties* EMShower::theECAL
private

Definition at line 83 of file EMShower.h.

Referenced by compute(), and EMShower().

◆ theGrid

EcalHitMaker* EMShower::theGrid
private

Definition at line 123 of file EMShower.h.

Referenced by compute(), prepareSteps(), and setGrid().

◆ theHCAL

const HCALProperties* EMShower::theHCAL
private

Definition at line 84 of file EMShower.h.

Referenced by compute(), and EMShower().

◆ theHcalHitMaker

HcalHitMaker* EMShower::theHcalHitMaker
private

Definition at line 129 of file EMShower.h.

Referenced by compute(), and setHcal().

◆ theLayer1

const PreshowerLayer1Properties* EMShower::theLayer1
private

Definition at line 85 of file EMShower.h.

Referenced by compute(), and EMShower().

◆ theLayer2

const PreshowerLayer2Properties* EMShower::theLayer2
private

Definition at line 86 of file EMShower.h.

Referenced by compute(), and EMShower().

◆ theNumberOfSpots

std::vector<double> EMShower::theNumberOfSpots
private

Definition at line 93 of file EMShower.h.

Referenced by compute(), and EMShower().

◆ theParam

EMECALShowerParametrization* const EMShower::theParam
private

Definition at line 80 of file EMShower.h.

Referenced by compute(), EMShower(), and setIntervals().

◆ thePart

std::vector<const RawParticle*>* const EMShower::thePart
private

Definition at line 89 of file EMShower.h.

Referenced by EMShower().

◆ thePreshower

PreshowerHitMaker* EMShower::thePreshower
private

Definition at line 126 of file EMShower.h.

Referenced by compute(), and setPreshower().

◆ Ti

std::vector<double> EMShower::Ti
private

Definition at line 100 of file EMShower.h.

Referenced by compute(), and EMShower().

◆ totalEnergy

double EMShower::totalEnergy
private

Definition at line 115 of file EMShower.h.

Referenced by EMShower().

◆ TSpot

std::vector<double> EMShower::TSpot
private

Definition at line 101 of file EMShower.h.

Referenced by EMShower().

EcalHitMaker::getX0back
double getX0back() const
Definition: EcalHitMaker.h:104
RadialInterval::addInterval
void addInterval(double, double)
Definition: RadialInterval.cc:15
ECALProperties::lightCollectionUniformity
virtual double lightCollectionUniformity() const =0
Light Collection uniformity.
EMECALShowerParametrization::rT
double rT(double tau, double E) const
Definition: EMECALShowerParametrization.h:141
PreshowerHitMaker::setSpotEnergy
void setSpotEnergy(double e) override
Definition: PreshowerHitMaker.h:27
EMShower::nPart
unsigned int nPart
Definition: EMShower.h:90
mps_fire.i
i
Definition: mps_fire.py:355
SiStripPI::mean
Definition: SiStripPayloadInspectorHelper.h:169
EMShower::a
std::vector< double > a
Definition: EMShower.h:98
EMShower::Etot
std::vector< double > Etot
Definition: EMShower.h:94
groupFilesInBlocks.tt
int tt
Definition: groupFilesInBlocks.py:144
step
step
Definition: StallMonitor.cc:94
EMECALShowerParametrization::p
double p(double tau, double E) const
Definition: EMECALShowerParametrization.h:147
mps_update.status
status
Definition: mps_update.py:69
hcal
Definition: ConfigurationDatabase.cc:13
EMShower::theLayer1
const PreshowerLayer1Properties * theLayer1
Definition: EMShower.h:85
EMShower::globalMaximum
double globalMaximum
Definition: EMShower.h:113
GammaFunctionGenerator::setParameters
void setParameters(double a, double b, double xm)
The parameters must be set before shooting.
Definition: GammaFunctionGenerator.cc:93
EMShower::theGrid
EcalHitMaker * theGrid
Definition: EMShower.h:123
EMECALShowerParametrization::sigmaLnAlpha
double sigmaLnAlpha(double lny) const
Definition: EMECALShowerParametrization.h:91
EMShower::photos
std::vector< double > photos
Definition: EMShower.h:96
EMShower::theECAL
const ECALProperties * theECAL
Definition: EMShower.h:83
CustomPhysics_cfi.gamma
gamma
Definition: CustomPhysics_cfi.py:17
EMECALShowerParametrization::nSpots
double nSpots(double E) const
Definition: EMECALShowerParametrization.h:183
EMShower::aSpot
std::vector< double > aSpot
Definition: EMShower.h:102
EMShower::E
std::vector< double > E
Definition: EMShower.h:95
EcalHitMaker::ps2TotalX0
double ps2TotalX0() const
total number of X0 in the PS (Layer2).
Definition: EcalHitMaker.h:61
DDAxes::x
EMShower::thePreshower
PreshowerHitMaker * thePreshower
Definition: EMShower.h:126
EMShower::thePart
std::vector< const RawParticle * > *const thePart
Definition: EMShower.h:89
ECALProperties::criticalEnergy
double criticalEnergy() const override
Critical energy in GeV (2.66E-3*(x0*Z/A)^1.1): 8.74E-3 for Standard ECAL.
Definition: ECALProperties.h:46
b2
static constexpr float b2
Definition: L1EGammaCrystalsEmulatorProducer.cc:83
EMShower::bFixedLength_
bool bFixedLength_
Definition: EMShower.h:144
EMECALShowerParametrization::layer1Properties
const PreshowerLayer1Properties * layer1Properties() const
Definition: EMECALShowerParametrization.h:223
GammaFunctionGenerator::shoot
double shoot(RandomEngineAndDistribution const *) const
Definition: GammaFunctionGenerator.cc:30
EMShower::totalEnergy
double totalEnergy
Definition: EMShower.h:115
EMECALShowerParametrization::meanLnT
double meanLnT(double lny) const
Definition: EMECALShowerParametrization.h:73
EcalHitMaker::getPads
bool getPads(double depth, bool inCm=false)
Definition: EcalHitMaker.cc:820
EMShower::nSteps
unsigned nSteps
Definition: EMShower.h:119
EMShower::setIntervals
void setIntervals(unsigned icomp, RadialInterval &rad)
Definition: EMShower.cc:643
EcalHitMaker::addHit
bool addHit(double r, double phi, unsigned layer=0) override
Definition: EcalHitMaker.cc:184
EMShower::prepareSteps
void prepareSteps()
Computes the steps before the real compute.
Definition: EMShower.cc:121
testProducerWithPsetDescEmpty_cfi.z2
z2
Definition: testProducerWithPsetDescEmpty_cfi.py:41
EMShower::theHCAL
const HCALProperties * theHCAL
Definition: EMShower.h:84
patCandidatesForDimuonsSequences_cff.hcal
hcal
Definition: patCandidatesForDimuonsSequences_cff.py:37
dt
float dt
Definition: AMPTWrapper.h:136
b1
static constexpr float b1
Definition: L1EGammaCrystalsEmulatorProducer.cc:83
ECALProperties::resE
double resE() const
a rough estimate of ECAL resolution sigma/E = resE/sqrt(E)
Definition: ECALProperties.h:58
ECALProperties::lightCollectionEfficiency
virtual double lightCollectionEfficiency() const =0
Light Collection efficiency.
HLT_2018_cff.gap
gap
Definition: HLT_2018_cff.py:7186
EcalHitMaker::ps2eeTotalX0
double ps2eeTotalX0() const
Definition: EcalHitMaker.h:64
EcalHitMaker::x0DepthOffset
double x0DepthOffset() const
get the offset (e.g the number of X0 after which the shower starts)
Definition: EcalHitMaker.h:55
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
EMShower::innerDepth
double innerDepth
Definition: EMShower.h:111
HLTMuonOfflineAnalyzer_cfi.z0
z0
Definition: HLTMuonOfflineAnalyzer_cfi.py:98
PreshowerHitMaker::addHit
bool addHit(double r, double phi, unsigned layer=0) override
Definition: PreshowerHitMaker.cc:88
EMECALShowerParametrization::meanT
double meanT(double lny) const
Definition: EMECALShowerParametrization.h:44
EMECALShowerParametrization::ecalProperties
const ECALProperties * ecalProperties() const
Definition: EMECALShowerParametrization.h:219
OrderedSet.t
t
Definition: OrderedSet.py:90
EMECALShowerParametrization::rC
double rC(double tau, double E) const
Definition: EMECALShowerParametrization.h:135
LEDCalibrationChannels.depth
depth
Definition: LEDCalibrationChannels.py:65
EMShower::meanDepth
std::vector< double > meanDepth
Definition: EMShower.h:110
RadialInterval
Definition: RadialInterval.h:12
EMShower::theLayer2
const PreshowerLayer2Properties * theLayer2
Definition: EMShower.h:86
jetAnalyzer_cfi.rhom
rhom
Definition: jetAnalyzer_cfi.py:251
EMShower::gam
double gam(double x, double a) const
Definition: EMShower.cc:597
EMShower::depositedEnergy
std::vector< std::vector< double > > depositedEnergy
Definition: EMShower.h:109
EMShower::random
const RandomEngineAndDistribution * random
Definition: EMShower.h:139
EcalHitMaker::setSpotEnergy
void setSpotEnergy(double e) override
Definition: EcalHitMaker.h:112
EMECALShowerParametrization::meanAlpha
double meanAlpha(double lny) const
Definition: EMECALShowerParametrization.h:50
EMShower::myIncompleteGamma
Genfun::IncompleteGamma myIncompleteGamma
Definition: EMShower.h:136
EMShower::TSpot
std::vector< double > TSpot
Definition: EMShower.h:101
createfilelist.int
int
Definition: createfilelist.py:10
EcalHitMaker::totalX0
double totalX0() const
Definition: EcalHitMaker.h:49
EMECALShowerParametrization::meanAlphaSpot
double meanAlphaSpot(double alpha) const
Definition: EMECALShowerParametrization.h:195
HCALProperties::hOverPi
double hOverPi() const
Definition: HCALProperties.h:60
M_PI
#define M_PI
Definition: BXVectorInputProducer.cc:50
EMECALShowerParametrization::getTailIntervals
const std::vector< double > & getTailIntervals() const
Definition: EMECALShowerParametrization.h:229
EMECALShowerParametrization::layer2Properties
const PreshowerLayer2Properties * layer2Properties() const
Definition: EMECALShowerParametrization.h:225
EcalHitMaker::ecalTotalX0
double ecalTotalX0() const
in the ECAL
Definition: EcalHitMaker.h:67
EMShower::bSpot
std::vector< double > bSpot
Definition: EMShower.h:103
EMShower::outerDepth
double outerDepth
Definition: EMShower.h:111
ECALProperties::photoStatistics
virtual double photoStatistics() const =0
Photostatistics (photons/GeV) in the homegeneous material.
EMECALShowerParametrization::hcalProperties
const HCALProperties * hcalProperties() const
Definition: EMECALShowerParametrization.h:221
EMShower::theHcalHitMaker
HcalHitMaker * theHcalHitMaker
Definition: EMShower.h:129
EMShower::b
std::vector< double > b
Definition: EMShower.h:99
RandomEngineAndDistribution::flatShoot
double flatShoot(double xmin=0.0, double xmax=1.0) const
Definition: RandomEngineAndDistribution.h:27
EMECALShowerParametrization::meanTSpot
double meanTSpot(double T) const
Definition: EMECALShowerParametrization.h:189
EcalHitMaker::ps1TotalX0
double ps1TotalX0() const
Definition: EcalHitMaker.h:58
HcalHitMaker::setDepth
bool setDepth(double, bool inCm=false)
set the depth in X0 or Lambda0 units depending on showerType
Definition: HcalHitMaker.cc:114
EcalHitMaker::addHitDepth
bool addHitDepth(double r, double phi, double depth=-1)
Definition: EcalHitMaker.cc:133
Calorimetry_cff.bFixedLength
bFixedLength
Definition: Calorimetry_cff.py:23
ECALProperties::isHom
bool isHom() const
a rough estimate of ECAL resolution sigma/E = resE/sqrt(E)
Definition: ECALProperties.h:67
DDAxes::phi
EMShower::Ti
std::vector< double > Ti
Definition: EMShower.h:100
HCALProperties::spotFraction
double spotFraction() const
Spot fraction wrt ECAL.
Definition: HCALProperties.h:63
EMShower::myGammaGenerator
GammaFunctionGenerator * myGammaGenerator
Definition: EMShower.h:142
EMShower::deposit
double deposit(double t, double a, double b, double dt)
Definition: EMShower.cc:632
T
long double T
Definition: Basic3DVectorLD.h:48
EMECALShowerParametrization::getCoreIntervals
const std::vector< double > & getCoreIntervals() const
Definition: EMECALShowerParametrization.h:227
EcalHitMaker::hcalTotalX0
double hcalTotalX0() const
in the HCAL
Definition: EcalHitMaker.h:73
EMShower::stepsCalculated
bool stepsCalculated
Definition: EMShower.h:120
EMECALShowerParametrization::sigmaLnT
double sigmaLnT(double lny) const
Definition: EMECALShowerParametrization.h:79
dqm-mbProfile.log
log
Definition: dqm-mbProfile.py:17
bsc_activity_cfg.ecal
ecal
Definition: bsc_activity_cfg.py:25
EMShower::hasPreshower
bool hasPreshower
Definition: EMShower.h:132
hgcalTestNeighbor_cfi.detector
detector
Definition: hgcalTestNeighbor_cfi.py:6
funct::pow
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:30
mps_fire.result
result
Definition: mps_fire.py:303
HcalHitMaker::addHit
bool addHit(double r, double phi, unsigned layer=0) override
add the hit in the HCAL in local coordinates
Definition: HcalHitMaker.cc:30
EMShower::theNumberOfSpots
std::vector< double > theNumberOfSpots
Definition: EMShower.h:93
EMShower::steps
Steps steps
Definition: EMShower.h:118
JetChargeProducer_cfi.exp
exp
Definition: JetChargeProducer_cfi.py:6
hltrates_dqm_sourceclient-live_cfg.offset
offset
Definition: hltrates_dqm_sourceclient-live_cfg.py:82
EMShower::maximumOfShower
std::vector< double > maximumOfShower
Definition: EMShower.h:108
PreshowerLayer1Properties::mipsPerGeV
double mipsPerGeV() const override
Number of Mips/GeV [Default : 41.7 Mips/GeV or 24 MeV/Mips].
Definition: PreshowerLayer1Properties.h:29
HcalHitMaker::setSpotEnergy
void setSpotEnergy(double e) override
Set the spot energy.
Definition: HcalHitMaker.h:26
EMShower::theParam
EMECALShowerParametrization *const theParam
Definition: EMShower.h:80
PreshowerLayer2Properties::mipsPerGeV
double mipsPerGeV() const override
Number of Mips/GeV [Default : 59.5 Mips/GeV or 0.7*24 MeV/Mips].
Definition: PreshowerLayer2Properties.h:29
EMShower::Step
std::pair< unsigned int, double > Step
Definition: EMShower.h:30
RandomEngineAndDistribution::gaussShoot
double gaussShoot(double mean=0.0, double sigma=1.0) const
Definition: RandomEngineAndDistribution.h:29
RandomEngineAndDistribution::poissonShoot
unsigned int poissonShoot(double mean) const
Definition: RandomEngineAndDistribution.h:33
EMECALShowerParametrization::meanLnAlpha
double meanLnAlpha(double lny) const
Definition: EMECALShowerParametrization.h:85
EMECALShowerParametrization::correlationAlphaT
double correlationAlphaT(double lny) const
Definition: EMECALShowerParametrization.h:97
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37