CMS 3D CMS Logo

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