#include <MdcLine.h>
Public Member Functions | |
int | fit (int nUse) |
int | fit (int nUse) |
MdcLine (int n) | |
MdcLine (int n) | |
~MdcLine () | |
~MdcLine () | |
Public Attributes | |
double | chisq |
double | errmat [3] |
double | intercept |
int | nPoint |
double * | resid |
double * | resid |
double * | sigma |
double * | sigma |
double | slope |
double * | x |
double * | x |
double * | y |
double * | y |
|
00025 { 00026 nPoint = n; 00027 x = new double[n]; 00028 y = new double[n]; 00029 sigma = new double[n]; 00030 resid = new double[n]; 00031 };
|
|
00032 { 00033 delete [] x; 00034 delete [] y; 00035 delete [] sigma; 00036 delete [] resid; 00037 };
|
|
00025 { 00026 nPoint = n; 00027 x = new double[n]; 00028 y = new double[n]; 00029 sigma = new double[n]; 00030 resid = new double[n]; 00031 };
|
|
00032 { 00033 delete [] x; 00034 delete [] y; 00035 delete [] sigma; 00036 delete [] resid; 00037 };
|
|
|
|
00010 { 00011 00012 double s1, sx, sy, sxx, sxy; // The various sums. 00013 double delinv, denom; 00014 double weight = 0.013; // weight for hits, calculated from sigmas. 00015 int ihit; 00016 if (nUse > nPoint) nUse = nPoint; 00017 s1 = sx = sy = sxx = sxy = 0.0; 00018 chisq = 0.0; 00019 for (ihit = 0; ihit < nUse; ihit++) { 00020 00021 if (sigma[ihit] < 0.0) continue; 00022 weight = 1. / (sigma[ihit] * sigma[ihit]);//NEED sigma of MdcHits 00023 s1 += weight; 00024 sx += x[ihit] * weight; 00025 sy += y[ihit] * weight; 00026 sxx += x[ihit] * (x[ihit] * weight); 00027 sxy += y[ihit] * (x[ihit] * weight); 00028 00029 //std::cout<<__FILE__<<" "<<__LINE__<< " "<<ihit<<" sigma "<< 00030 //sigma[ihit] <<" weight " 00031 //<< weight<<" x " 00032 //<< x[ihit]<<" y " 00033 //<< y[ihit]<< std::endl; 00034 } 00035 00036 /* Calculate parameters. */ 00037 denom = s1 * sxx - sx * sx; 00038 delinv = (denom == 0.0) ? 1.e20 : 1. / denom; 00039 intercept = (sy * sxx - sx * sxy) * delinv; 00040 slope = (s1 * sxy - sx * sy) * delinv; 00041 errmat[0] = sxx * delinv; 00042 errmat[1] = -sx * delinv; 00043 errmat[2] = s1 * delinv; 00044 //std::cout << " After Fit:" << std::endl;//yzhang debug 00045 /* Calculate residuals. */ 00046 for (ihit = 0; ihit < nUse; ihit++) { 00047 if (sigma[ihit] < 0.0) continue; 00048 resid[ihit] = ( y[ihit] - intercept - slope * x[ihit] ); 00049 chisq += resid[ihit] * resid[ihit] / (sigma[ihit] * sigma[ihit]); 00050 //std::cout << "resid "<<ihit<<" "<<resid[ihit]<<" sigma "<<sigma[ihit]<<" chisq add "<<resid[ihit] * resid[ihit] / (sigma[ihit] * sigma[ihit]) << std::endl;//yzhang debug 00051 } 00052 00053 //std::cout<<__FILE__<<" "<<__LINE__ 00054 //<< " intercept "<<intercept<<" slope "<<slope 00055 //<< " chisq "<<chisq<<std::endl;//yzhang debug 00056 return 0; 00057 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|