CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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 (const RandomEngine *engine, GammaFunctionGenerator *gamma, EMECALShowerParametrization *const myParam, std::vector< const RawParticle * > *const myPart, DQMStore *const dbeIn=NULL, EcalHitMaker *const myGrid=NULL, PreshowerHitMaker *const myPreshower=NULL, 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 t, double a, double b, double dt)
 
double deposit (double a, double b, double t)
 
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
 
DQMStoredbe
 
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 RandomEnginerandom
 
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 28 of file EMShower.h.

Member Typedef Documentation

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

Definition at line 33 of file EMShower.h.

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

Definition at line 34 of file EMShower.h.

typedef Steps::const_iterator EMShower::step_iterator
private

Definition at line 36 of file EMShower.h.

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

Definition at line 35 of file EMShower.h.

Definition at line 31 of file EMShower.h.

Constructor & Destructor Documentation

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

Definition at line 21 of file EMShower.cc.

References a, aSpot, b, bSpot, DQMStore::cd(), EMECALShowerParametrization::correlationAlphaT(), ECALProperties::criticalEnergy(), dbe, alignCSCRings::e, E, EMECALShowerParametrization::ecalProperties(), Etot, create_public_lumi_plots::exp, MonitorElement::Fill(), RandomEngine::gaussShoot(), DQMStore::get(), globalMaximum, hasPreshower, EMECALShowerParametrization::hcalProperties(), i, EMECALShowerParametrization::layer1Properties(), EMECALShowerParametrization::layer2Properties(), ECALProperties::lightCollectionEfficiency(), create_public_lumi_plots::log, maximumOfShower, EMECALShowerParametrization::meanAlpha(), EMECALShowerParametrization::meanAlphaSpot(), meanDepth, EMECALShowerParametrization::meanLnAlpha(), EMECALShowerParametrization::meanLnT(), EMECALShowerParametrization::meanT(), EMECALShowerParametrization::meanTSpot(), nPart, EMECALShowerParametrization::nSpots(), NULL, photos, ECALProperties::photoStatistics(), random, EMECALShowerParametrization::sigmaLnAlpha(), EMECALShowerParametrization::sigmaLnT(), mathSSE::sqrt(), stepsCalculated, theECAL, theHCAL, theLayer1, theLayer2, theNumberOfSpots, theParam, thePart, Ti, totalEnergy, and TSpot.

