All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
photonCorrector.cc
Go to the documentation of this file.
1 #include "photonCorrector.h"
2 
3 #include <iostream>
4 #include <math.h>
5 #include <cassert>
6 #include <streamlog/streamlog.h>
7 
8 using std::endl;
9 
10 
11 void photonCorrector::set_energyCorr_linearise ( std::vector <float> pars ) {
12  if ( pars.size() != 2 ) {
13  streamlog_out (ERROR) << "Wrong number of parameters for energyCorr_linearise ! expecting 2 got " << pars.size() << std::endl;
14  assert(0);
15  } else {
16  _energyLin_const = pars[0];
17  _energyLin_logen = pars[1];
18  }
19  return;
20 }
21 void photonCorrector::set_energyCorr_barrelPhi ( std::vector <float> pars ) {
22  if ( pars.size() != 5 ) {
23  streamlog_out (ERROR) << "Wrong number of parameters for energyCorr_barrelPhi ! expecting 5 got " << pars.size() << std::endl;
24  assert(0);
25  } else {
26  _phiBarrelCorr_pos_const = pars[0];
27  _phiBarrelCorr_pos_logen = pars[1];
28  _phiBarrelCorr_depth = pars[2];
29  _phiBarrelCorr_width1 = pars[3];
30  _phiBarrelCorr_width2 = pars[4];
31  }
32 }
33 void photonCorrector::set_energyCorr_costheta ( std::vector <float> pars ) {
34  if ( pars.size() != 12 ) {
35  streamlog_out (ERROR) << "Wrong number of parameters for energyCorr_costheta ! expecting 12 got " << pars.size() << std::endl;
36  assert(0);
37  } else {
40  _costhCorr_gaus1_mean = pars[2];
41  _costhCorr_gaus1_sigm = pars[3];
44  _costhCorr_gaus2_mean = pars[6];
45  _costhCorr_gaus2_sigm = pars[7];
46  _costhCorr_gaus3_norm = pars[8];
47  _costhCorr_gaus3_mean = pars[9];
48  _costhCorr_gaus3_sigm = pars[10];
49  _costhCorr_endcap_scale = pars[11];
50  }
51 }
52 void photonCorrector::set_energyCorr_endcap ( std::vector <float> pars ) {
53  if ( pars.size() != 6 ) {
54  streamlog_out (ERROR) << "Wrong number of parameters for energyCorr_endcap ! expecting 6, got " << pars.size() << std::endl;
55  assert(0);
56  } else {
57  _endcap_gaus1_norm = pars[0];
58  _endcap_gaus1_mean = pars[1];
59  _endcap_gaus1_sigm = pars[2];
60  _endcap_gaus2_norm = pars[3];
61  _endcap_gaus2_mean = pars[4];
62  _endcap_gaus2_sigm = pars[5];
63  }
64 }
65 void photonCorrector::set_phiCorr_barrel ( std::vector <float> pars ) {
66  if ( pars.size() != 18 ) {
67  streamlog_out (ERROR) << "Wrong number of parameters for phiCorr_barrel ! expecting 18 got " << pars.size() << std::endl;
68  assert(0);
69  } else {
70  _phiBias_barrel_p0_1 = pars[0];
71  _phiBias_barrel_p0_2 = pars[1];
72  _phiBias_barrel_p0_3 = pars[2];
73  _phiBias_barrel_p0_4 = pars[3];
74  _phiBias_barrel_p1_1 = pars[4];
75  _phiBias_barrel_p1_2 = pars[5];
76  _phiBias_barrel_p2_1 = pars[6];
77  _phiBias_barrel_p2_2 = pars[7];
78  _phiBias_barrel_p3_1 = pars[8];
79  _phiBias_barrel_p4_1 = pars[9];
80  _phiBias_barrel_p5_1 = pars[10];
81  _phiBias_barrel_p5_2 = pars[11];
82  _phiBias_barrel_p5_3 = pars[12];
83  _phiBias_barrel_p6_1 = pars[13];
84  _phiBias_barrel_p6_2 = pars[14];
85  _phiBias_barrel_p7_1 = pars[15];
86  _phiBias_barrel_p7_2 = pars[16];
87  _phiBias_barrel_p7_3 = pars[17];
88  }
89 }
90 
91 void photonCorrector::set_thetaCorr_barrel ( std::vector <float> pars ) {
92  if ( pars.size() != 4 ) {
93  streamlog_out (ERROR) << "Wrong number of parameters for thetaCorr_barrel ! expecting 4 got " << pars.size() << std::endl;
94  assert(0);
95  } else {
96  _thetaBias_barrel_p0_1 = pars[0];
97  _thetaBias_barrel_p0_2 = pars[1];
98  _thetaBias_barrel_p1_1 = pars[2];
99  _thetaBias_barrel_p1_2 = pars[3];
100  }
101 }
102 
103 void photonCorrector::set_thetaCorr_endcap ( std::vector <float> pars ) {
104  if ( pars.size() != 6 ) {
105  streamlog_out (ERROR) << "Wrong number of parameters for thetaCorr_endcap ! expecting 6 got " << pars.size() << std::endl;
106  assert(0);
107  } else {
108  _thetaBias_endcap_p0_1 = pars[0];
109  _thetaBias_endcap_p0_2 = pars[1];
110  _thetaBias_endcap_p1_1 = pars[2];
111  _thetaBias_endcap_p1_2 = pars[3];
112  _thetaBias_endcap_p2_1 = pars[4];
113  _thetaBias_endcap_p2_2 = pars[5];
114  }
115 }
116 
117 
118 float photonCorrector::photonEnergyCorrection( EVENT::ReconstructedParticle* rp ) {
119  // first correct the energy for gaps
120  float gapCorrEn = gapCompensatedEnergy( rp );
121  // then correct for overall non-linearity
122  return energyLinearise( gapCorrEn );
123 }
124 
126  float logen = log10(en);
127  float energyCorrectionFactor = _energyLin_const + _energyLin_logen*logen;
128  return en/energyCorrectionFactor;
129 }
130 
131 float photonCorrector::gapCompensatedEnergy( EVENT::ReconstructedParticle* rp ) {
132  // returns corrected energy for the input PFO
133  float gapcorrectionFactor(1.0);
134  float en = rp->getEnergy();
135 
136  if ( rp->getType() != 22 ) { // check that it's a photon-like PFO
137  streamlog_out (WARNING) << "gapCompensate designed only for photons! not applying correction" << endl;
138  } else {
139  float cosTheta = rp->getMomentum()[2]/sqrt( pow(rp->getMomentum()[0],2)+pow(rp->getMomentum()[1],2)+pow(rp->getMomentum()[2],2) );
140  float phi = atan2( rp->getMomentum()[1], rp->getMomentum()[0] );
141  gapcorrectionFactor*=gapCompensate_theta( en, cosTheta );
142  if ( fabs(cosTheta) < _barrelendcap_costhlimit ) { // barrel
143  gapcorrectionFactor*=gapCompensate_barrelPhi( en, phi );
144  } else { // endcap
145  float xAcross = getDistanceAcrossEndcapQuadrant( cosTheta, phi );
146  gapcorrectionFactor*=gapCompensate_endcap( xAcross );
147  }
148  }
149  return en*gapcorrectionFactor;
150 }
151 
152 float photonCorrector::gapCompensate_barrelPhi( float en, float phi ) {
153  // correction for phi gaps in barrel
154  float logen = log10(en);
155  float foldphi = getBarrelFoldedPhi(phi);
156  float par_gap_pos = _phiBarrelCorr_pos_const + _phiBarrelCorr_pos_logen*logen;
157  float width = foldphi < par_gap_pos ? _phiBarrelCorr_width1 : _phiBarrelCorr_width2 ;
158  float fitval = 1.;
159  fitval += _phiBarrelCorr_depth * exp ( - pow(foldphi - par_gap_pos, 2)/(2*pow(width,2)) );
160  return 1./fitval;
161 }
162 
163 
164 float photonCorrector::gapCompensate_theta( float en, float costh ) {
165  // correct for gaps in theta
166  float logen = log10(en);
167  float absCosTh = fabs(costh);
168  float par_gaus1_norm = _costhCorr_gaus1_norm_const + _costhCorr_gaus1_norm_logen*logen;
169  float par_gaus2_norm = _costhCorr_gaus2_norm_const + _costhCorr_gaus2_norm_logen*logen;
170 
171  float fitval = 1.;
172  fitval += par_gaus1_norm*exp( -0.5*pow( (absCosTh-_costhCorr_gaus1_mean)/_costhCorr_gaus1_sigm , 2 ) );
173  fitval += par_gaus2_norm*exp( -0.5*pow( (absCosTh-_costhCorr_gaus2_mean)/_costhCorr_gaus2_sigm , 2 ) );
174  fitval += _costhCorr_gaus3_norm*exp( -0.5*pow( (absCosTh-_costhCorr_gaus3_mean)/_costhCorr_gaus3_sigm , 2 ) );
175  if ( absCosTh>_barrelendcap_costhlimit ) fitval*=_costhCorr_endcap_scale;
176 
177  return 1./fitval;
178 }
179 
181  // compensate energy for cracks in endcap. xAcross is the local coord across the endcap quadrant
182  float fitval = 1.;
183  fitval += _endcap_gaus1_norm*exp( -0.5*pow( (xAcross-_endcap_gaus1_mean)/_endcap_gaus1_sigm , 2 ) );
184  fitval += _endcap_gaus2_norm*exp( -0.5*pow( (xAcross-_endcap_gaus2_mean)/_endcap_gaus2_sigm , 2 ) );
185  return 1./fitval;
186 }
187 
188 
189 float photonCorrector::getDistanceAcrossEndcapQuadrant( float costh, float phi ) {
190  // this calculates the distance across an endcap quadrant (ie perpendicular to slab direction),
191  // from the inner edge of quadrant
192  assert( fabs(costh) > _barrelendcap_costhlimit );
193  if ( costh<0 ) _assumed_endZ*=-1;
194  float endX = _assumed_endZ*sin(acos(costh))* cos(phi);
195  float endY = _assumed_endZ*sin(acos(costh))* sin(phi);
196  // which module [quadrant] is the photon pointing at?
197  int quad = -1;
198  if ( costh>0 ) {
199  if ( endX > -_assumed_boxsize && endY > _assumed_boxsize ) quad=0;
200  else if ( endX > _assumed_boxsize && endY < _assumed_boxsize ) quad=1;
201  else if ( endX < _assumed_boxsize && endY < -_assumed_boxsize ) quad=2;
202  else if ( endX < -_assumed_boxsize && endY > -_assumed_boxsize ) quad=3;
203  } else {
204  if ( endX < _assumed_boxsize && endY > _assumed_boxsize ) quad=0;
205  else if ( endX > _assumed_boxsize && endY > -_assumed_boxsize ) quad=1;
206  else if ( endX > -_assumed_boxsize && endY < -_assumed_boxsize ) quad=2;
207  else if ( endX < -_assumed_boxsize && endY < _assumed_boxsize ) quad=3;
208  }
209  float foldY(0);
210  if ( quad>=0 ) { // not in the center box
211  float foldPhi = phi + quad*acos(-1)/2.;
212  foldY = _assumed_endZ*sin(acos(costh))* sin(foldPhi);
213  }
214  return foldY;
215 }
216 
218  // fold the barrel phi into a single octant
219  if ( phi<0 ) phi+=2*acos(-1);
220  int sector = phi/(acos(-1)/4);
221  float foldedPhi = phi - sector*acos(-1)/4.;
222  return foldedPhi;
223 }
224 
225 void photonCorrector::photonDirectionCorrection( EVENT::ReconstructedParticle* rp , float& cor_theta, float& cor_phi ) {
226  // returns corrected direction (theta, phi) of photon PFOs
227  float origEn = rp->getEnergy();
228  float p(0);
229  for (int i=0; i<3; i++) {
230  p+=pow(rp->getMomentum()[i],2);
231  }
232  p=sqrt(p);
233  float origCosth=rp->getMomentum()[2]/p;
234  float origTheta=acos(origCosth);
235  float origPhi=atan2(rp->getMomentum()[1],rp->getMomentum()[0]);
236  cor_theta = getCorrectedTheta ( origEn, origTheta );
237  cor_phi = getCorrectedPhi ( origEn, origCosth, origPhi );
238  return;
239 }
240 
241 
242 float photonCorrector::getBarrelCorrectedPhi( float en, float phi ) {
243  // phi dorection corrention in the barrel
244  float logen=log10(en);
245  float phifold=getBarrelFoldedPhi( phi );
246  float par[8]={0};
247 
248  // # energy dependence of function parameters
251  if (par[1]<0.) par[1]=0.;
253  par[3]=_phiBias_barrel_p3_1;
254  par[4]=_phiBias_barrel_p4_1;
255  par[5]=_phiBias_barrel_p5_1 + logen*_phiBias_barrel_p5_2 + pow( logen, 2)*_phiBias_barrel_p5_3;
257  par[7]=_phiBias_barrel_p7_1 + logen*_phiBias_barrel_p7_2 + pow( logen, 2)*_phiBias_barrel_p7_3;
258 
259  // # and the function
260  float y = par[0]; // # constant
261  y = y + par[1]*exp( -0.5*pow( (phifold-par[2])/par[3] , 2 ) ); // # gaussian
262  y = y + par[4]*sin(4*phifold); // # sinusoidal
263  y = y + par[5]*sin(8*phifold);
264  y = y + par[6]*sin(12*phifold);
265  y = y + par[7]*sin(16*phifold);
266  return phi - y;
267 }
268 
269 float photonCorrector::getCorrectedPhi ( float en, float costh, float phi ) {
270  float corPhi(phi);
271  if ( fabs(costh) < _barrelendcap_costhlimit ) {
272  corPhi=getBarrelCorrectedPhi( en, phi );
273  }
274  return corPhi;
275 }
276 
277 float photonCorrector::getBarrelCorrectedTheta( float en, float theta ) {
278  // correct theta in the barrel
279  float costh = cos(theta);
280  float newtheta(theta);
281  if (abs(costh)<_barrelendcap_costhlimit) {
282  float logen=log10(en);
283  float par[2]={0};
284  // energy dependence of function parameters
287  // and the function
288  float y = par[0]*costh + par[1]*( 4*pow(costh,3) -3*costh );
289  newtheta = theta - y;
290  }
291  return newtheta;
292 }
293 
294 float photonCorrector::getEndcapCorrectedTheta( float en, float theta ) {
295  // correct theta in the endcap
296  float logen=log10(en);
297  float foldTheta = theta;
298  if ( theta>acos(-1)/2. ) {
299  foldTheta = acos(-1.) - theta;
300  }
301  float par[3]={0};
305  float cor = par[0] + par[1]*foldTheta + par[2]*pow(foldTheta,2.);
306  if (theta>acos(-1)/2.) {
307  cor *= -1;
308  }
309  return theta-cor;
310 }
311 
312 float photonCorrector::getCorrectedTheta ( float en, float theta ) {
313  // returns corrected theta
314  float corTheta(theta);
315  float abscth= fabs(cos(theta));
316  if (abscth < _barrelendcap_costhlimit - 0.05 ) { // don't correct overlap region for now
317  corTheta = getBarrelCorrectedTheta( en, theta );
318  } else if ( abscth > _barrelendcap_costhlimit && abscth < cos(atan(_assumed_boxsize/_assumed_endZ)) ) {
319  corTheta = getEndcapCorrectedTheta( en, theta );
320  }
321  return corTheta;
322 }
323 
324 
326 
327  streamlog_out (MESSAGE) << "photonCorrector::printParams" << endl;
328  streamlog_out (MESSAGE) << "barrelendcap_limit " << get_barrelendcap_limit () << endl;
329  streamlog_out (MESSAGE) << "energyLin_const " << get_energyLin_const () << endl;
330  streamlog_out (MESSAGE) << "energyLin_logen " << get_energyLin_logen () << endl;
331  streamlog_out (MESSAGE) << "phiBarrelCorr_pos_const " << get_phiBarrelCorr_pos_const () << endl;
332  streamlog_out (MESSAGE) << "phiBarrelCorr_pos_logen " << get_phiBarrelCorr_pos_logen () << endl;
333  streamlog_out (MESSAGE) << "phiBarrelCorr_depth " << get_phiBarrelCorr_depth () << endl;
334  streamlog_out (MESSAGE) << "phiBarrelCorr_width1 " << get_phiBarrelCorr_width1 () << endl;
335  streamlog_out (MESSAGE) << "phiBarrelCorr_width2 " << get_phiBarrelCorr_width2 () << endl;
336  streamlog_out (MESSAGE) << "costhCorr_gaus1_norm_const " << get_costhCorr_gaus1_norm_const () << endl;
337  streamlog_out (MESSAGE) << "costhCorr_gaus1_norm_logen " << get_costhCorr_gaus1_norm_logen () << endl;
338  streamlog_out (MESSAGE) << "costhCorr_gaus1_mean " << get_costhCorr_gaus1_mean () << endl;
339  streamlog_out (MESSAGE) << "costhCorr_gaus1_sigm " << get_costhCorr_gaus1_sigm () << endl;
340  streamlog_out (MESSAGE) << "costhCorr_gaus2_norm_const " << get_costhCorr_gaus2_norm_const () << endl;
341  streamlog_out (MESSAGE) << "costhCorr_gaus2_norm_logen " << get_costhCorr_gaus2_norm_logen () << endl;
342  streamlog_out (MESSAGE) << "costhCorr_gaus2_mean " << get_costhCorr_gaus2_mean () << endl;
343  streamlog_out (MESSAGE) << "costhCorr_gaus2_sigm " << get_costhCorr_gaus2_sigm () << endl;
344  streamlog_out (MESSAGE) << "costhCorr_gaus3_norm " << get_costhCorr_gaus3_norm () << endl;
345  streamlog_out (MESSAGE) << "costhCorr_gaus3_mean " << get_costhCorr_gaus3_mean () << endl;
346  streamlog_out (MESSAGE) << "costhCorr_gaus3_sigm " << get_costhCorr_gaus3_sigm () << endl;
347  streamlog_out (MESSAGE) << "costhCorr_endcap_scale " << get_costhCorr_endcap_scale () << endl;
348  streamlog_out (MESSAGE) << "endcap_gaus1_norm " << get_endcap_gaus1_norm () << endl;
349  streamlog_out (MESSAGE) << "endcap_gaus1_mean " << get_endcap_gaus1_mean () << endl;
350  streamlog_out (MESSAGE) << "endcap_gaus1_sigm " << get_endcap_gaus1_sigm () << endl;
351  streamlog_out (MESSAGE) << "endcap_gaus2_norm " << get_endcap_gaus2_norm () << endl;
352  streamlog_out (MESSAGE) << "endcap_gaus2_mean " << get_endcap_gaus2_mean () << endl;
353  streamlog_out (MESSAGE) << "endcap_gaus2_sigm " << get_endcap_gaus2_sigm () << endl;
354  streamlog_out (MESSAGE) << "assumed_boxsize " << get_assumed_boxsize () << endl;
355  streamlog_out (MESSAGE) << "assumed_endZ " << get_assumed_endZ () << endl;
356 
357  streamlog_out (MESSAGE) << "phiBias_barrel_p0_1 " << get_phiBias_barrel_p0_1 () << endl;
358  streamlog_out (MESSAGE) << "phiBias_barrel_p0_2 " << get_phiBias_barrel_p0_2 () << endl;
359  streamlog_out (MESSAGE) << "phiBias_barrel_p0_3 " << get_phiBias_barrel_p0_3 () << endl;
360  streamlog_out (MESSAGE) << "phiBias_barrel_p0_4 " << get_phiBias_barrel_p0_4 () << endl;
361  streamlog_out (MESSAGE) << "phiBias_barrel_p1_1 " << get_phiBias_barrel_p1_1 () << endl;
362  streamlog_out (MESSAGE) << "phiBias_barrel_p1_2 " << get_phiBias_barrel_p1_2 () << endl;
363  streamlog_out (MESSAGE) << "phiBias_barrel_p2_1 " << get_phiBias_barrel_p2_1 () << endl;
364  streamlog_out (MESSAGE) << "phiBias_barrel_p2_2 " << get_phiBias_barrel_p2_2 () << endl;
365  streamlog_out (MESSAGE) << "phiBias_barrel_p3_1 " << get_phiBias_barrel_p3_1 () << endl;
366  streamlog_out (MESSAGE) << "phiBias_barrel_p4_1 " << get_phiBias_barrel_p4_1 () << endl;
367  streamlog_out (MESSAGE) << "phiBias_barrel_p5_1 " << get_phiBias_barrel_p5_1 () << endl;
368  streamlog_out (MESSAGE) << "phiBias_barrel_p5_2 " << get_phiBias_barrel_p5_2 () << endl;
369  streamlog_out (MESSAGE) << "phiBias_barrel_p5_3 " << get_phiBias_barrel_p5_3 () << endl;
370  streamlog_out (MESSAGE) << "phiBias_barrel_p6_1 " << get_phiBias_barrel_p6_1 () << endl;
371  streamlog_out (MESSAGE) << "phiBias_barrel_p6_2 " << get_phiBias_barrel_p6_2 () << endl;
372  streamlog_out (MESSAGE) << "phiBias_barrel_p7_1 " << get_phiBias_barrel_p7_1 () << endl;
373  streamlog_out (MESSAGE) << "phiBias_barrel_p7_2 " << get_phiBias_barrel_p7_2 () << endl;
374  streamlog_out (MESSAGE) << "phiBias_barrel_p7_3 " << get_phiBias_barrel_p7_3 () << endl;
375 
376  streamlog_out (MESSAGE) << "thetaBias_barrel_p0_1 " << get_thetaBias_barrel_p0_1 () << endl;
377  streamlog_out (MESSAGE) << "thetaBias_barrel_p0_2 " << get_thetaBias_barrel_p0_2 () << endl;
378  streamlog_out (MESSAGE) << "thetaBias_barrel_p1_1 " << get_thetaBias_barrel_p1_1 () << endl;
379  streamlog_out (MESSAGE) << "thetaBias_barrel_p1_2 " << get_thetaBias_barrel_p1_2 () << endl;
380 
381  streamlog_out (MESSAGE) << "thetaBias_endcap_p0_1 " << get_thetaBias_endcap_p0_1 () << endl;
382  streamlog_out (MESSAGE) << "thetaBias_endcap_p0_2 " << get_thetaBias_endcap_p0_2 () << endl;
383  streamlog_out (MESSAGE) << "thetaBias_endcap_p1_1 " << get_thetaBias_endcap_p1_1 () << endl;
384  streamlog_out (MESSAGE) << "thetaBias_endcap_p1_2 " << get_thetaBias_endcap_p1_2 () << endl;
385  streamlog_out (MESSAGE) << "thetaBias_endcap_p2_1 " << get_thetaBias_endcap_p2_1 () << endl;
386  streamlog_out (MESSAGE) << "thetaBias_endcap_p2_2 " << get_thetaBias_endcap_p2_2 () << endl;
387 
388 
389  return;
390 
391 }
float _costhCorr_gaus2_norm_const
float get_phiBarrelCorr_pos_logen()
float get_phiBias_barrel_p0_4()
float getEndcapCorrectedTheta(float en, float theta)
float get_phiBias_barrel_p5_3()
float get_endcap_gaus2_mean()
void set_energyCorr_costheta(std::vector< float > pars)
float get_phiBias_barrel_p2_2()
void set_energyCorr_linearise(std::vector< float > pars)
float getDistanceAcrossEndcapQuadrant(float costh, float phi)
float _phiBarrelCorr_pos_const
float gapCompensatedEnergy(EVENT::ReconstructedParticle *rp)
float get_phiBias_barrel_p1_2()
float _thetaBias_endcap_p0_2
float get_endcap_gaus2_sigm()
float _costhCorr_gaus1_norm_logen
float get_costhCorr_gaus1_mean()
float get_phiBias_barrel_p2_1()
void set_phiCorr_barrel(std::vector< float > pars)
float get_phiBias_barrel_p5_2()
float get_phiBarrelCorr_pos_const()
float photonEnergyCorrection(EVENT::ReconstructedParticle *rp)
float _costhCorr_gaus1_norm_const
float get_assumed_boxsize()
float get_thetaBias_endcap_p2_2()
float get_phiBias_barrel_p0_1()
float get_thetaBias_endcap_p1_2()
float _thetaBias_barrel_p0_1
float get_phiBias_barrel_p7_3()
float get_thetaBias_endcap_p2_1()
float get_phiBias_barrel_p7_2()
float _thetaBias_endcap_p1_1
void photonDirectionCorrection(EVENT::ReconstructedParticle *rp, float &cor_theta, float &cor_phi)
float gapCompensate_endcap(float xAcross)
float get_phiBias_barrel_p6_2()
float get_phiBarrelCorr_depth()
float get_phiBias_barrel_p1_1()
float _thetaBias_endcap_p1_2
float get_thetaBias_endcap_p0_1()
float getBarrelFoldedPhi(float phi)
float _thetaBias_barrel_p1_1
float get_costhCorr_gaus2_norm_logen()
float get_phiBias_barrel_p5_1()
void set_thetaCorr_barrel(std::vector< float > pars)
float get_phiBias_barrel_p0_3()
float get_endcap_gaus1_norm()
float get_costhCorr_gaus2_sigm()
float get_costhCorr_gaus3_mean()
float get_energyLin_const()
float _thetaBias_endcap_p2_1
float get_barrelendcap_limit()
void set_thetaCorr_endcap(std::vector< float > pars)
float get_assumed_endZ()
float get_phiBias_barrel_p7_1()
float getBarrelCorrectedTheta(float en, float theta)
float get_costhCorr_gaus2_norm_const()
float get_thetaBias_barrel_p0_2()
float get_costhCorr_gaus3_norm()
float _thetaBias_barrel_p0_2
float get_endcap_gaus1_sigm()
float get_phiBias_barrel_p0_2()
float get_costhCorr_gaus1_norm_logen()
float _costhCorr_gaus2_norm_logen
float _thetaBias_endcap_p2_2
float get_phiBias_barrel_p3_1()
float get_phiBarrelCorr_width2()
float get_thetaBias_barrel_p1_2()
float get_costhCorr_gaus1_norm_const()
float get_costhCorr_gaus2_mean()
float _barrelendcap_costhlimit
float get_phiBias_barrel_p4_1()
float get_phiBias_barrel_p6_1()
float get_phiBarrelCorr_width1()
float gapCompensate_barrelPhi(float en, float phi)
float get_thetaBias_barrel_p0_1()
float get_costhCorr_gaus1_sigm()
float get_costhCorr_gaus3_sigm()
float get_thetaBias_endcap_p0_2()
float get_endcap_gaus2_norm()
void set_energyCorr_endcap(std::vector< float > pars)
void set_energyCorr_barrelPhi(std::vector< float > pars)
float get_thetaBias_endcap_p1_1()
float get_costhCorr_endcap_scale()
float _thetaBias_endcap_p0_1
float getCorrectedTheta(float en, float theta)
float getBarrelCorrectedPhi(float en, float phi)
float gapCompensate_theta(float en, float costh)
float get_energyLin_logen()
float get_endcap_gaus1_mean()
float energyLinearise(float en)
float _thetaBias_barrel_p1_2
float _phiBarrelCorr_pos_logen
float _costhCorr_endcap_scale
float getCorrectedPhi(float en, float costh, float phi)
float get_thetaBias_barrel_p1_1()