File indexing completed on 2024-04-06 12:01:12
0001 #include "CommonTools/Statistics/interface/LinearFit.h"
0002
0003 void LinearFit::fit(const std::vector<float>& x,
0004 const std::vector<float>& y,
0005 int ndat,
0006 const std::vector<float>& sigy,
0007 float& slope,
0008 float& intercept,
0009 float& covss,
0010 float& covii,
0011 float& covsi) const {
0012 float g1 = 0, g2 = 0;
0013 float s11 = 0, s12 = 0, s22 = 0;
0014 for (int i = 0; i < ndat; i++) {
0015 float sy2 = sigy[i] * sigy[i];
0016 g1 += y[i] / sy2;
0017 g2 += x[i] * y[i] / sy2;
0018 s11 += 1. / sy2;
0019 s12 += x[i] / sy2;
0020 s22 += x[i] * x[i] / sy2;
0021 }
0022
0023 float d = s11 * s22 - s12 * s12;
0024 intercept = (g1 * s22 - g2 * s12) / d;
0025 slope = (g2 * s11 - g1 * s12) / d;
0026
0027 covii = s22 / d;
0028 covss = s11 / d;
0029 covsi = -s12 / d;
0030 }