30  : theParam(myParam),
31  thePart(myPart),
32  theGrid(myGrid),
33  thePreshower(myPresh),
34  random(engine),
35  myGammaGenerator(gamma),
36  bFixedLength_(bFixedLength)
37 {
38 
39  // Get the Famos Histos pointer
40  // myHistos = Histos::instance();
41  // myGammaGenerator = GammaFunctionGenerator::instance();
42  stepsCalculated=false;
43  hasPreshower = myPresh!=NULL;
44  theECAL = myParam->ecalProperties();
45  theHCAL = myParam->hcalProperties();
46  theLayer1 = myParam->layer1Properties();
47  theLayer2 = myParam->layer2Properties();
48 
49 
50  double fotos = theECAL->photoStatistics()
52 
53  dbe = dbeIn;
54 
55  nPart = thePart->size();
56  totalEnergy = 0.;
57  globalMaximum = 0.;
58  double meanDepth=0.;
59  // Initialize the shower parameters for each particle
60 
61  if (dbe) {
62  dbe->cd();
63  if (!dbe->get("EMShower/NumberOfParticles")) {}//std::cout << "NOT FOUND IN Shower.cc" << std::endl;}
64  else {
65  dbe->get("EMShower/NumberOfParticles")->Fill(nPart);
66  }
67  }
68 
69 
70  for ( unsigned int i=0; i<nPart; ++i ) {
71  // std::cout << " AAA " << *(*thePart)[i] << std::endl;
72  // The particle and the shower energy
73  Etot.push_back(0.);
74  E.push_back(((*thePart)[i])->e());
75  totalEnergy+=E[i];
76 
77 
78 
79  if (dbe) {
80  dbe->cd();
81  if (!dbe->get("EMShower/ParticlesEnergy")) {}//std::cout << "NOT FOUND IN Shower.cc" << std::endl;}
82  else {
83  dbe->get("EMShower/ParticlesEnergy")->Fill(log10(E[i]));
84  }
85  }
86 
87 
88 
89 
90 
91 
92 
93  double lny = std::log ( E[i] / theECAL->criticalEnergy() );
94 
95  // Average and Sigma for T and alpha
96  double theMeanT = myParam->meanT(lny);
97  double theMeanAlpha = myParam->meanAlpha(lny);
98  double theMeanLnT = myParam->meanLnT(lny);
99  double theMeanLnAlpha = myParam->meanLnAlpha(lny);
100  double theSigmaLnT = myParam->sigmaLnT(lny);
101  double theSigmaLnAlpha = myParam->sigmaLnAlpha(lny);
102 
103  // The correlation matrix
104  double theCorrelation = myParam->correlationAlphaT(lny);
105  double rhop = std::sqrt( (1.+theCorrelation)/2. );
106  double rhom = std::sqrt( (1.-theCorrelation)/2. );
107 
108  // The number of spots in ECAL / HCAL
109  theNumberOfSpots.push_back(myParam->nSpots(E[i]));
110  // theNumberOfSpots.push_back(myParam->nSpots(E[i])*spotFraction);
111  //theNumberOfSpots = random->poissonShoot(myParam->nSpots(myPart->e()));
112 
113  // Photo-statistics
114  photos.push_back(E[i] * fotos);
115 
116  // The longitudinal shower development parameters
117  // Fluctuations of alpha, T and beta
118  double z1=0.;
119  double z2=0.;
120  double aa=0.;
121 
122  // Protect against too large fluctuations (a < 1) for small energies
123  while ( aa <= 1. ) {
124  z1 = random->gaussShoot(0.,1.);
125  z2 = random->gaussShoot(0.,1.);
126  aa = std::exp(theMeanLnAlpha + theSigmaLnAlpha * (z1*rhop-z2*rhom));
127  }
128 
129  a.push_back(aa);
130  T.push_back(std::exp(theMeanLnT + theSigmaLnT * (z1*rhop+z2*rhom)));
131  b.push_back((a[i]-1.)/T[i]);
132  maximumOfShower.push_back((a[i]-1.)/b[i]);
134  meanDepth += a[i]/b[i]*E[i];
135  // std::cout << " Adding max " << maximumOfShower[i] << " " << E[i] << " " <<maximumOfShower[i]*E[i] << std::endl;
136  // std::cout << std::setw(8) << std::setprecision(5) << " a /b " << a[i] << " " << b[i] << std::endl;
137  Ti.push_back(
138  a[i]/b[i] * (std::exp(theMeanLnAlpha)-1.) / std::exp(theMeanLnAlpha));
139 
140  // The parameters for the number of energy spots
141  TSpot.push_back(theParam->meanTSpot(theMeanT));
142  aSpot.push_back(theParam->meanAlphaSpot(theMeanAlpha));
143  bSpot.push_back((aSpot[i]-1.)/TSpot[i]);
144  // myHistos->fill("h7000",a[i]);
145  // myHistos->fill("h7002",E[i],a[i]);
146  }
147 // std::cout << " PS1 : " << myGrid->ps1TotalX0()
148 // << " PS2 : " << myGrid->ps2TotalX0()
149 // << " ECAL : " << myGrid->ecalTotalX0()
150 // << " HCAL : " << myGrid->hcalTotalX0()
151 // << " Offset : " << myGrid->x0DepthOffset()
152 // << std::endl;
153 
155  meanDepth/=totalEnergy;
156  // std::cout << " Total Energy " << totalEnergy << " Global max " << globalMaximum << std::endl;
157 }
int i
Definition: DBlmapReader.cc:9
std::vector< const RawParticle * > *const thePart
Definition: EMShower.h:96
std::vector< double > theNumberOfSpots
Definition: EMShower.h:100
double sigmaLnT(double lny) const
const HCALProperties * hcalProperties() const
std::vector< double > maximumOfShower
Definition: EMShower.h:115
double meanAlphaSpot(double alpha) const
std::vector< double > aSpot
Definition: EMShower.h:109
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:406
const HCALProperties * theHCAL
Definition: EMShower.h:91
#define NULL
Definition: scimark2.h:8
const ECALProperties * theECAL
Definition: EMShower.h:90
double gaussShoot(double mean=0.0, double sigma=1.0) const
Definition: RandomEngine.h:37
std::vector< double > Etot
Definition: EMShower.h:101
void Fill(long long x)
bool stepsCalculated
Definition: EMShower.h:127
PreshowerHitMaker * thePreshower
Definition: EMShower.h:133
T sqrt(T t)
Definition: SSEVec.h:46
unsigned int nPart
Definition: EMShower.h:97
std::vector< double > meanDepth
Definition: EMShower.h:117
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1468
bool bFixedLength_
Definition: EMShower.h:153
std::vector< double > photos
Definition: EMShower.h:103
const PreshowerLayer1Properties * layer1Properties() const
double correlationAlphaT(double lny) const
const ECALProperties * ecalProperties() const
bool hasPreshower
Definition: EMShower.h:139
double criticalEnergy() const
Critical energy in GeV (2.66E-3*(x0*Z/A)^1.1): 8.74E-3 for Standard ECAL.
double globalMaximum
Definition: EMShower.h:120
const PreshowerLayer2Properties * layer2Properties() const
const PreshowerLayer2Properties * theLayer2
Definition: EMShower.h:93
double meanLnAlpha(double lny) const
virtual double lightCollectionEfficiency() const =0
Light Collection efficiency.
const PreshowerLayer1Properties * theLayer1
Definition: EMShower.h:92
std::vector< double > a
Definition: EMShower.h:105
double meanAlpha(double lny) const
EMECALShowerParametrization *const theParam
Definition: EMShower.h:87
EcalHitMaker * theGrid
Definition: EMShower.h:130
GammaFunctionGenerator * myGammaGenerator
Definition: EMShower.h:151
double sigmaLnAlpha(double lny) const
std::vector< double > Ti
Definition: EMShower.h:107
std::vector< double > TSpot
Definition: EMShower.h:108
std::vector< double > b
Definition: EMShower.h:106
double totalEnergy
Definition: EMShower.h:122
std::vector< double > E
Definition: EMShower.h:102
const RandomEngine * random
Definition: EMShower.h:148
long double T
virtual double photoStatistics() const =0
Photostatistics (photons/GeV) in the homegeneous material.
DQMStore * dbe
Definition: EMShower.h:143
std::vector< double > bSpot
Definition: EMShower.h:110
virtual EMShower::~EMShower ( )
inlinevirtual

Definition at line 49 of file EMShower.h.

49 {;}

Member Function Documentation

void EMShower::compute ( )

Compute the shower longitudinal and lateral development.

Definition at line 302 of file EMShower.cc.

