#include <TMath.h>
#include <TGeoMatrix.h>
#include "AliLog.h"
#include "AliAlignObj.h"
#include "AliTrackPointArray.h"
#include "AliTrackResidualsLinear.h"
#include "AliAlignObj.h"
#include "TLinearFitter.h"
#include "TDecompSVD.h"
ClassImp(AliTrackResidualsLinear)
AliTrackResidualsLinear::AliTrackResidualsLinear():
AliTrackResiduals(),
fFitter(0),
fFraction(-1),
fChi2Orig(0)
{
for (Int_t ipar=0; ipar<6; ipar++){
fParams[ipar] = 0;
}
for (Int_t icov=0; icov<36; icov++){ fCovar[icov]=0;}
}
AliTrackResidualsLinear::AliTrackResidualsLinear(Int_t ntracks):
AliTrackResiduals(ntracks),
fFitter(new TLinearFitter(6,"hyp6")),
fFraction(-1),
fChi2Orig(0)
{
for (Int_t ipar=0; ipar<6; ipar++){
fParams[ipar] = 0;
}
for (Int_t icov=0; icov<36; icov++){ fCovar[icov]=0;}
}
AliTrackResidualsLinear::AliTrackResidualsLinear(const AliTrackResidualsLinear &res):
AliTrackResiduals(res),
fFitter(new TLinearFitter(*(res.fFitter))),
fFraction(res.fFraction),
fChi2Orig(res.fChi2Orig)
{
for (Int_t ipar=0; ipar<6; ipar++){
fParams[ipar] = res.fParams[ipar];
}
for (Int_t icov=0; icov<36; icov++){ fCovar[icov]= res.fCovar[icov];}
fChi2Orig = res.fChi2Orig;
}
AliTrackResidualsLinear &AliTrackResidualsLinear::operator= (const AliTrackResidualsLinear& res)
{
((AliTrackResiduals *)this)->operator=(res);
return *this;
}
AliTrackResidualsLinear::~AliTrackResidualsLinear()
{
delete fFitter;
}
Bool_t AliTrackResidualsLinear::Minimize()
{
if (!fFitter) fFitter = new TLinearFitter(6,"hyp6");
fFitter->StoreData(kTRUE);
fFitter->ClearPoints();
fChi2Orig = 0;
AliTrackPoint p1,p2;
for (Int_t itrack = 0; itrack < fLast; itrack++) {
if (!fVolArray[itrack] || !fTrackArray[itrack]) continue;
for (Int_t ipoint = 0; ipoint < fVolArray[itrack]->GetNPoints(); ipoint++) {
fVolArray[itrack]->GetPoint(p1,ipoint);
fTrackArray[itrack]->GetPoint(p2,ipoint);
AddPoints(p1,p2);
}
}
Bool_t isOK = Update();
if (!isOK) return isOK;
TGeoHMatrix matrix;
fAlignObj->GetMatrix(matrix);
return isOK;
}
void AliTrackResidualsLinear::AddPoints(AliTrackPoint &p, AliTrackPoint &pprime)
{
Float_t xyz[3],xyzp[3];
Float_t cov[6],covp[6];
p.GetXYZ(xyz,cov); pprime.GetXYZ(xyzp,covp);
TMatrixD mcov(3,3);
mcov(0,0) = cov[0]; mcov(0,1) = cov[1]; mcov(0,2) = cov[2];
mcov(1,0) = cov[1]; mcov(1,1) = cov[3]; mcov(1,2) = cov[4];
mcov(2,0) = cov[2]; mcov(2,1) = cov[4]; mcov(2,2) = cov[5];
TMatrixD mcovp(3,3);
mcovp(0,0) = covp[0]; mcovp(0,1) = covp[1]; mcovp(0,2) = covp[2];
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;
if (!mcov.IsValid()) return;
TMatrixD mcovBack = mcov;
TDecompSVD svd(mcov);
if (!svd.Decompose()) return;
TMatrixD matrixV = svd.GetV();
Double_t covDiagonal[3] = {svd.GetSig()[0],svd.GetSig()[1],svd.GetSig()[2]};
TMatrixD deltaR(3,1);
deltaR(0,0) = (xyzp[0]-xyz[0]);
deltaR(1,0) = (xyzp[1]-xyz[1]);
deltaR(2,0) = (xyzp[2]-xyz[2]);
TMatrixD mparam(3,6);
mparam(0,0) = 1; mparam(1,0) = 0; mparam(2,0) = 0;
mparam(0,1) = 0; mparam(1,1) = 1; mparam(2,1) = 0;
mparam(0,2) = 0; mparam(1,2) = 0; mparam(2,2) = 1;
mparam(0,3) = 0; mparam(1,3) =-xyz[2]; mparam(2,3) = xyz[1];
mparam(0,4) = xyz[2]; mparam(1,4) = 0; mparam(2,4) =-xyz[0];
mparam(0,5) =-xyz[1]; mparam(1,5) = xyz[0]; mparam(2,5) = 0;
TMatrixD deltaT(matrixV, TMatrixD::kTransposeMult, deltaR);
TMatrixD mparamT(matrixV,TMatrixD::kTransposeMult, mparam);
if (AliLog::GetDebugLevel("","AliTrackResidualsLinear")>2){
TMatrixD matrixU = svd.GetU();
TMatrixD matrixUI= svd.GetU();
matrixUI.Invert();
TMatrixD test0 = matrixUI*matrixV;
TMatrixD test1 = matrixUI*mcovBack*matrixV;
TMatrixD test2 = matrixU.T()*matrixV;
printf("Test matrix 2 - should be unit\n");
test2.Print();
printf("Test matrix 0 - should be unit\n");
test0.Print();
printf("Test matrix 1 - should be diagonal\n");
test1.Print();
printf("Diagonal matrix\n");
svd.GetSig().Print();
printf("Original param matrix\n");
mparam.Print();
printf("Rotated param matrix\n");
mparamT.Print();
printf("Trans Matrix:\n");
matrixV.Print();
printf("Delta Orig\n");
deltaR.Print();
printf("Delta Rotated");
deltaT.Print();
}
Double_t sumChi2=0;
for (Int_t idim = 1; idim<3; idim++){
Double_t yf;
Double_t xf[6];
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(covDiagonal[idim]));
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");
}
}
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;
}
Bool_t AliTrackResidualsLinear::Update()
{
fFitter->Eval();
fFitter->FixParameter(0);
for (Int_t ipar =0; ipar<6; ipar++){
if (fBFixed[ipar]) fFitter->FixParameter(ipar+1,fFixed[ipar]);
}
if (fFraction>0.5) {
fFitter->EvalRobust(fFraction);
}else{
fFitter->Eval();
}
fFitter->ReleaseParameter(0);
for (Int_t ipar=0; ipar<6; ipar++) {
if (fBFixed[ipar]) fFitter->ReleaseParameter(ipar+1);
}
fChi2 = fFitter->GetChisquare();
fNdf -= 6;
TVectorD vector(7);
fFitter->GetParameters(vector);
fParams[0] = vector[1];
fParams[1] = vector[2];
fParams[2] = vector[3];
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;
}
AliTrackResidualsLinear.cxx:1 AliTrackResidualsLinear.cxx:2 AliTrackResidualsLinear.cxx:3 AliTrackResidualsLinear.cxx:4 AliTrackResidualsLinear.cxx:5 AliTrackResidualsLinear.cxx:6 AliTrackResidualsLinear.cxx:7 AliTrackResidualsLinear.cxx:8 AliTrackResidualsLinear.cxx:9 AliTrackResidualsLinear.cxx:10 AliTrackResidualsLinear.cxx:11 AliTrackResidualsLinear.cxx:12 AliTrackResidualsLinear.cxx:13 AliTrackResidualsLinear.cxx:14 AliTrackResidualsLinear.cxx:15 AliTrackResidualsLinear.cxx:16 AliTrackResidualsLinear.cxx:17 AliTrackResidualsLinear.cxx:18 AliTrackResidualsLinear.cxx:19 AliTrackResidualsLinear.cxx:20 AliTrackResidualsLinear.cxx:21 AliTrackResidualsLinear.cxx:22 AliTrackResidualsLinear.cxx:23 AliTrackResidualsLinear.cxx:24 AliTrackResidualsLinear.cxx:25 AliTrackResidualsLinear.cxx:26 AliTrackResidualsLinear.cxx:27 AliTrackResidualsLinear.cxx:28 AliTrackResidualsLinear.cxx:29 AliTrackResidualsLinear.cxx:30 AliTrackResidualsLinear.cxx:31 AliTrackResidualsLinear.cxx:32 AliTrackResidualsLinear.cxx:33 AliTrackResidualsLinear.cxx:34 AliTrackResidualsLinear.cxx:35 AliTrackResidualsLinear.cxx:36 AliTrackResidualsLinear.cxx:37 AliTrackResidualsLinear.cxx:38 AliTrackResidualsLinear.cxx:39 AliTrackResidualsLinear.cxx:40 AliTrackResidualsLinear.cxx:41 AliTrackResidualsLinear.cxx:42 AliTrackResidualsLinear.cxx:43 AliTrackResidualsLinear.cxx:44 AliTrackResidualsLinear.cxx:45 AliTrackResidualsLinear.cxx:46 AliTrackResidualsLinear.cxx:47 AliTrackResidualsLinear.cxx:48 AliTrackResidualsLinear.cxx:49 AliTrackResidualsLinear.cxx:50 AliTrackResidualsLinear.cxx:51 AliTrackResidualsLinear.cxx:52 AliTrackResidualsLinear.cxx:53 AliTrackResidualsLinear.cxx:54 AliTrackResidualsLinear.cxx:55 AliTrackResidualsLinear.cxx:56 AliTrackResidualsLinear.cxx:57 AliTrackResidualsLinear.cxx:58 AliTrackResidualsLinear.cxx:59 AliTrackResidualsLinear.cxx:60 AliTrackResidualsLinear.cxx:61 AliTrackResidualsLinear.cxx:62 AliTrackResidualsLinear.cxx:63 AliTrackResidualsLinear.cxx:64 AliTrackResidualsLinear.cxx:65 AliTrackResidualsLinear.cxx:66 AliTrackResidualsLinear.cxx:67 AliTrackResidualsLinear.cxx:68 AliTrackResidualsLinear.cxx:69 AliTrackResidualsLinear.cxx:70 AliTrackResidualsLinear.cxx:71 AliTrackResidualsLinear.cxx:72 AliTrackResidualsLinear.cxx:73 AliTrackResidualsLinear.cxx:74 AliTrackResidualsLinear.cxx:75 AliTrackResidualsLinear.cxx:76 AliTrackResidualsLinear.cxx:77 AliTrackResidualsLinear.cxx:78 AliTrackResidualsLinear.cxx:79 AliTrackResidualsLinear.cxx:80 AliTrackResidualsLinear.cxx:81 AliTrackResidualsLinear.cxx:82 AliTrackResidualsLinear.cxx:83 AliTrackResidualsLinear.cxx:84 AliTrackResidualsLinear.cxx:85 AliTrackResidualsLinear.cxx:86 AliTrackResidualsLinear.cxx:87 AliTrackResidualsLinear.cxx:88 AliTrackResidualsLinear.cxx:89 AliTrackResidualsLinear.cxx:90 AliTrackResidualsLinear.cxx:91 AliTrackResidualsLinear.cxx:92 AliTrackResidualsLinear.cxx:93 AliTrackResidualsLinear.cxx:94 AliTrackResidualsLinear.cxx:95 AliTrackResidualsLinear.cxx:96 AliTrackResidualsLinear.cxx:97 AliTrackResidualsLinear.cxx:98 AliTrackResidualsLinear.cxx:99 AliTrackResidualsLinear.cxx:100 AliTrackResidualsLinear.cxx:101 AliTrackResidualsLinear.cxx:102 AliTrackResidualsLinear.cxx:103 AliTrackResidualsLinear.cxx:104 AliTrackResidualsLinear.cxx:105 AliTrackResidualsLinear.cxx:106 AliTrackResidualsLinear.cxx:107 AliTrackResidualsLinear.cxx:108 AliTrackResidualsLinear.cxx:109 AliTrackResidualsLinear.cxx:110 AliTrackResidualsLinear.cxx:111 AliTrackResidualsLinear.cxx:112 AliTrackResidualsLinear.cxx:113 AliTrackResidualsLinear.cxx:114 AliTrackResidualsLinear.cxx:115 AliTrackResidualsLinear.cxx:116 AliTrackResidualsLinear.cxx:117 AliTrackResidualsLinear.cxx:118 AliTrackResidualsLinear.cxx:119 AliTrackResidualsLinear.cxx:120 AliTrackResidualsLinear.cxx:121 AliTrackResidualsLinear.cxx:122 AliTrackResidualsLinear.cxx:123 AliTrackResidualsLinear.cxx:124 AliTrackResidualsLinear.cxx:125 AliTrackResidualsLinear.cxx:126 AliTrackResidualsLinear.cxx:127 AliTrackResidualsLinear.cxx:128 AliTrackResidualsLinear.cxx:129 AliTrackResidualsLinear.cxx:130 AliTrackResidualsLinear.cxx:131 AliTrackResidualsLinear.cxx:132 AliTrackResidualsLinear.cxx:133 AliTrackResidualsLinear.cxx:134 AliTrackResidualsLinear.cxx:135 AliTrackResidualsLinear.cxx:136 AliTrackResidualsLinear.cxx:137 AliTrackResidualsLinear.cxx:138 AliTrackResidualsLinear.cxx:139 AliTrackResidualsLinear.cxx:140 AliTrackResidualsLinear.cxx:141 AliTrackResidualsLinear.cxx:142 AliTrackResidualsLinear.cxx:143 AliTrackResidualsLinear.cxx:144 AliTrackResidualsLinear.cxx:145 AliTrackResidualsLinear.cxx:146 AliTrackResidualsLinear.cxx:147 AliTrackResidualsLinear.cxx:148 AliTrackResidualsLinear.cxx:149 AliTrackResidualsLinear.cxx:150 AliTrackResidualsLinear.cxx:151 AliTrackResidualsLinear.cxx:152 AliTrackResidualsLinear.cxx:153 AliTrackResidualsLinear.cxx:154 AliTrackResidualsLinear.cxx:155 AliTrackResidualsLinear.cxx:156 AliTrackResidualsLinear.cxx:157 AliTrackResidualsLinear.cxx:158 AliTrackResidualsLinear.cxx:159 AliTrackResidualsLinear.cxx:160 AliTrackResidualsLinear.cxx:161 AliTrackResidualsLinear.cxx:162 AliTrackResidualsLinear.cxx:163 AliTrackResidualsLinear.cxx:164 AliTrackResidualsLinear.cxx:165 AliTrackResidualsLinear.cxx:166 AliTrackResidualsLinear.cxx:167 AliTrackResidualsLinear.cxx:168 AliTrackResidualsLinear.cxx:169 AliTrackResidualsLinear.cxx:170 AliTrackResidualsLinear.cxx:171 AliTrackResidualsLinear.cxx:172 AliTrackResidualsLinear.cxx:173 AliTrackResidualsLinear.cxx:174 AliTrackResidualsLinear.cxx:175 AliTrackResidualsLinear.cxx:176 AliTrackResidualsLinear.cxx:177 AliTrackResidualsLinear.cxx:178 AliTrackResidualsLinear.cxx:179 AliTrackResidualsLinear.cxx:180 AliTrackResidualsLinear.cxx:181 AliTrackResidualsLinear.cxx:182 AliTrackResidualsLinear.cxx:183 AliTrackResidualsLinear.cxx:184 AliTrackResidualsLinear.cxx:185 AliTrackResidualsLinear.cxx:186 AliTrackResidualsLinear.cxx:187 AliTrackResidualsLinear.cxx:188 AliTrackResidualsLinear.cxx:189 AliTrackResidualsLinear.cxx:190 AliTrackResidualsLinear.cxx:191 AliTrackResidualsLinear.cxx:192 AliTrackResidualsLinear.cxx:193 AliTrackResidualsLinear.cxx:194 AliTrackResidualsLinear.cxx:195 AliTrackResidualsLinear.cxx:196 AliTrackResidualsLinear.cxx:197 AliTrackResidualsLinear.cxx:198 AliTrackResidualsLinear.cxx:199 AliTrackResidualsLinear.cxx:200 AliTrackResidualsLinear.cxx:201 AliTrackResidualsLinear.cxx:202 AliTrackResidualsLinear.cxx:203 AliTrackResidualsLinear.cxx:204 AliTrackResidualsLinear.cxx:205 AliTrackResidualsLinear.cxx:206 AliTrackResidualsLinear.cxx:207 AliTrackResidualsLinear.cxx:208 AliTrackResidualsLinear.cxx:209 AliTrackResidualsLinear.cxx:210 AliTrackResidualsLinear.cxx:211 AliTrackResidualsLinear.cxx:212 AliTrackResidualsLinear.cxx:213 AliTrackResidualsLinear.cxx:214 AliTrackResidualsLinear.cxx:215 AliTrackResidualsLinear.cxx:216 AliTrackResidualsLinear.cxx:217 AliTrackResidualsLinear.cxx:218 AliTrackResidualsLinear.cxx:219 AliTrackResidualsLinear.cxx:220 AliTrackResidualsLinear.cxx:221 AliTrackResidualsLinear.cxx:222 AliTrackResidualsLinear.cxx:223 AliTrackResidualsLinear.cxx:224 AliTrackResidualsLinear.cxx:225 AliTrackResidualsLinear.cxx:226 AliTrackResidualsLinear.cxx:227 AliTrackResidualsLinear.cxx:228 AliTrackResidualsLinear.cxx:229 AliTrackResidualsLinear.cxx:230 AliTrackResidualsLinear.cxx:231 AliTrackResidualsLinear.cxx:232 AliTrackResidualsLinear.cxx:233 AliTrackResidualsLinear.cxx:234 AliTrackResidualsLinear.cxx:235 AliTrackResidualsLinear.cxx:236 AliTrackResidualsLinear.cxx:237 AliTrackResidualsLinear.cxx:238 AliTrackResidualsLinear.cxx:239 AliTrackResidualsLinear.cxx:240 AliTrackResidualsLinear.cxx:241 AliTrackResidualsLinear.cxx:242 AliTrackResidualsLinear.cxx:243 AliTrackResidualsLinear.cxx:244 AliTrackResidualsLinear.cxx:245 AliTrackResidualsLinear.cxx:246 AliTrackResidualsLinear.cxx:247 AliTrackResidualsLinear.cxx:248 AliTrackResidualsLinear.cxx:249 AliTrackResidualsLinear.cxx:250 AliTrackResidualsLinear.cxx:251 AliTrackResidualsLinear.cxx:252 AliTrackResidualsLinear.cxx:253 AliTrackResidualsLinear.cxx:254 AliTrackResidualsLinear.cxx:255 AliTrackResidualsLinear.cxx:256 AliTrackResidualsLinear.cxx:257 AliTrackResidualsLinear.cxx:258 AliTrackResidualsLinear.cxx:259 AliTrackResidualsLinear.cxx:260 AliTrackResidualsLinear.cxx:261 AliTrackResidualsLinear.cxx:262 AliTrackResidualsLinear.cxx:263 AliTrackResidualsLinear.cxx:264 AliTrackResidualsLinear.cxx:265 AliTrackResidualsLinear.cxx:266 AliTrackResidualsLinear.cxx:267 AliTrackResidualsLinear.cxx:268 AliTrackResidualsLinear.cxx:269 AliTrackResidualsLinear.cxx:270 AliTrackResidualsLinear.cxx:271 AliTrackResidualsLinear.cxx:272 AliTrackResidualsLinear.cxx:273 AliTrackResidualsLinear.cxx:274 AliTrackResidualsLinear.cxx:275 AliTrackResidualsLinear.cxx:276 AliTrackResidualsLinear.cxx:277 AliTrackResidualsLinear.cxx:278 AliTrackResidualsLinear.cxx:279 AliTrackResidualsLinear.cxx:280 AliTrackResidualsLinear.cxx:281 AliTrackResidualsLinear.cxx:282 AliTrackResidualsLinear.cxx:283 AliTrackResidualsLinear.cxx:284 AliTrackResidualsLinear.cxx:285 AliTrackResidualsLinear.cxx:286 AliTrackResidualsLinear.cxx:287 AliTrackResidualsLinear.cxx:288 AliTrackResidualsLinear.cxx:289 AliTrackResidualsLinear.cxx:290 AliTrackResidualsLinear.cxx:291 AliTrackResidualsLinear.cxx:292 AliTrackResidualsLinear.cxx:293 AliTrackResidualsLinear.cxx:294 AliTrackResidualsLinear.cxx:295 AliTrackResidualsLinear.cxx:296 AliTrackResidualsLinear.cxx:297 AliTrackResidualsLinear.cxx:298 AliTrackResidualsLinear.cxx:299 AliTrackResidualsLinear.cxx:300 AliTrackResidualsLinear.cxx:301 AliTrackResidualsLinear.cxx:302 AliTrackResidualsLinear.cxx:303 AliTrackResidualsLinear.cxx:304 AliTrackResidualsLinear.cxx:305 AliTrackResidualsLinear.cxx:306 AliTrackResidualsLinear.cxx:307 AliTrackResidualsLinear.cxx:308 AliTrackResidualsLinear.cxx:309 AliTrackResidualsLinear.cxx:310 AliTrackResidualsLinear.cxx:311 AliTrackResidualsLinear.cxx:312 AliTrackResidualsLinear.cxx:313 AliTrackResidualsLinear.cxx:314 AliTrackResidualsLinear.cxx:315 AliTrackResidualsLinear.cxx:316 AliTrackResidualsLinear.cxx:317 AliTrackResidualsLinear.cxx:318 AliTrackResidualsLinear.cxx:319 AliTrackResidualsLinear.cxx:320 AliTrackResidualsLinear.cxx:321 AliTrackResidualsLinear.cxx:322