00001 #include "CommonTools/Statistics/interface/LinearFit.h" 00002 00003 void LinearFit::fit(const std::vector<float> & x, const std::vector<float> & y, 00004 int ndat, const std::vector<float> & sigy, 00005 float& slope, float& intercept, 00006 float& covss, float& covii, float& covsi) const 00007 { 00008 00009 float g1 = 0, g2 = 0; 00010 float s11 = 0, s12 = 0, s22 = 0; 00011 for (int i = 0; i != ndat; i++) { 00012 float sy2 = sigy[i] * sigy[i]; 00013 g1 += y[i] / sy2; 00014 g2 += x[i]*y[i] / sy2; 00015 s11 += 1. / sy2; 00016 s12 += x[i] / sy2; 00017 s22 += x[i]*x[i] / sy2; 00018 } 00019 00020 float d = s11*s22 - s12*s12; 00021 intercept = (g1*s22 - g2*s12) / d; 00022 slope = (g2*s11 - g1*s12) / d; 00023 00024 covii = s22 / d; 00025 covss = s11 / d; 00026 covsi = -s12 / d; 00027 00028 }