CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
EMECALShowerParametrization.h
Go to the documentation of this file.
1 #ifndef EMECALShowerParametrization_H
2 #define EMECALShowerParametrization_H
3 
8 
16 #include <vector>
17 #include <cmath>
18 
20 {
21  public:
22 
24  const HCALProperties* hcal,
25  const PreshowerLayer1Properties* layer1,
26  const PreshowerLayer2Properties* layer2,
27  const std::vector<double>& coreIntervals,
28  const std::vector<double>& tailIntervals,
29  double RCFact=1.,
30  double RTFact=1.) :
31  theECAL(ecal),
32  theHCAL(hcal),
33  theLayer1(layer1),
34  theLayer2(layer2),
35  theCore(coreIntervals),
36  theTail(tailIntervals),
37  theRcfactor(RCFact),
38  theRtfactor(RTFact){}
39 
41 
42 
43  //====== Longitudinal profiles =======
44 
45  // -------- Average -------
46 
47  inline double meanT(double lny) const {
48  if (theECAL->isHom()) return meanTHom(lny);
49  return meanTSam(lny); }
50 
51  inline double meanAlpha(double lny) const {
52  if (theECAL->isHom()) return meanAlphaHom(lny);
53  return meanAlphaSam(lny); }
54 
55 
56  // Average Homogeneous
57 
58  inline double meanTHom(double lny) const {
59  return lny-0.858; }
60 
61  inline double meanAlphaHom(double lny) const {
62  return 0.21+(0.492+2.38/theECAL->theZeff())*lny; }
63 
64 
65  // Average sampling
66 
67 
68  inline double meanTSam(double lny) const {
69  return meanTHom(lny) - 0.59/theECAL->theFs() - 0.53*(1.-theECAL->ehat()); }
70 
71  inline double meanAlphaSam(double lny) const {
72  return meanAlphaHom(lny) - 0.444/theECAL->theFs(); }
73 
74 
75 
76 
77 
78 
79 
80  // ---- Fluctuated longitudinal profiles ----
81 
82  inline double meanLnT(double lny) const {
83  if (theECAL->isHom()) return meanLnTHom(lny);
84  return meanLnTSam(lny); }
85 
86  inline double sigmaLnT(double lny) const {
87  if (theECAL->isHom()) return sigmaLnTHom(lny);
88  return sigmaLnTSam(lny); }
89 
90 
91  inline double meanLnAlpha(double lny) const {
92  if (theECAL->isHom()) return meanLnAlphaHom(lny);
93  return meanLnAlphaSam(lny); }
94 
95 
96  inline double sigmaLnAlpha(double lny) const {
97  if (theECAL->isHom()) return sigmaLnAlphaHom(lny);
98  return sigmaLnAlphaSam(lny); }
99 
100 
101  inline double correlationAlphaT(double lny) const {
102  if (theECAL->isHom()) return correlationAlphaTHom(lny);
103  return correlationAlphaTSam(lny); }
104 
105 
106 
107 
108  // Fluctuated longitudinal profiles homogeneous
109 
110  inline double meanLnTHom(double lny) const {
111  return std::log(lny-0.812); }
112 
113 
114  inline double sigmaLnTHom(double lny) const {
115  return 1./(-1.4+1.26*lny); }
116 
117  inline double meanLnAlphaHom(double lny) const {
118  return std::log(0.81+(0.458+2.26/theECAL->theZeff())*lny); }
119 
120  inline double sigmaLnAlphaHom(double lny) const {
121  return 1./(-0.58+0.86*lny); }
122 
123  inline double correlationAlphaTHom(double lny) const {
124  return 0.705-0.023*lny; }
125 
126  // Fluctuated longitudinal profiles sampling
127 
128 
129  inline double meanLnTSam(double lny) const {
130  return log( std::exp(meanLnTHom(lny)) - 0.55/theECAL->theFs() - 0.69*(1-theECAL->ehat()) ); }
131 
132  inline double sigmaLnTSam(double lny) const {
133  return 1/(-2.5 + 1.25*lny); }
134 
135  inline double meanLnAlphaSam(double lny) const {
136  return log( std::exp(meanLnAlphaHom(lny)) - 0.476/theECAL->theZeff() ); }
137 
138  inline double sigmaLnAlphaSam(double lny) const {
139  return 1./(-0.82+0.79*lny); }
140 
141  inline double correlationAlphaTSam(double lny) const {
142  return 0.784-0.023*lny; }
143 
144 
145 
146 
147 
148 
149  //====== Radial profiles =======
150 
151 
152  // ---- Radial Profiles ----
153 
154  inline double rC(double tau, double E) const {
155  if (theECAL->isHom()) return rCHom(tau, E);
156  return rCSam(tau, E); }
157 
158  inline double rT(double tau, double E) const {
159  if (theECAL->isHom()) return rTHom(tau, E);
160  return rTSam(tau, E); }
161 
162  inline double p(double tau, double E) const {
163  if (theECAL->isHom()) return pHom(tau, E);
164  return pSam(tau, E); }
165 
166 
167 
168  // Radial Profiles
169 
170  inline double rCHom(double tau, double E) const {
171  return theRcfactor*(z1(E) + z2()*tau);
172  }
173 
174  inline double rTHom(double tau,double E) const {
175  return theRtfactor*k1() * ( std::exp(k3()*(tau-k2()))+
176  std::exp(k4(E)*(tau-k2())) );
177  }
178 
179  inline double pHom(double tau, double E) const {
180  double arg = (p2()-tau)/p3(E);
181  return p1()* std::exp(arg-std::exp(arg));
182  }
183 
184 
185  // Radial Profiles Sampling
186 
187  inline double rCSam(double tau, double E) const {
188  return rCHom(tau, E) - 0.0203*(1-theECAL->ehat()) + 0.0397/theECAL->theFs()*std::exp(-1.*tau);
189  }
190 
191  inline double rTSam(double tau,double E) const {
192  return rTHom(tau, E) -0.14*(1-theECAL->ehat()) - 0.495/theECAL->theFs()*std::exp(-1.*tau);
193  }
194 
195  inline double pSam(double tau, double E) const {
196  return pHom(tau, E) + (1-theECAL->ehat())*(0.348-0.642/theECAL->theFs()*std::exp(-1.*std::pow((tau-1),2) ) );
197  }
198 
199 
200 
201 
202 
203 
204  // ---- Fluctuations of the radial profiles ----
205 
206  inline double nSpots(double E) const {
207  if (theECAL->isHom()) return nSpotsHom(E);
208  return nSpotsSam(E); }
209 
210  inline double meanTSpot(double T) const {
211  if (theECAL->isHom()) return meanTSpotHom(T);
212  return meanTSpotSam(T); }
213 
214  inline double meanAlphaSpot(double alpha) const {
215  if (theECAL->isHom()) return meanAlphaSpotHom(alpha);
216  return meanAlphaSpotSam(alpha); }
217 
218 
219 
220 
221  // Fluctuations of the radial profiles
222 
223  inline double nSpotsHom(double E) const {
224  return 93.*std::log(theECAL->theZeff()) * std::pow(E,0.876); }
225 
226  inline double meanTSpotHom(double T) const {
227  return T*(0.698+0.00212*theECAL->theZeff()); }
228 
229  inline double meanAlphaSpotHom(double alpha) const {
230  return alpha*(0.639+0.00334*theECAL->theZeff()); }
231 
232 
233  // Fluctuations of the radial profiles Sampling
234 
235  inline double nSpotsSam(double E) const {
236  return 10.3/theECAL->resE()*std::pow(E, 0.959); }
237 
238  inline double meanTSpotSam(double T) const {
239  return meanTSpotHom(T)*(0.813+0.0019*theECAL->theZeff()); }
240 
241  inline double meanAlphaSpotSam(double alpha) const {
242  return meanAlphaSpotHom(alpha)*(0.844+0.0026*theECAL->theZeff()); }
243 
244 
245 
246 
247 
248  inline const ECALProperties* ecalProperties() const {
249  return theECAL;
250  }
251 
252  inline const HCALProperties* hcalProperties() const {
253  return theHCAL;
254  }
255 
257  return theLayer1;
258  }
259 
261  return theLayer2;
262  }
263 
264  inline const std::vector<double>& getCoreIntervals() const { return theCore;}
265 
266  inline const std::vector<double>& getTailIntervals() const { return theTail;}
267 
268  private:
269 
274 
275  const std::vector<double>& theCore;
276  const std::vector<double>& theTail;
277 
278  double theRcfactor;
279  double theRtfactor;
280 
281  double p1() const { return 2.632-0.00094*theECAL->theZeff(); }
282  double p2() const { return 0.401+0.00187*theECAL->theZeff(); }
283  double p3(double E) const { return 1.313-0.0686*std::log(E); }
284 
285  double z1(double E) const { return 0.0251+0.00319*std::log(E); }
286  double z2() const { return 0.1162-0.000381*theECAL->theZeff(); }
287 
288  double k1() const { return 0.6590-0.00309*theECAL->theZeff(); }
289  double k2() const { return 0.6450; }
290  double k3() const { return -2.59; }
291  double k4(double E) const { return 0.3585+0.0421*std::log(E); }
292 
293 };
294 
295 #endif
float alpha
Definition: AMPTWrapper.h:95
double sigmaLnT(double lny) const
const HCALProperties * hcalProperties() const
double meanAlphaSpot(double alpha) const
double rTSam(double tau, double E) const
double pSam(double tau, double E) const
double meanAlphaSpotSam(double alpha) const
double correlationAlphaTSam(double lny) const
double theZeff() const
Effective Z: 68.36 for Standard ECAL.
double sigmaLnTSam(double lny) const
EMECALShowerParametrization(const ECALProperties *ecal, const HCALProperties *hcal, const PreshowerLayer1Properties *layer1, const PreshowerLayer2Properties *layer2, const std::vector< double > &coreIntervals, const std::vector< double > &tailIntervals, double RCFact=1., double RTFact=1.)
double rC(double tau, double E) const
double meanAlphaHom(double lny) const
bool isHom() const
a rough estimate of ECAL resolution sigma/E = resE/sqrt(E)
const PreshowerLayer1Properties * theLayer1
A arg
Definition: Factorize.h:36
const std::vector< double > & getTailIntervals() const
const std::vector< double > & getCoreIntervals() const
double sigmaLnAlphaSam(double lny) const
const PreshowerLayer2Properties * theLayer2
double rCSam(double tau, double E) const
double meanLnTSam(double lny) const
double sigmaLnAlphaHom(double lny) const
double ehat() const
ehat = e/mip of the calorimeter. 0 for homogeneous one
double meanAlphaSpotHom(double alpha) const
double meanLnAlphaSam(double lny) const
const std::vector< double > & theCore
double rT(double tau, double E) const
const std::vector< double > & theTail
double meanAlphaSam(double lny) const
const PreshowerLayer1Properties * layer1Properties() const
double correlationAlphaT(double lny) const
double meanTHom(double lny) const
double theFs() const
Sampling fraction Fs of the calorimeter. 0 for homogeneous one.
const ECALProperties * ecalProperties() const
double meanLnTHom(double lny) const
double rTHom(double tau, double E) const
double p(double tau, double E) const
double meanLnAlphaHom(double lny) const
const PreshowerLayer2Properties * layer2Properties() const
double meanLnAlpha(double lny) const
double meanTSam(double lny) const
double sigmaLnTHom(double lny) const
double meanAlpha(double lny) const
double rCHom(double tau, double E) const
double sigmaLnAlpha(double lny) const
double correlationAlphaTHom(double lny) const
long double T
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
double pHom(double tau, double E) const
double resE() const
a rough estimate of ECAL resolution sigma/E = resE/sqrt(E)