Go to the documentation of this file.00001 #ifndef SigmaPtDiff_h
00002 #define SigmaPtDiff_h
00003
00004 class SigmaPt
00005 {
00006 public:
00007 SigmaPt( const std::vector<double> & parameters_,
00008 const std::vector<double> & errors_ )
00009 {
00010 setParErr(parameters_, errors_);
00011 }
00012
00013 SigmaPt() {};
00014
00015 void setParErr( const std::vector<double> & parameters,
00016 const std::vector<double> & errors )
00017 {
00018 b_0 = parameters[0];
00019 b_1 = parameters[5];
00020 b_2 = parameters[1];
00021 b_3 = parameters[7];
00022 b_4 = parameters[8];
00023 sb_0 = errors[0];
00024 sb_1 = errors[5];
00025 sb_2 = errors[1];
00026 sb_3 = errors[7];
00027 sb_4 = errors[8];
00028 c = b_2 + b_3*(b_0 - b_4)*(b_0 - b_4) - b_1*b_0*b_0;
00029 }
00030
00031 double operator()(const double & eta)
00032 {
00033 if( fabs(eta) <= b_0 ) {
00034 return( c + b_1*eta*eta );
00035 }
00036 return( b_2 + b_3*(fabs(eta) - b_4)*(fabs(eta) - b_4) );
00037 }
00038 double sigma(const double & eta)
00039 {
00040 if( fabs(eta) <= b_0 ) {
00041 return sqrt( (eta*eta - b_0*b_0)*(eta*eta - b_0*b_0)*sb_1*sb_1 +
00042 sb_2*sb_2 +
00043 pow(b_0 - b_4, 4)*sb_3*sb_3 +
00044 pow(-2*b_3*pow(b_0-b_4,2), 2)*sb_4*sb_4 +
00045 pow(2*b_3*(b_0 - b_4) - 2*b_1*b_0, 2)*sb_0*sb_0 );
00046 }
00047 return sqrt( sb_2*sb_2 +
00048 pow(fabs(eta) - b_4, 4)*sb_3*sb_3 +
00049 pow(-2*b_3*pow(fabs(eta)-b_4,2), 2)*sb_4*sb_4 );
00050 }
00051
00052 protected:
00053 double b_0;
00054 double b_1;
00055 double b_2;
00056 double b_3;
00057 double b_4;
00058 double c;
00059
00060 double sb_0;
00061 double sb_1;
00062 double sb_2;
00063 double sb_3;
00064 double sb_4;
00065 };
00066
00068 class SigmaPtDiff
00069 {
00070 public:
00071 SigmaPtDiff()
00072 {
00073 std::vector<double> parameters;
00074 std::vector<double> errors;
00075 parameters.push_back(1.66);
00076 parameters.push_back(0.021);
00077 parameters.push_back(0.);
00078 parameters.push_back(0.);
00079 parameters.push_back(0.);
00080 parameters.push_back(0.0058);
00081 parameters.push_back(0.);
00082 parameters.push_back(0.03);
00083 parameters.push_back(1.8);
00084 parameters.push_back(0.);
00085 parameters.push_back(0.);
00086 parameters.push_back(0.);
00087 parameters.push_back(0.);
00088 parameters.push_back(0.);
00089 parameters.push_back(0.);
00090 errors.push_back(0.09);
00091 errors.push_back(0.002);
00092 errors.push_back(0.);
00093 errors.push_back(0.);
00094 errors.push_back(0.);
00095 errors.push_back(0.0009);
00096 errors.push_back(0.);
00097 errors.push_back(0.03);
00098 errors.push_back(0.3);
00099 errors.push_back(0.);
00100 errors.push_back(0.);
00101 errors.push_back(0.);
00102 errors.push_back(0.);
00103 errors.push_back(0.);
00104 errors.push_back(0.);
00105
00106 sigmaPt.setParErr( parameters, errors );
00107 }
00108 double etaByPoints(const double & eta)
00109 {
00110 if( eta <= -2.2 ) return 0.0233989;
00111 else if( eta <= -2.0 ) return 0.0197057;
00112 else if( eta <= -1.8 ) return 0.014693;
00113 else if( eta <= -1.6 ) return 0.0146727;
00114 else if( eta <= -1.4 ) return 0.0141323;
00115 else if( eta <= -1.2 ) return 0.0159712;
00116 else if( eta <= -1.0 ) return 0.0117224;
00117 else if( eta <= -0.8 ) return 0.010726;
00118 else if( eta <= -0.6 ) return 0.0104777;
00119 else if( eta <= -0.4 ) return 0.00814458;
00120 else if( eta <= -0.2 ) return 0.00632501;
00121 else if( eta <= 0.0 ) return 0.00644172;
00122 else if( eta <= 0.2 ) return 0.00772645;
00123 else if( eta <= 0.4 ) return 0.010103;
00124 else if( eta <= 0.6 ) return 0.0099275;
00125 else if( eta <= 0.8 ) return 0.0100309;
00126 else if( eta <= 1.0 ) return 0.0125116;
00127 else if( eta <= 1.2 ) return 0.0147211;
00128 else if( eta <= 1.4 ) return 0.0151623;
00129 else if( eta <= 1.6 ) return 0.015259;
00130 else if( eta <= 1.8 ) return 0.014499;
00131 else if( eta <= 2.0 ) return 0.0165215;
00132 else if( eta <= 2.2 ) return 0.0212348;
00133 return 0.0227285;
00134 }
00135
00136 double squaredDiff(const double & eta)
00137 {
00138 double sigmaPtPlus = sigmaPt(eta) + sigmaPt.sigma(eta);
00139 double sigmaPtMinus = sigmaPt(eta) - sigmaPt.sigma(eta);
00140 if( fabs(sigmaPtPlus*sigmaPtPlus - etaByPoints(eta)*etaByPoints(eta)) > fabs(sigmaPtMinus*sigmaPtMinus - etaByPoints(eta)*etaByPoints(eta)) ) {
00141 return( fabs(sigmaPtPlus*sigmaPtPlus - etaByPoints(eta)*etaByPoints(eta)) );
00142 }
00143 return( fabs(sigmaPtMinus*sigmaPtMinus - etaByPoints(eta)*etaByPoints(eta)) );
00144 }
00145 SigmaPt sigmaPt;
00146 };
00147
00148 #endif