References a, PreshowerHitMaker::addHit(), HcalHitMaker::addHit(), EcalHitMaker::addHit(), EcalHitMaker::addHitDepth(), RadialInterval::addInterval(), aSpot, b, bSpot, DQMStore::cd(), RadialInterval::compute(), dbe, deposit(), depositedEnergy, dt, alignCSCRings::e, E, patCandidatesForDimuonsSequences_cff::ecal, Etot, MonitorElement::Fill(), RandomEngine::flatShoot(), gam(), RandomEngine::gaussShoot(), DQMStore::get(), RadialInterval::getNumberOfSpots(), EcalHitMaker::getPads(), RadialInterval::getSpotEnergy(), RadialInterval::getUmax(), RadialInterval::getUmin(), EcalHitMaker::getX0back(), hasPreshower, patCandidatesForDimuonsSequences_cff::hcal, HCALProperties::hOverPi(), i, ECALProperties::lightCollectionUniformity(), M_PI, meanDepth, PreshowerLayer2Properties::mipsPerGeV(), PreshowerLayer1Properties::mipsPerGeV(), myGammaGenerator, RadialInterval::nIntervals(), nPart, nSteps, NULL, EMECALShowerParametrization::p(), phi, photos, RandomEngine::poissonShoot(), prepareSteps(), random, EMECALShowerParametrization::rC(), EMECALShowerParametrization::rT(), HcalHitMaker::setDepth(), setIntervals(), GammaFunctionGenerator::setParameters(), PreshowerHitMaker::setSpotEnergy(), HcalHitMaker::setSpotEnergy(), EcalHitMaker::setSpotEnergy(), GammaFunctionGenerator::shoot(), HCALProperties::spotFraction(), mathSSE::sqrt(), ntuplemaker::status, steps, stepsCalculated, lumiQTWidget::t, theECAL, theGrid, theHCAL, theHcalHitMaker, theLayer1, theLayer2, theNumberOfSpots, theParam, thePreshower, Ti, and groupFilesInBlocks::tt.

Referenced by CalorimetryManager::EMShowerSimulation().

