CMS 3D CMS Logo

SigmaPtDiff.h
Go to the documentation of this file.
1 #ifndef SigmaPtDiff_h
2 #define SigmaPtDiff_h
3 
4 #include <vector>
5 #include <cmath>
6 
7 class SigmaPt
8 {
9  public:
10  SigmaPt( const std::vector<double> & parameters_,
11  const std::vector<double> & errors_ )
12  {
13  setParErr(parameters_, errors_);
14  }
15 
16  SigmaPt() {};
17 
18  void setParErr( const std::vector<double> & parameters,
19  const std::vector<double> & errors )
20  {
21  b_0 = parameters[0];
22  b_1 = parameters[5];
23  b_2 = parameters[1];
24  b_3 = parameters[7];
25  b_4 = parameters[8];
26  sb_0 = errors[0];
27  sb_1 = errors[5];
28  sb_2 = errors[1];
29  sb_3 = errors[7];
30  sb_4 = errors[8];
31  c = b_2 + b_3*(b_0 - b_4)*(b_0 - b_4) - b_1*b_0*b_0;
32  }
33 
34  double operator()(const double & eta)
35  {
36  if( fabs(eta) <= b_0 ) {
37  return( c + b_1*eta*eta );
38  }
39  return( b_2 + b_3*(fabs(eta) - b_4)*(fabs(eta) - b_4) );
40  }
41  double sigma(const double & eta)
42  {
43  if( fabs(eta) <= b_0 ) {
44  return sqrt( (eta*eta - b_0*b_0)*(eta*eta - b_0*b_0)*sb_1*sb_1 +
45  sb_2*sb_2 +
46  pow(b_0 - b_4, 4)*sb_3*sb_3 +
47  pow(-2*b_3*pow(b_0-b_4,2), 2)*sb_4*sb_4 +
48  pow(2*b_3*(b_0 - b_4) - 2*b_1*b_0, 2)*sb_0*sb_0 );
49  }
50  return sqrt( sb_2*sb_2 +
51  pow(fabs(eta) - b_4, 4)*sb_3*sb_3 +
52  pow(-2*b_3*pow(fabs(eta)-b_4,2), 2)*sb_4*sb_4 );
53  }
54 
55  protected:
56  double b_0;
57  double b_1;
58  double b_2;
59  double b_3;
60  double b_4;
61  double c;
62 
63  double sb_0;
64  double sb_1;
65  double sb_2;
66  double sb_3;
67  double sb_4;
68 };
69 
72 {
73  public:
75  {
76  std::vector<double> parameters;
77  std::vector<double> errors;
78  parameters.push_back(1.66);
79  parameters.push_back(0.021);
80  parameters.push_back(0.);
81  parameters.push_back(0.);
82  parameters.push_back(0.);
83  parameters.push_back(0.0058);
84  parameters.push_back(0.);
85  parameters.push_back(0.03);
86  parameters.push_back(1.8);
87  parameters.push_back(0.);
88  parameters.push_back(0.);
89  parameters.push_back(0.);
90  parameters.push_back(0.);
91  parameters.push_back(0.);
92  parameters.push_back(0.);
93  errors.push_back(0.09);
94  errors.push_back(0.002);
95  errors.push_back(0.);
96  errors.push_back(0.);
97  errors.push_back(0.);
98  errors.push_back(0.0009);
99  errors.push_back(0.);
100  errors.push_back(0.03);
101  errors.push_back(0.3);
102  errors.push_back(0.);
103  errors.push_back(0.);
104  errors.push_back(0.);
105  errors.push_back(0.);
106  errors.push_back(0.);
107  errors.push_back(0.);
108 
109  sigmaPt.setParErr( parameters, errors );
110  }
111  double etaByPoints(const double & eta)
112  {
113  if( eta <= -2.2 ) return 0.0233989;
114  else if( eta <= -2.0 ) return 0.0197057;
115  else if( eta <= -1.8 ) return 0.014693;
116  else if( eta <= -1.6 ) return 0.0146727;
117  else if( eta <= -1.4 ) return 0.0141323;
118  else if( eta <= -1.2 ) return 0.0159712;
119  else if( eta <= -1.0 ) return 0.0117224;
120  else if( eta <= -0.8 ) return 0.010726;
121  else if( eta <= -0.6 ) return 0.0104777;
122  else if( eta <= -0.4 ) return 0.00814458;
123  else if( eta <= -0.2 ) return 0.00632501;
124  else if( eta <= 0.0 ) return 0.00644172;
125  else if( eta <= 0.2 ) return 0.00772645;
126  else if( eta <= 0.4 ) return 0.010103;
127  else if( eta <= 0.6 ) return 0.0099275;
128  else if( eta <= 0.8 ) return 0.0100309;
129  else if( eta <= 1.0 ) return 0.0125116;
130  else if( eta <= 1.2 ) return 0.0147211;
131  else if( eta <= 1.4 ) return 0.0151623;
132  else if( eta <= 1.6 ) return 0.015259;
133  else if( eta <= 1.8 ) return 0.014499;
134  else if( eta <= 2.0 ) return 0.0165215;
135  else if( eta <= 2.2 ) return 0.0212348;
136  return 0.0227285;
137  }
138  // double squaredDiff(const double & eta, SigmaPt & sigmaPt)
139  double squaredDiff(const double & eta)
140  {
141  double sigmaPtPlus = sigmaPt(eta) + sigmaPt.sigma(eta);
142  double sigmaPtMinus = sigmaPt(eta) - sigmaPt.sigma(eta);
143  if( fabs(sigmaPtPlus*sigmaPtPlus - etaByPoints(eta)*etaByPoints(eta)) > fabs(sigmaPtMinus*sigmaPtMinus - etaByPoints(eta)*etaByPoints(eta)) ) {
144  return( fabs(sigmaPtPlus*sigmaPtPlus - etaByPoints(eta)*etaByPoints(eta)) );
145  }
146  return( fabs(sigmaPtMinus*sigmaPtMinus - etaByPoints(eta)*etaByPoints(eta)) );
147  }
149 };
150 
151 #endif
double b_1
Definition: SigmaPtDiff.h:57
Returns ( sigmaPt/Pt(data)^2 - sigmaPt/Pt(MC)^2 )
Definition: SigmaPtDiff.h:71
void setParErr(const std::vector< double > &parameters, const std::vector< double > &errors)
Definition: SigmaPtDiff.h:18
double sb_0
Definition: SigmaPtDiff.h:63
double b_0
Definition: SigmaPtDiff.h:56
double operator()(const double &eta)
Definition: SigmaPtDiff.h:34
double etaByPoints(const double &eta)
Definition: SigmaPtDiff.h:111
double b_4
Definition: SigmaPtDiff.h:60
double sigma(const double &eta)
Definition: SigmaPtDiff.h:41
T sqrt(T t)
Definition: SSEVec.h:18
double c
Definition: SigmaPtDiff.h:61
double sb_3
Definition: SigmaPtDiff.h:66
double squaredDiff(const double &eta)
Definition: SigmaPtDiff.h:139
double b_3
Definition: SigmaPtDiff.h:59
SigmaPt(const std::vector< double > &parameters_, const std::vector< double > &errors_)
Definition: SigmaPtDiff.h:10
Definition: errors.py:1
double b_2
Definition: SigmaPtDiff.h:58
double sb_4
Definition: SigmaPtDiff.h:67
double sb_1
Definition: SigmaPtDiff.h:64
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
SigmaPt sigmaPt
Definition: SigmaPtDiff.h:148
double sb_2
Definition: SigmaPtDiff.h:65