CMS 3D CMS Logo

RadialInterval.cc
Go to the documentation of this file.
1 //FAMOS header
4 
5 #include <cmath>
6 
7 RadialInterval::RadialInterval(double RC, unsigned nSpots, double energy, const RandomEngineAndDistribution* engine)
8  : theR(RC), theNumberOfSpots(nSpots), theSpotEnergy(energy), random(engine) {
9  currentRad = 0.;
11  currentUlim = 0.;
12  nInter = 0;
13 }
14 
15 void RadialInterval::addInterval(double radius, double spotf) {
16  double radiussq = radius * radius;
17  double enFrac = energyFractionInRadius(radius);
18  if (radius > 10)
19  enFrac = 1.;
20  double energyFrac = enFrac - currentEnergyFraction;
21  currentEnergyFraction = enFrac;
22  // std::cout << " Rad " << nInter << " Energy frac " << energyFrac << std::endl;
23 
24  // Calculates the number of spots. Add binomial fluctuations
25  double dspot =
26  random->gaussShoot(theNumberOfSpots * energyFrac, sqrt(energyFrac * (1. - energyFrac) * theNumberOfSpots));
27  // std::cout << " Normal : " << theNumberOfSpots*energyFrac << " "<< dspot << std::endl;
28  unsigned nspot = (unsigned)(dspot * spotf + 0.5);
29  // if(nspot<100)
30  // {
31  // spotf=1.;
32  // nspot=(unsigned)(theNumberOfSpots*energyFrac+0.5);
33  // }
34 
35  dspotsunscaled.push_back(dspot);
36  spotfraction.push_back(spotf);
37 
38  double spotEnergy = theSpotEnergy / spotf;
39  // std::cout << " The number of spots " << theNumberOfSpots << " " << nspot << std::endl;
40 
41  // This is not correct for the last interval, but will be overriden later
42  nspots.push_back(nspot);
43  spotE.push_back(spotEnergy);
44  // computes the limits
45  double umax = radiussq / (radiussq + theR * theR);
46  if (radius > 10) {
47  umax = 1.;
48  }
49 
50  // Stores the limits
51  uMax.push_back(umax);
52  uMin.push_back(currentUlim);
53  currentUlim = umax;
54 
55  // Stores the energy
56  // std::cout << " SpotE " << theSpotEnergy<< " " << spotf << " " << theSpotEnergy/spotf<< std::endl;
57 
58  ++nInter;
59 }
60 
62  double rm2 = rm * rm;
63  return (rm2 / (rm2 + theR * theR));
64 }
65 
67  // std::cout << " The number of Spots " << theNumberOfSpots << std::endl;
68  // std::cout << " Size : " << nInter << " " << nspots.size() << " " << dspotsunscaled.size() << std::endl;
69  double ntotspots = 0.;
70  for (unsigned irad = 0; irad < nInter - 1; ++irad) {
71  ntotspots += dspotsunscaled[irad];
72  // std::cout << " In the loop " << ntotspots << std::endl;
73  }
74 
75  // This can happen (fluctuations)
76  if (ntotspots > theNumberOfSpots)
77  ntotspots = (double)theNumberOfSpots;
78  // std::cout << " Sous-total " << ntotspots << std::endl;
79  dspotsunscaled[nInter - 1] = (double)theNumberOfSpots - ntotspots;
80 
81  nspots[nInter - 1] = (unsigned)(dspotsunscaled[nInter - 1] * spotfraction[nInter - 1] + 0.5);
82  // std::cout << " Nlast " << nspots[nInter-1] << std::endl;
83 }
RadialInterval::addInterval
void addInterval(double, double)
Definition: RadialInterval.cc:15
RadialInterval::theSpotEnergy
double theSpotEnergy
Definition: RadialInterval.h:53
RadialInterval::currentEnergyFraction
double currentEnergyFraction
Definition: RadialInterval.h:49
RadialInterval::uMin
std::vector< double > uMin
Definition: RadialInterval.h:56
RandomEngineAndDistribution.h
RadialInterval::nspots
std::vector< unsigned > nspots
Definition: RadialInterval.h:58
RadialInterval::energyFractionInRadius
double energyFractionInRadius(double rm)
Definition: RadialInterval.cc:61
RadialInterval::uMax
std::vector< double > uMax
Definition: RadialInterval.h:57
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
RadialInterval::RadialInterval
RadialInterval(double RC, unsigned nSpots, double energy, const RandomEngineAndDistribution *engine)
Standard constructor Rc: mean Radius.
Definition: RadialInterval.cc:7
HCALHighEnergyHPDFilter_cfi.energy
energy
Definition: HCALHighEnergyHPDFilter_cfi.py:5
submit.rm
rm
Definition: submit.py:77
RadialInterval::theR
double theR
Definition: RadialInterval.h:51
RadialInterval::compute
void compute()
Definition: RadialInterval.cc:66
RadialInterval::random
const RandomEngineAndDistribution * random
Definition: RadialInterval.h:68
RadialInterval::theNumberOfSpots
unsigned theNumberOfSpots
Definition: RadialInterval.h:52
RadialInterval::spotE
std::vector< double > spotE
Definition: RadialInterval.h:59
RadialInterval::nInter
unsigned nInter
Definition: RadialInterval.h:54
RadialInterval::currentUlim
double currentUlim
Definition: RadialInterval.h:50
RadialInterval::spotfraction
std::vector< double > spotfraction
Definition: RadialInterval.h:61
RadialInterval::dspotsunscaled
std::vector< double > dspotsunscaled
Definition: RadialInterval.h:60
RadialInterval::currentRad
double currentRad
Definition: RadialInterval.h:48
CosmicsPD_Skims.radius
radius
Definition: CosmicsPD_Skims.py:135
RadialInterval.h
RandomEngineAndDistribution::gaussShoot
double gaussShoot(double mean=0.0, double sigma=1.0) const
Definition: RandomEngineAndDistribution.h:29
RandomEngineAndDistribution
Definition: RandomEngineAndDistribution.h:18