302  {
303 
304  double t = 0.;
305  double dt = 0.;
307 
308  // Prepare the grids in EcalHitMaker
309  // theGrid->setInnerAndOuterDepth(innerDepth,outerDepth);
310  float pstot=0.;
311  float ps2tot=0.;
312  float ps1tot=0.;
313  bool status=false;
314  // double E1 = 0.; // Energy layer 1
315  // double E2 = 0.; // Energy layer 2
316  // double n1 = 0.; // #mips layer 1
317  // double n2 = 0.; // #mips layer 2
318  // double E9 = 0.; // Energy ECAL
319 
320  // Loop over all segments for the longitudinal development
321  double totECalc = 0;
322 
323 
324 
325  for (unsigned iStep=0; iStep<nSteps; ++iStep ) {
326 
327  // The length of the shower in this segment
328  dt = steps[iStep].second;
329 
330  // std::cout << " Detector " << steps[iStep].first << " t " << t << " " << dt << std::endl;
331 
332  // The elapsed length
333  t += dt;
334 
335  // In what detector are we ?
336  unsigned detector=steps[iStep].first;
337 
338  bool presh1 = detector==0;
339  bool presh2 = detector==1;
340  bool ecal = detector==2;
341  bool hcal = detector==3;
342  bool vfcal = detector==4;
343  bool gap = detector==5;
344 
345  // Temporary. Will be removed
346  if ( theHCAL==NULL) hcal=false;
347 
348  // Keep only ECAL for now
349  if ( vfcal ) continue;
350 
351  // Nothing to do in the gap
352  if( gap ) continue;
353 
354  // cout << " t = " << t << endl;
355  // Build the grid of crystals at this ECAL depth
356  // Actually, it might be useful to check if this grid is empty or not.
357  // If it is empty (because no crystal at this depth), it is of no use
358  // (and time consuming) to generate the spots
359 
360 
361  // middle of the step
362  double tt = t-0.5*dt;
363 
364  double realTotalEnergy=0.;
365  for ( unsigned int i=0; i<nPart; ++i ) {
366  realTotalEnergy += depositedEnergy[iStep][i]*E[i];
367  }
368 
369 // std::cout << " Step " << tt << std::endl;
370 // std::cout << "ecal " << ecal << " hcal " << hcal <<std::endl;
371 
372  // If the amount of energy is greater than 1 MeV, make a new grid
373  // otherwise put in the previous one.
374  bool usePreviousGrid=(realTotalEnergy<0.001);
375 
376  // If the amount of energy is greater than 1 MeV, make a new grid
377  // otherwise put in the previous one.
378 
379  // If less than 1 kEV. Just skip
380  if(iStep>2&&realTotalEnergy<0.000001) continue;
381 
382  if (ecal && !usePreviousGrid)
383  {
384  status=theGrid->getPads(meanDepth[iStep]);
385  }
386  if (hcal)
387  {
388  status=theHcalHitMaker->setDepth(tt);
389  }
390  if((ecal || hcal) && !status) continue;
391 
392  bool detailedShowerTail=false;
393  // check if a detailed treatment of the rear leakage should be applied
394  if(ecal && !usePreviousGrid)
395  {
396  detailedShowerTail=(t-dt > theGrid->getX0back());
397  }
398 
399  // The particles of the shower are processed in parallel
400  for ( unsigned int i=0; i<nPart; ++i ) {
401 
402  // double Edepo=deposit(t,a[i],b[i],dt);
403 
404  // integration of the shower profile between t-dt and t
405  double dE = (!hcal)? depositedEnergy[iStep][i]:1.-deposit(a[i],b[i],t-dt);
406 
407  totECalc +=dE;
408 
409  if (dbe && fabs(dt-1.)< 1e-5 && ecal) {
410  dbe->cd();
411  if (!dbe->get("EMShower/LongitudinalShape")) {}//std::cout << "NOT FOUND IN Shower.cc" << std::endl;}
412  else {
413  double dx = 1.;
414  // dE is aready in relative units from 0 to 1
415  dbe->get("EMShower/LongitudinalShape")->Fill(t, dE/dx);
416  }
417  //(dbe->get("TransverseShape"))->Fill(ri,log10(1./1000.*eSpot/0.2));
418 
419  }
420 
421 
422 
423  // no need to do the full machinery if there is ~nothing to distribute)
424  if(dE*E[i]<0.000001) continue;
425 
426  if(detailedShowerTail)
427  {
428  myGammaGenerator->setParameters(floor(a[i]+0.5),b[i],t-dt);
429  }
430 
431  // The number of energy spots (or mips)
432  double nS = 0;
433 
434  // ECAL case : Account for photostatistics and long'al non-uniformity
435  if (ecal) {
436 
437  dE = random->poissonShoot(dE*photos[i])/photos[i];
438  double z0 = random->gaussShoot(0.,1.);
439  dE *= 1. + z0*theECAL->lightCollectionUniformity();
440 
441  // Expected spot number
442  nS = ( theNumberOfSpots[i] * gam(bSpot[i]*tt,aSpot[i])
443  * bSpot[i] * dt
444  / tgamma(aSpot[i]) );
445 
446  // Preshower : Expected number of mips + fluctuation
447  }
448  else if ( hcal ) {
449 
450  nS = ( theNumberOfSpots[i] * gam(bSpot[i]*tt,aSpot[i])
451  * bSpot[i] * dt
452  / tgamma(aSpot[i]))* theHCAL->spotFraction();
453  double nSo = nS ;
454  nS = random->poissonShoot(nS);
455  // 'Quick and dirty' fix (but this line should be better removed):
456  if( nSo > 0. && nS/nSo < 10.) dE *= nS/nSo;
457 
458 // if(true)
459 // {
460 // std::cout << " theHCAL->spotFraction = " <<theHCAL->spotFraction() <<std::endl;
461 // std::cout << " nSpot Ecal : " << nSo/theHCAL->spotFraction() << " Final " << nS << std::endl;
462 // }
463  }
464  else if ( presh1 ) {
465 
466  nS = random->poissonShoot(dE*E[i]*theLayer1->mipsPerGeV());
467  // std::cout << " dE *E[i] (1)" << dE*E[i] << " " << dE*E[i]*theLayer1->mipsPerGeV() << " "<< nS << std::endl;
468  pstot+=dE*E[i];
469  ps1tot+=dE*E[i];
470  dE = nS/(E[i]*theLayer1->mipsPerGeV());
471 
472  // E1 += dE*E[i];
473  // n1 += nS;
474  // if (presh2) { E2 += SpotEnergy; ++n2; }
475 
476  } else if ( presh2 ) {
477 
478  nS = random->poissonShoot(dE*E[i]*theLayer2->mipsPerGeV());
479  // std::cout << " dE *E[i] (2) " << dE*E[i] << " " << dE*E[i]*theLayer2->mipsPerGeV() << " "<< nS << std::endl;
480  pstot+=dE*E[i];
481  ps2tot+=dE*E[i];
482  dE = nS/(E[i]*theLayer2->mipsPerGeV());
483 
484  // E2 += dE*E[i];
485  // n2 += nS;
486 
487  }
488 
489  // myHistos->fill("h100",t,dE);
490 
491  // The lateral development parameters
492 
493  // Energy of the spots
494  double eSpot = (nS>0.) ? dE/nS : 0.;
495  double SpotEnergy=eSpot*E[i];
496 
497  if(hasPreshower&&(presh1||presh2)) thePreshower->setSpotEnergy(0.00009);
498  if(hcal)
499  {
500  SpotEnergy*=theHCAL->hOverPi();
501  theHcalHitMaker->setSpotEnergy(SpotEnergy);
502  }
503  // Poissonian fluctuations for the number of spots
504  // int nSpot = random->poissonShoot(nS);
505  int nSpot = (int)(nS+0.5);
506 
507 
508  // Fig. 11 (right) *** Does not match.
509  // myHistos->fill("h101",t,(double)nSpot/theNumberOfSpots);
510 
511  //double taui = t/T;
512  double taui = tt/Ti[i];
513  double proba = theParam->p(taui,E[i]);
514  double theRC = theParam->rC(taui,E[i]);
515  double theRT = theParam->rT(taui,E[i]);
516 
517  // Fig. 10
518  // myHistos->fill("h300",taui,theRC);
519  // myHistos->fill("h301",taui,theRT);
520  // myHistos->fill("h302",taui,proba);
521 
522  double dSpotsCore =
523  random->gaussShoot(proba*nSpot,std::sqrt(proba*(1.-proba)*nSpot));
524 
525  if(dSpotsCore<0) dSpotsCore=0;
526 
527  unsigned nSpots_core = (unsigned)(dSpotsCore+0.5);
528  unsigned nSpots_tail = ((unsigned)nSpot>nSpots_core) ? nSpot-nSpots_core : 0;
529 
530  for(unsigned icomp=0;icomp<2;++icomp)
531  {
532 
533  double theR=(icomp==0) ? theRC : theRT ;
534  unsigned ncompspots=(icomp==0) ? nSpots_core : nSpots_tail;
535 
536  RadialInterval radInterval(theR,ncompspots,SpotEnergy,random);
537  if(ecal)
538  {
539  if(icomp==0)
540  {
541  setIntervals(icomp,radInterval);
542  }
543  else
544  {
545  setIntervals(icomp,radInterval);
546  }
547  }
548  else
549  {
550  radInterval.addInterval(100.,1.);// 100% of the spots
551  }
552 
553  radInterval.compute();
554  // irad = 0 : central circle; irad=1 : outside
555 
556  unsigned nrad=radInterval.nIntervals();
557 
558  for(unsigned irad=0;irad<nrad;++irad)
559  {
560  double spote=radInterval.getSpotEnergy(irad);
561  if(ecal) theGrid->setSpotEnergy(spote);
562  if(hcal) theHcalHitMaker->setSpotEnergy(spote);
563  unsigned nradspots=radInterval.getNumberOfSpots(irad);
564  double umin=radInterval.getUmin(irad);
565  double umax=radInterval.getUmax(irad);
566  // Go for the lateral development
567  // std::cout << "Couche " << iStep << " irad = " << irad << " Ene = " << E[i] << " eSpot = " << eSpot << " spote = " << spote << " nSpot = " << nS << std::endl;
568 
569  for ( unsigned ispot=0; ispot<nradspots; ++ispot )
570  {
571  double z3=random->flatShoot(umin,umax);
572  double ri=theR * std::sqrt(z3/(1.-z3)) ;
573 
574 
575 
576  //Fig. 12
577  /*
578  if ( 2. < t && t < 3. )
579  dbe->fill("h401",ri,1./1000.*eSpot/dE/0.2);
580  if ( 6. < t && t < 7. )
581  dbe->fill("h402",ri,1./1000.*eSpot/dE/0.2);
582  if ( 19. < t && t < 20. )
583  dbe->fill("h403",ri,1./1000.*eSpot/dE/0.2);
584  */
585  // Fig. 13 (top)
586  if (dbe && fabs(dt-1.)< 1e-5 && ecal) {
587  dbe->cd();
588  if (!dbe->get("EMShower/TransverseShape")) {}//std::cout << "NOT FOUND IN Shower.cc" << std::endl;}
589  else {
590  double drho = 0.1;
591  double dx = 1;
592  // spote is a real energy we have to normalise it by E[i] which is the energy of the particle i
593  dbe->get("EMShower/TransverseShape")->Fill(ri,1/E[i]*spote/drho);
594  dbe->get("EMShower/ShapeRhoZ")->Fill(ri, t, 1/E[i]*spote/(drho*dx));
595  }
596  } else {
597  // std::cout << "dt = " << dt << " length = " << t << std::endl;
598  }
599 
600 
601  // Generate phi
602  double phi = 2.*M_PI*random->flatShoot();
603 
604  // Add the hit in the crystal
605  // if( ecal ) theGrid->addHit(ri*theECAL->moliereRadius(),phi);
606  // Now the *moliereRadius is done in EcalHitMaker
607  if ( ecal )
608  {
609  if(detailedShowerTail)
610  {
611  // std::cout << "About to call addHitDepth " << std::endl;
612  double depth;
613  do
614  {
615  depth=myGammaGenerator->shoot();
616  }
617  while(depth>t);
618  theGrid->addHitDepth(ri,phi,depth);
619  // std::cout << " Done " << std::endl;
620  }
621  else
622  theGrid->addHit(ri,phi);
623  }
624  else if (hasPreshower&&presh1) thePreshower->addHit(ri,phi,1);
625  else if (hasPreshower&&presh2) thePreshower->addHit(ri,phi,2);
626  else if (hcal)
627  {
628  // std::cout << " About to add a spot in the HCAL" << status << std::endl;
629  theHcalHitMaker->addHit(ri,phi);
630  // std::cout << " Added a spot in the HCAL" << status << std::endl;
631  }
632  // if (ecal) E9 += SpotEnergy;
633  // if (presh1) { E1 += SpotEnergy; ++n1; }
634  // if (presh2) { E2 += SpotEnergy; ++n2; }
635 
636  Etot[i] += spote;
637  }
638  }
639  }
640  // std::cout << " Done with the step " << std::endl;
641  // The shower!
642  //myHistos->fill("h500",theSpot.z(),theSpot.perp());
643  }
644  // std::cout << " nPart " << nPart << std::endl;
645  }
646  // std::cout << " Finshed the step loop " << std::endl;
647  // myHistos->fill("h500",E1+0.7*E2,E9);
648  // myHistos->fill("h501",n1+0.7*n2,E9);
649  // myHistos->fill("h400",n1);
650  // myHistos->fill("h401",n2);
651  // myHistos->fill("h402",E9+E1+0.7*E2);
652  // if(!standalone)theGrid->printGrid();
653  double Etotal=0.;
654  for(unsigned i=0;i<nPart;++i)
655  {
656  // myHistos->fill("h10",Etot[i]);
657  Etotal+=Etot[i];
658  }
659 
660  // std::cout << "Etotal = " << Etotal << " nPart = "<< nPart << std::endl;
661  // std::cout << "totECalc = " << totECalc << std::endl;
662 
663  // myHistos->fill("h20",Etotal);
664  // if(thePreshower)
665  // std::cout << " PS " << thePreshower->layer1Calibrated() << " " << thePreshower->layer2Calibrated() << " " << thePreshower->totalCalibrated() << " " << ps1tot << " " <<ps2tot << " " << pstot << std::endl;
666 }
void setSpotEnergy(double e)
Set the spot energy.
Definition: HcalHitMaker.h:28
double getX0back() const
Definition: EcalHitMaker.h:109
float dt
Definition: AMPTWrapper.h:126
int i
Definition: DBlmapReader.cc:9
std::vector< double > theNumberOfSpots
Definition: EMShower.h:100
void prepareSteps()
Computes the steps before the real compute.
Definition: EMShower.cc:159
bool addHit(double r, double phi, unsigned layer=0)
void setSpotEnergy(double e)
Definition: EcalHitMaker.h:117
std::vector< double > aSpot
Definition: EMShower.h:109
bool addHit(double r, double phi, unsigned layer=0)
double deposit(double t, double a, double b, double dt)
Definition: EMShower.cc:706
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:406
double gam(double x, double a) const
Definition: EMShower.cc:670
const HCALProperties * theHCAL
Definition: EMShower.h:91
#define NULL
Definition: scimark2.h:8
double rC(double tau, double E) const
const ECALProperties * theECAL
Definition: EMShower.h:90
void setIntervals(unsigned icomp, RadialInterval &rad)
Definition: EMShower.cc:718
double gaussShoot(double mean=0.0, double sigma=1.0) const
Definition: RandomEngine.h:37
std::vector< double > Etot
Definition: EMShower.h:101
void Fill(long long x)
bool stepsCalculated
Definition: EMShower.h:127
double spotFraction() const
Spot fraction wrt ECAL.
double hOverPi() const
PreshowerHitMaker * thePreshower
Definition: EMShower.h:133
std::vector< std::vector< double > > depositedEnergy
Definition: EMShower.h:116
Steps steps
Definition: EMShower.h:125
bool addHitDepth(double r, double phi, double depth=-1)
T sqrt(T t)
Definition: SSEVec.h:46
unsigned int poissonShoot(double mean) const
Definition: RandomEngine.h:44
HcalHitMaker * theHcalHitMaker
Definition: EMShower.h:136
unsigned int nPart
Definition: EMShower.h:97
std::vector< double > meanDepth
Definition: EMShower.h:117
double rT(double tau, double E) const
void setParameters(double a, double b, double xm)
The parameters must be set before shooting.
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1468
std::vector< double > photos
Definition: EMShower.h:103
void setSpotEnergy(double e)
#define M_PI
Definition: BFit3D.cc:3
bool hasPreshower
Definition: EMShower.h:139
double mipsPerGeV() const
Number of Mips/GeV [Default : 41.7 Mips/GeV or 24 MeV/Mips].
double mipsPerGeV() const
Number of Mips/GeV [Default : 59.5 Mips/GeV or 0.7*24 MeV/Mips].
double p(double tau, double E) const
const PreshowerLayer2Properties * theLayer2
Definition: EMShower.h:93
double flatShoot(double xmin=0.0, double xmax=1.0) const
Definition: RandomEngine.h:30
bool getPads(double depth, bool inCm=false)
const PreshowerLayer1Properties * theLayer1
Definition: EMShower.h:92
std::vector< double > a
Definition: EMShower.h:105
virtual double lightCollectionUniformity() const =0
Light Collection uniformity.
EMECALShowerParametrization *const theParam
Definition: EMShower.h:87
EcalHitMaker * theGrid
Definition: EMShower.h:130
GammaFunctionGenerator * myGammaGenerator
Definition: EMShower.h:151
std::vector< double > Ti
Definition: EMShower.h:107
unsigned nSteps
Definition: EMShower.h:126
tuple status
Definition: ntuplemaker.py:245
std::vector< double > b
Definition: EMShower.h:106
std::vector< double > E
Definition: EMShower.h:102
const RandomEngine * random
Definition: EMShower.h:148
bool addHit(double r, double phi, unsigned layer=0)
add the hit in the HCAL in local coordinates
Definition: HcalHitMaker.cc:28
bool setDepth(double, bool inCm=false)
set the depth in X0 or Lambda0 units depending on showerType
DQMStore * dbe
Definition: EMShower.h:143
std::vector< double > bSpot
Definition: EMShower.h:110
Definition: DDAxes.h:10
double EMShower::deposit ( double  t,
double  a,
double  b,
double  dt 
)
private

