* provided "as is" without express or implied warranty. *
**************************************************************************/
+/* $Id$ */
+
//-----------------------------------------------------------------
// Implementation of the derived class for track residuals
// based on linear chi2 minimization
//
//-----------------------------------------------------------------
+#include <TMath.h>
#include <TMinuit.h>
#include <TGeoMatrix.h>
fFixed[ipar] = 0;;
fParams[ipar] = 0;
}
+ for (Int_t icov=0; icov<36; icov++){ fCovar[icov]=0;}
}
//______________________________________________________________________________
fFixed[ipar] = 0;
fParams[ipar] = 0;
}
+ for (Int_t icov=0; icov<36; icov++){ fCovar[icov]=0;}
}
//______________________________________________________________________________
fFixed[ipar] = res.fFixed[ipar];
fParams[ipar] = res.fParams[ipar];
}
+ for (Int_t icov=0; icov<36; icov++){ fCovar[icov]= res.fCovar[icov];}
+ fChi2Orig = res.fChi2Orig;
}
//______________________________________________________________________________
mcovp(1,0) = covp[1]; mcovp(1,1) = covp[3]; mcovp(1,2) = covp[4];
mcovp(2,0) = covp[2]; mcovp(2,1) = covp[4]; mcovp(2,2) = covp[5];
mcov+=mcovp;
- mcov.Invert();
+ //mcov.Invert();
if (!mcov.IsValid()) return;
TMatrixD mcovBack = mcov; // for debug purposes
//
TMatrixD deltaT(matrixV, TMatrixD::kTransposeMult, deltaR); // tranformed delta
TMatrixD mparamT(matrixV,TMatrixD::kTransposeMult, mparam); // tranformed linear transformation
- if (0){
+ if (AliLog::GetDebugLevel("","AliTrackResidualsLinear")>2){
//
// debug part
//
printf("Rotated param matrix\n");
mparamT.Print();
//
+ //
+ printf("Trans Matrix:\n");
+ matrixV.Print();
+ printf("Delta Orig\n");
+ deltaR.Print();
+ printf("Delta Rotated");
+ deltaT.Print();
+ //
+ //
}
//
- for (Int_t idim = 0; idim<3; idim++){
+ Double_t sumChi2=0;
+ for (Int_t idim = 1; idim<3; idim++){
Double_t yf; // input points to fit in TLinear fitter
Double_t xf[6]; // input points to fit
yf = deltaT(idim,0);
for (Int_t ipar =0; ipar<6; ipar++) xf[ipar] = mparamT(idim,ipar);
if (covDiagonal[idim]>0.){
- fFitter->AddPoint(xf,yf, TMath::Sqrt(1/covDiagonal[idim]));
+ fFitter->AddPoint(xf,yf, TMath::Sqrt(covDiagonal[idim]));
+ // accumulate chi2
+ Double_t chi2 = (yf*yf)/covDiagonal[idim];
+ fChi2Orig += (yf*yf)/covDiagonal[idim];
+ if (chi2>100 && AliLog::GetDebugLevel("","AliTrackResidualsLinear")>1){
+ printf("Too big chi2- %f\n",chi2);
+ printf("Delta Orig\n");
+ deltaR.Print();
+ printf("Delta Rotated");
+ deltaT.Print();
+ matrixV.Print();
+ printf("Too big chi2 - End\n");
+ }
+ sumChi2+=chi2;
+ }
+ else{
+ printf("Bug\n");
}
- // accumulate chi2
- fChi2Orig += (yf*yf)*covDiagonal[idim];
}
- fNdf +=3;
+ if (AliLog::GetDebugLevel("","AliTrackResidualsLinear")>1){
+ TMatrixD matChi0=(mcov.Invert()*deltaR);
+ TMatrixD matChi2=deltaR.T()*matChi0;
+ printf("Chi2:\t%f\t%f", matChi2(0,0), sumChi2);
+ }
+
+ fNdf +=2;
}
//______________________________________________________________________________
}
//
fFitter->ReleaseParameter(0);
- for (Int_t ipar=0; ipar<7; ipar++) {
+ for (Int_t ipar=0; ipar<6; ipar++) {
if (fBFixed[ipar]) fFitter->ReleaseParameter(ipar+1);
}
fParams[3] = vector[4];
fParams[4] = vector[5];
fParams[5] = vector[6];
+ TMatrixD covar(7,7);
+ fFitter->GetCovarianceMatrix(covar);
+ for (Int_t i0=0; i0 <6; i0++)
+ for (Int_t j0=0; j0 <6; j0++){
+ fCovar[i0*6+j0] = covar(i0+1,j0+1);
+ }
//
fAlignObj->SetPars(fParams[0], fParams[1], fParams[2],
TMath::RadToDeg()*fParams[3],