16#include "MucGeomSvc/MucGeomSvc.h"
17#include "MucRecEvent/MucRecLineFit.h"
81 cout<<
"BAD part id from MucRecLineFit"<<endl;
89 for(
int i = 0; i <
n; i++){
101 for(
int i = 0; i <
n; i++){
105 status =
LineFit(y,
x,
w,
n,&c,&d,chisq,&sigc,&sigd);
114 *siga = 1/c/c * sigc;
119 if(seg == 0||seg == 4){
121 for(
int i = 0; i <
n; i++){
124 status =
LineFit(
x,y,
w,
n,a,b,chisq,siga,sigb);
126 else if(seg == 2||seg == 6){
128 for(
int i = 0; i <
n; i++){
131 status =
LineFit(y,
x,
w,
n,&c,&d,chisq,&sigc,&sigd);
135 *siga = 1/c/c * sigc;
140 for(
int i = 0; i <
n; i++){
141 float temp = (y[i] +
x[i])/sqrt(2.0);
142 y[i] = (y[i] -
x[i])/sqrt(2.0);
146 if(seg == 1 || seg == 5){
147 for(
int i = 0; i <
n; i++){
151 status =
LineFit(
x,y,
w,
n,a,b,chisq,siga,sigb);
153 else if(seg == 3 || seg == 7){
154 for(
int i = 0; i <
n; i++){
158 status =
LineFit(y,
x,
w,
n,a,b,chisq,siga,sigb);
187 double sum, sx, sy, sxx, sxy, syy, det;
200 cout <<
"utiLineFit-W: Too few points for line fit \n" << endl;
213 for (i = 0; i <
n; i++)
217 sx = sx +
w[i] *
x[i];
218 sy = sy +
w[i] * y[i];
219 sxx = sxx +
w[i] *
x[i] *
x[i];
220 sxy = sxy +
w[i] *
x[i] * y[i];
221 syy = syy +
w[i] * y[i] * y[i];
225 if (fabs(det) < 1.0e-20)
237 *a = (sum*sxy-sx*sy)/det;
238 *b = (sy*sxx-sxy*sx)/det;
245 chi = chi+(
w[i])*((y[i])-*a*(
x[i])-*b)*
246 ((y[i])-*a*(
x[i])-*b);
249 *siga = sqrt(fabs(sum/det));
250 *sigb = sqrt(fabs(sxx/det));
HepPoint3D GetCenter() const
Get gap center position in global coordinate.
MucGeoGap * GetGap(const int part, const int seg, const int gap) const
Get a pointer to the gap identified by (part,seg,gap).
static MucGeoGeneral * Instance()
Get a pointer to the single instance of MucGeoGeneral.
MucRecLineFit()
Constructor.
~MucRecLineFit()
Destructor.
int LineFit(float x[], float y[], float w[], int n, float *a, float *b, float *chisq, float *siga, float *sigb)