Definition at line 706 of file EMShower.cc.

References dt, myIncompleteGamma, query::result, and lumiQTWidget::t.

Referenced by compute(), and prepareSteps().

706  {
707  myIncompleteGamma.a().setValue(a);
708  double b1=b*(t-dt);
709  double b2=b*t;
710  double result = 0.;
711  double rb1=(b1!=0.) ? myIncompleteGamma(b1) : 0.;
712  double rb2=(b2!=0.) ? myIncompleteGamma(b2) : 0.;
713  result = (rb2-rb1);
714  return result;
715 }
float dt
Definition: AMPTWrapper.h:126
tuple result
Definition: query.py:137
std::vector< double > a
Definition: EMShower.h:105
Genfun::IncompleteGamma myIncompleteGamma
Definition: EMShower.h:145
std::vector< double > b
Definition: EMShower.h:106
double EMShower::deposit ( double  a,
double  b,
double  t 
)
private

Definition at line 747 of file EMShower.cc.

References alignCSCRings::e, myIncompleteGamma, query::result, and lumiQTWidget::t.

747  {
748  // std::cout << " Deposit " << std::endl;
749  myIncompleteGamma.a().setValue(a);
750  double b2=b*t;
751  double result = 0.;
752  if(fabs(b2) < 1.e-9 ) b2 = 1.e-9;
753  result=myIncompleteGamma(b2);
754  // std::cout << " deposit t = " << t << " " << result <<std::endl;
755  return result;
756 
757 }
tuple result
Definition: query.py:137
std::vector< double > a
Definition: EMShower.h:105
Genfun::IncompleteGamma myIncompleteGamma
Definition: EMShower.h:145
std::vector< double > b
Definition: EMShower.h:106
double EMShower::gam ( double  x,
double  a 
) const
private

