X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliTrackResidualsLinear.cxx;h=3f5278f88eb3504c65e06c793cacb7dabc7c7855;hb=40389866548fc06fcc5655701a58bb65f61e09a6;hp=ff844bac9bf4f2d2ed0a345814e67472334c0575;hpb=bf9a6ef9fc8efa6dc19dddcd7e527b851bbfc735;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliTrackResidualsLinear.cxx b/STEER/AliTrackResidualsLinear.cxx index ff844bac9bf..3f5278f88eb 100644 --- a/STEER/AliTrackResidualsLinear.cxx +++ b/STEER/AliTrackResidualsLinear.cxx @@ -13,6 +13,8 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ +/* $Id$ */ + //----------------------------------------------------------------- // Implementation of the derived class for track residuals // based on linear chi2 minimization @@ -27,7 +29,7 @@ // //----------------------------------------------------------------- -#include +#include #include #include "AliLog.h" @@ -41,46 +43,46 @@ ClassImp(AliTrackResidualsLinear) //______________________________________________________________________________ -AliTrackResidualsLinear::AliTrackResidualsLinear():AliTrackResiduals() +AliTrackResidualsLinear::AliTrackResidualsLinear(): + AliTrackResiduals(), + fFitter(0), + fFraction(-1), + fChi2Orig(0) { // Default constructor - fFitter = 0; - fFraction =-1; - fChi2Orig =0; for (Int_t ipar=0; ipar<6; ipar++){ - fBFixed[ipar] = kFALSE; - fFixed[ipar] = 0;; fParams[ipar] = 0; } + for (Int_t icov=0; icov<36; icov++){ fCovar[icov]=0;} } //______________________________________________________________________________ AliTrackResidualsLinear::AliTrackResidualsLinear(Int_t ntracks): - AliTrackResiduals(ntracks) + AliTrackResiduals(ntracks), + fFitter(new TLinearFitter(6,"hyp6")), + fFraction(-1), + fChi2Orig(0) { // Constructor - fFitter = new TLinearFitter(6,"hyp6"); - fFraction =-1; - fChi2Orig =0; for (Int_t ipar=0; ipar<6; ipar++){ - fBFixed[ipar] = kFALSE; - fFixed[ipar] = 0; fParams[ipar] = 0; } + for (Int_t icov=0; icov<36; icov++){ fCovar[icov]=0;} } //______________________________________________________________________________ AliTrackResidualsLinear::AliTrackResidualsLinear(const AliTrackResidualsLinear &res): - AliTrackResiduals(res) + AliTrackResiduals(res), + fFitter(new TLinearFitter(*(res.fFitter))), + fFraction(res.fFraction), + fChi2Orig(res.fChi2Orig) { // Copy constructor //.. - fFitter = new TLinearFitter(*(res.fFitter)); for (Int_t ipar=0; ipar<6; ipar++){ - fBFixed[ipar] = res.fBFixed[ipar]; - 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; } @@ -152,7 +154,7 @@ void AliTrackResidualsLinear::AddPoints(AliTrackPoint &p, AliTrackPoint &pprime) 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 // @@ -182,7 +184,7 @@ void AliTrackResidualsLinear::AddPoints(AliTrackPoint &p, AliTrackPoint &pprime) 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 // @@ -208,20 +210,50 @@ void AliTrackResidualsLinear::AddPoints(AliTrackPoint &p, AliTrackPoint &pprime) 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; } - // accumulate chi2 - fChi2Orig += (yf*yf)*covDiagonal[idim]; + else{ + printf("Bug\n"); + } + } + 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 +=3; + + fNdf +=2; } //______________________________________________________________________________ @@ -246,12 +278,12 @@ Bool_t AliTrackResidualsLinear::Update() } // 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); } - // + fChi2 = fFitter->GetChisquare(); fNdf -= 6; TVectorD vector(7); @@ -262,10 +294,29 @@ Bool_t AliTrackResidualsLinear::Update() 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); + } + } + Double_t covmatrarray[21]; + for(Int_t j=0;j<6;j++){ + for(Int_t i=j;i<6;i++){ + covmatrarray[i*(i+1)/2+j]=fCovar[i+6*j]; + } + } + + fAlignObj->SetPars(fParams[0], fParams[1], fParams[2], TMath::RadToDeg()*fParams[3], TMath::RadToDeg()*fParams[4], TMath::RadToDeg()*fParams[5]); + fAlignObj->SetCorrMatrix(covmatrarray); + return kTRUE; } + +