X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliTrackResidualsFast.cxx;h=2afd00f71f792bc53e783bbb9062f6b233ce050d;hb=e0919e877c6f962639a2af56bc822a7d58a7f33b;hp=b804e8c6af9a84b8ba6a4f4d7df94ff1600c43fc;hpb=29317b6846401670c0a17834dc969cb9eb344f0b;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliTrackResidualsFast.cxx b/STEER/AliTrackResidualsFast.cxx index b804e8c6af9..2afd00f71f7 100644 --- a/STEER/AliTrackResidualsFast.cxx +++ b/STEER/AliTrackResidualsFast.cxx @@ -30,6 +30,9 @@ #include "AliTrackPointArray.h" #include "AliTrackResidualsFast.h" +#include +#include + ClassImp(AliTrackResidualsFast) //______________________________________________________________________________ @@ -75,8 +78,9 @@ Bool_t AliTrackResidualsFast::Minimize() { // Implementation of fast linear Chi2 // based minimization of track residuals sum - if(fBFixed[0]||fBFixed[1]||fBFixed[2]||fBFixed[3]||fBFixed[4]||fBFixed[5]) - AliError("Cannot yet fix parameters in this minimizer"); + + // if(fBFixed[0]||fBFixed[1]||fBFixed[2]||fBFixed[3]||fBFixed[4]||fBFixed[5]) + // AliError("Cannot yet fix parameters in this minimizer"); for (Int_t i = 0; i < 27; i++) fSum[i] = 0; @@ -127,7 +131,11 @@ void AliTrackResidualsFast::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]; TMatrixDSym msum = mcov + mcovp; + + msum.Invert(); + + if (!msum.IsValid()) return; TMatrixD sums(3,1); @@ -140,9 +148,16 @@ void AliTrackResidualsFast::AddPoints(AliTrackPoint &p, AliTrackPoint &pprime) mf(0,0) = 1; mf(1,0) = 0; mf(2,0) = 0; mf(0,1) = 0; mf(1,1) = 1; mf(2,1) = 0; mf(0,2) = 0; mf(1,2) = 0; mf(2,2) = 1; - mf(0,3) = 0; mf(1,3) =-xyz[2]; mf(2,3) = xyz[1]; + mf(0,3) = 0; mf(1,3) = -xyz[2]; mf(2,3) = xyz[1]; mf(0,4) = xyz[2]; mf(1,4) = 0; mf(2,4) =-xyz[0]; mf(0,5) =-xyz[1]; mf(1,5) = xyz[0]; mf(2,5) = 0; + + for(Int_t j=0;j<6;j++){ + if(fBFixed[j]==kTRUE){ + mf(0,j)=0.;mf(1,j)=0.;mf(2,j)=0.; + } + } + TMatrixD mft = mf.T(); mf.T(); TMatrixD sums2 = mft * msum * sums; @@ -216,17 +231,77 @@ Bool_t AliTrackResidualsFast::Update() sums(0,0) = fSum[21]; sums(0,1) = fSum[22]; sums(0,2) = fSum[23]; sums(0,3) = fSum[24]; sums(0,4) = fSum[25]; sums(0,5) = fSum[26]; - smatrix.Invert(); - if (!smatrix.IsValid()) return kFALSE; + + Int_t fixedparamat[6]={0,0,0,0,0,0}; + const Int_t unfixedparam=GetNFreeParam(); + Int_t position[6],last=0;//position is of size 6 but only unfiexedparam indeces will be used + + if(fBFixed[0]==kTRUE){ + fixedparamat[0]=1; + } + else { + position[0]=0; + last++; + } + + for(Int_t j=1;j<6;j++){ + if(fBFixed[j]==kTRUE){ + fixedparamat[j]=fixedparamat[j-1]+1; + } + else { + fixedparamat[j]=fixedparamat[j-1]; + position[last]=j; + last++; + } + } + + TMatrixDSym smatrixRedu(unfixedparam); + for(Int_t i=0;i1.01)printf("Too large Correlation number!\n"); + } + covmatrarray[i*(i+1)/2+j]=smatrixUp(i,j); + } + } + + TMatrixD res = sums*smatrixUp; fAlignObj->SetPars(res(0,0),res(0,1),res(0,2), TMath::RadToDeg()*res(0,3), TMath::RadToDeg()*res(0,4), TMath::RadToDeg()*res(0,5)); + + fAlignObj->SetCorrMatrix(covmatrarray); TMatrixD tmp = res*sums.T(); fChi2 = fSumR - tmp(0,0); - fNdf -= 6; - + fNdf -= unfixedparam; + return kTRUE; } + + +