Definition at line 670 of file EMShower.cc.

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

Referenced by compute().

670  {
671  // A stupid gamma function
672  return std::pow(x,a-1.)*std::exp(-x);
673 }
std::vector< double > a
Definition: EMShower.h:105
x
Definition: VDTMath.h:216
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
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 61 of file EMShower.h.

References globalMaximum.

Referenced by CalorimetryManager::EMShowerSimulation().

61 {return globalMaximum;}
double globalMaximum
Definition: EMShower.h:120
void EMShower::prepareSteps ( )

Computes the steps before the real compute.

Definition at line 159 of file EMShower.cc.

References a, b, bFixedLength_, deposit(), depositedEnergy, dt, E, EcalHitMaker::ecalTotalX0(), EcalHitMaker::hcalTotalX0(), i, innerDepth, meanDepth, nPart, nSteps, evf::evtn::offset(), outerDepth, EcalHitMaker::ps1TotalX0(), EcalHitMaker::ps2eeTotalX0(), EcalHitMaker::ps2TotalX0(), launcher::step, steps, stepsCalculated, lumiQTWidget::t, theGrid, EcalHitMaker::totalX0(), and EcalHitMaker::x0DepthOffset().

Referenced by compute().

160 {
161  // TimeMe theT("EMShower::compute");
162 
163  // Determine the longitudinal intervals
164  // std::cout << " EMShower compute" << std::endl;
165  double dt;
166  double radlen;
167  int stps;
168  int first_Ecal_step=0;
169  int last_Ecal_step=0;
170 
171  // The maximum is in principe 8 (with 5X0 steps in the ECAL)
172  steps.reserve(24);
173 
174  /*
175  std::cout << " PS1 : " << theGrid->ps1TotalX0()
176  << " PS2 : " << theGrid->ps2TotalX0()
177  << " PS2 and ECAL : " << theGrid->ps2eeTotalX0()
178  << " ECAL : " << theGrid->ecalTotalX0()
179  << " HCAL : " << theGrid->hcalTotalX0()
180  << " Offset : " << theGrid->x0DepthOffset()
181  << std::endl;
182  */
183 
184  radlen = -theGrid->x0DepthOffset();
185 
186  // Preshower Layer 1
187  radlen += theGrid->ps1TotalX0();
188  if ( radlen > 0. ) {
189  steps.push_back(Step(0,radlen));
190  radlen = 0.;
191  }
192 
193  // Preshower Layer 2
194  radlen += theGrid->ps2TotalX0();
195  if ( radlen > 0. ) {
196  steps.push_back(Step(1,radlen));
197  radlen = 0.;
198  }
199 
200  // add a step between preshower and ee
201  radlen += theGrid->ps2eeTotalX0();
202  if ( radlen > 0.) {
203  steps.push_back(Step(5,radlen));
204  radlen = 0.;
205  }
206 
207  // ECAL
208  radlen += theGrid->ecalTotalX0();
209 
210  if ( radlen > 0. ) {
211 
212  if (!bFixedLength_){
213  stps=(int)((radlen+2.5)/5.);
214  // stps=(int)((radlen+.5)/1.);
215  if ( stps == 0 ) stps = 1;
216  dt = radlen/(double)stps;
217  Step step(2,dt);
218  first_Ecal_step=steps.size();
219  for ( int ist=0; ist<stps; ++ist )
220  steps.push_back(step);
221  last_Ecal_step=steps.size()-1;
222  radlen = 0.;
223  } else {
224  dt = 1.0;
225  stps = static_cast<int>(radlen);
226  if (stps == 0) stps = 1;
227  Step step(2,dt);
228  first_Ecal_step=steps.size();
229  for ( int ist=0; ist<stps; ++ist ) steps.push_back(step);
230  dt = radlen-stps;
231  if (dt>0) {
232  Step stepLast (2,dt);
233  steps.push_back(stepLast);
234  }
235  last_Ecal_step=steps.size()-1;
236  // std::cout << "radlen = " << radlen << " stps = " << stps << " dt = " << dt << std::endl;
237  radlen = 0.;
238 
239  }
240  }
241 
242  // I should had a gap here !
243 
244  // HCAL
245  radlen += theGrid->hcalTotalX0();
246  if ( radlen > 0. ) {
247  double dtFrontHcal=theGrid->totalX0()-theGrid->hcalTotalX0();
248  // One single step for the full HCAL
249  if(dtFrontHcal<30.)
250  {
251  dt=30.-dtFrontHcal;
252  Step step(3,dt);
253  steps.push_back(step);
254  }
255  }
256 
257  nSteps=steps.size();
258  if(nSteps==0) return;
259  double ESliceTot=0.;
260  double MeanDepth=0.;
261  depositedEnergy.resize(nSteps);
262  meanDepth.resize(nSteps);
263  double t=0.;
264 
265  int offset=0;
266  for(unsigned iStep=0;iStep<nSteps;++iStep)
267  {
268  ESliceTot=0.;
269  MeanDepth=0.;
270  double realTotalEnergy=0;
271  dt=steps[iStep].second;
272  t+=dt;
273  for ( unsigned int i=0; i<nPart; ++i ) {
274  depositedEnergy[iStep].push_back(deposit(t,a[i],b[i],dt));
275  ESliceTot +=depositedEnergy[iStep][i];
276  MeanDepth += deposit(t,a[i]+1.,b[i],dt)/b[i]*a[i];
277  realTotalEnergy+=depositedEnergy[iStep][i]*E[i];
278  }
279 
280  if( ESliceTot > 0. ) // can happen for the shower tails; this depth will be skipped anyway
281  MeanDepth/=ESliceTot;
282  else
283  MeanDepth=t-dt;
284 
285  meanDepth[iStep]=MeanDepth;
286  if(realTotalEnergy<0.001)
287  {
288  offset-=1;
289  }
290  }
291 
292  innerDepth=meanDepth[first_Ecal_step];
293  if(last_Ecal_step+offset>=0)
294  outerDepth=meanDepth[last_Ecal_step+offset];
295  else
297 
298  stepsCalculated=true;
299 }
float dt
Definition: AMPTWrapper.h:126
int i
Definition: DBlmapReader.cc:9
double ps2TotalX0() const
total number of X0 in the PS (Layer2).
Definition: EcalHitMaker.h:65
list step
Definition: launcher.py:15
double deposit(double t, double a, double b, double dt)
Definition: EMShower.cc:706
double ps2eeTotalX0() const
Definition: EcalHitMaker.h:68
bool stepsCalculated
Definition: EMShower.h:127
std::vector< std::vector< double > > depositedEnergy
Definition: EMShower.h:116
double ecalTotalX0() const
in the ECAL
Definition: EcalHitMaker.h:71
Steps steps
Definition: EMShower.h:125
double innerDepth
Definition: EMShower.h:118
double hcalTotalX0() const
in the HCAL
Definition: EcalHitMaker.h:77
unsigned int nPart
Definition: EMShower.h:97
std::vector< double > meanDepth
Definition: EMShower.h:117
unsigned int offset(bool)
bool bFixedLength_
Definition: EMShower.h:153
std::vector< double > a
Definition: EMShower.h:105
double outerDepth
Definition: EMShower.h:118
EcalHitMaker * theGrid
Definition: EMShower.h:130
unsigned nSteps
Definition: EMShower.h:126
std::vector< double > b
Definition: EMShower.h:106
double ps1TotalX0() const
Definition: EcalHitMaker.h:62
std::vector< double > E
Definition: EMShower.h:102
double x0DepthOffset() const
get the offset (e.g the number of X0 after which the shower starts)
Definition: EcalHitMaker.h:59
std::pair< unsigned int, double > Step
Definition: EMShower.h:34
double totalX0() const
Definition: EcalHitMaker.h:53
void EMShower::setGrid ( EcalHitMaker *const  myGrid)
inline

set the grid address

Definition at line 64 of file EMShower.h.

References theGrid.

Referenced by CalorimetryManager::EMShowerSimulation().

64 { theGrid=myGrid;}
EcalHitMaker * theGrid
Definition: EMShower.h:130
void EMShower::setHcal ( HcalHitMaker *const  myHcal)

set the HCAL address

Definition at line 741 of file EMShower.cc.

References theHcalHitMaker.

Referenced by CalorimetryManager::EMShowerSimulation().

742 {
743  theHcalHitMaker = myHcal;
744 }
HcalHitMaker * theHcalHitMaker
Definition: EMShower.h:136
void EMShower::setIntervals ( unsigned  icomp,
RadialInterval rad 
)
private

Definition at line 718 of file EMShower.cc.

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

Referenced by compute().

719 {
720  // std::cout << " Got the pointer " << std::endl;
721  const std::vector<double>& myValues((icomp)?theParam->getTailIntervals():theParam->getCoreIntervals());
722  // std::cout << " Got the vector " << myValues.size () << std::endl;
723  unsigned nvals=myValues.size()/2;
724  for(unsigned iv=0;iv<nvals;++iv)
725  {
726  // std::cout << myValues[2*iv] << " " << myValues[2*iv+1] <<std::endl;
727  rad.addInterval(myValues[2*iv],myValues[2*iv+1]);
728  }
729 }
const std::vector< double > & getTailIntervals() const
const std::vector< double > & getCoreIntervals() const
EMECALShowerParametrization *const theParam
Definition: EMShower.h:87
void addInterval(double, double)
void EMShower::setPreshower ( PreshowerHitMaker *const  myPresh)

set the preshower address

Definition at line 731 of file EMShower.cc.

References hasPreshower, NULL, and thePreshower.

Referenced by CalorimetryManager::EMShowerSimulation().

732 {
733  if(myPresh!=NULL)
734  {
735  thePreshower = myPresh;
736  hasPreshower=true;
737  }
738 }
#define NULL
Definition: scimark2.h:8
PreshowerHitMaker * thePreshower
Definition: EMShower.h:133
bool hasPreshower
Definition: EMShower.h:139

Member Data Documentation

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

Definition at line 105 of file EMShower.h.

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

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

Definition at line 109 of file EMShower.h.

Referenced by compute(), and EMShower().

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

Definition at line 106 of file EMShower.h.

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

bool EMShower::bFixedLength_
private

Definition at line 153 of file EMShower.h.

Referenced by prepareSteps().

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

Definition at line 110 of file EMShower.h.

Referenced by compute(), and EMShower().

DQMStore* EMShower::dbe
private

Definition at line 143 of file EMShower.h.

Referenced by compute(), and EMShower().

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

Definition at line 116 of file EMShower.h.

Referenced by compute(), and prepareSteps().

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

Definition at line 102 of file EMShower.h.

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

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

Definition at line 101 of file EMShower.h.

Referenced by compute(), and EMShower().

double EMShower::globalMaximum
private

Definition at line 120 of file EMShower.h.

Referenced by EMShower(), and getMaximumOfShower().

bool EMShower::hasPreshower
private

Definition at line 139 of file EMShower.h.

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

double EMShower::innerDepth
private

Definition at line 118 of file EMShower.h.

Referenced by prepareSteps().

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

Definition at line 115 of file EMShower.h.

Referenced by EMShower().

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

Definition at line 117 of file EMShower.h.

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

GammaFunctionGenerator* EMShower::myGammaGenerator
private

Definition at line 151 of file EMShower.h.

Referenced by compute().

Genfun::IncompleteGamma EMShower::myIncompleteGamma
private

Definition at line 145 of file EMShower.h.

Referenced by deposit().

unsigned int EMShower::nPart
private

Definition at line 97 of file EMShower.h.

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

unsigned EMShower::nSteps
private

Definition at line 126 of file EMShower.h.

Referenced by compute(), and prepareSteps().

double EMShower::outerDepth
private

Definition at line 118 of file EMShower.h.

Referenced by prepareSteps().

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

Definition at line 103 of file EMShower.h.

Referenced by compute(), and EMShower().

const RandomEngine* EMShower::random
private

Definition at line 148 of file EMShower.h.

Referenced by compute(), and EMShower().

Steps EMShower::steps
private

Definition at line 125 of file EMShower.h.

Referenced by compute(), and prepareSteps().

bool EMShower::stepsCalculated
private

Definition at line 127 of file EMShower.h.

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

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

Definition at line 104 of file EMShower.h.

const ECALProperties* EMShower::theECAL
private

Definition at line 90 of file EMShower.h.

Referenced by compute(), and EMShower().

EcalHitMaker* EMShower::theGrid
private

Definition at line 130 of file EMShower.h.

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

const HCALProperties* EMShower::theHCAL
private

Definition at line 91 of file EMShower.h.

Referenced by compute(), and EMShower().

HcalHitMaker* EMShower::theHcalHitMaker
private

Definition at line 136 of file EMShower.h.

Referenced by compute(), and setHcal().

const PreshowerLayer1Properties* EMShower::theLayer1
private

Definition at line 92 of file EMShower.h.

Referenced by compute(), and EMShower().

const PreshowerLayer2Properties* EMShower::theLayer2
private

Definition at line 93 of file EMShower.h.

Referenced by compute(), and EMShower().

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

Definition at line 100 of file EMShower.h.

Referenced by compute(), and EMShower().

EMECALShowerParametrization* const EMShower::theParam
private

Definition at line 87 of file EMShower.h.

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

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

Definition at line 96 of file EMShower.h.

Referenced by EMShower().

PreshowerHitMaker* EMShower::thePreshower
private

Definition at line 133 of file EMShower.h.

Referenced by compute(), and setPreshower().

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

Definition at line 107 of file EMShower.h.

Referenced by compute(), and EMShower().

double EMShower::totalEnergy
private

Definition at line 122 of file EMShower.h.

Referenced by EMShower().

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

Definition at line 108 of file EMShower.h.

Referenced by EMShower().