ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

//-----------------------------------------------------------------
//   Implementation of the derived class for track residuals
//   based on linear chi2 minimization 
//  The minimization relies on the fact that the alignment parameters     
//   (angles and translations) are small.                                  
//   TLinearFitter used for minimization
//   Possibility to fix Paramaters
//   FixParameter()ReleaseParameter();
//   Possibility to define fraction of outliers to be skipped
//
//   marian.ivanov@cern.ch
//
//-----------------------------------------------------------------

#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)
{
  // Default constructor
  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)
{
  // Constructor
  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)
{
  // Copy constructor
  //..
  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)
{
  // Assignment operator
 ((AliTrackResiduals *)this)->operator=(res);
 return *this;
}
//______________________________________________________________________________
AliTrackResidualsLinear::~AliTrackResidualsLinear()
{
  //
  //
  //
  delete fFitter;
}


//______________________________________________________________________________
Bool_t AliTrackResidualsLinear::Minimize()
{
  // Implementation of fast linear Chi2 minimizer
  // based on TLinear fitter
  //
  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)
{
  //
  // add points to linear fitter - option with correlation betwee measurement in different dimensions
  // p1      - local point
  // pprime  - track extrapolation point
  //
  Float_t xyz[3],xyzp[3];
  Float_t cov[6],covp[6];
  p.GetXYZ(xyz,cov); pprime.GetXYZ(xyzp,covp);
  //
  //
  TMatrixD mcov(3,3);   // local point covariance
  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); //  extrapolation point covariance  
  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;
  //mcov.Invert();
  if (!mcov.IsValid()) return; 
  TMatrixD mcovBack = mcov;  // for debug purposes
  //
  // decompose matrix
  //
  TDecompSVD svd(mcov);              // mcov  = svd.fU * covDiagonal * svd.fV.Invert   
  if (!svd.Decompose()) return;      // decomposition failed
  TMatrixD   matrixV = svd.GetV();   // transformation matrix to diagonalize covariance matrix
  Double_t   covDiagonal[3] = {svd.GetSig()[0],svd.GetSig()[1],svd.GetSig()[2]};    // diagonalized covariance matrix
  //
  // residual vector 
  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]);   
  //
  // parametrization matrix
  //
  TMatrixD        mparam(3,6);
  mparam(0,0) = 1;      mparam(1,0) = 0;       mparam(2,0) = 0;            // xshift
  mparam(0,1) = 0;      mparam(1,1) = 1;       mparam(2,1) = 0;            // yshift
  mparam(0,2) = 0;      mparam(1,2) = 0;       mparam(2,2) = 1;            // zshift
  mparam(0,3) = 0;      mparam(1,3) =-xyz[2];  mparam(2,3) = xyz[1];       // x rotation
  mparam(0,4) = xyz[2]; mparam(1,4) = 0;       mparam(2,4) =-xyz[0];       // y rotation
  mparam(0,5) =-xyz[1]; mparam(1,5) = xyz[0];  mparam(2,5) = 0;            // z rotation
  //
  
  TMatrixD  deltaT(matrixV, TMatrixD::kTransposeMult, deltaR);   // tranformed delta
  TMatrixD  mparamT(matrixV,TMatrixD::kTransposeMult, mparam);   // tranformed linear transformation
  if (AliLog::GetDebugLevel("","AliTrackResidualsLinear")>2){    
    //
    // debug part
    //
    //   covDiag = U^-1 * mcov * V      -- diagonalization of covariance matrix

    TMatrixD   matrixU = svd.GetU();                      // transformation matrix to diagonalize covariance matrix
    TMatrixD   matrixUI= svd.GetU(); 
    matrixUI.Invert();
    //
    TMatrixD   test0   = matrixUI*matrixV;                // test matrix - should be unit matrix
    TMatrixD   test1   = matrixUI*mcovBack*matrixV;       // test matrix - diagonal - should be diagonal with covDiagonal on diag
    TMatrixD   test2   = matrixU.T()*matrixV;             // test ortogonality - shoul be unit
    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;     // 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(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");
    }
  }
  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()
{
  // Find the alignment parameters
  // using TLinear fitter  + fill data containers
  // 
  //
  fFitter->Eval();
  //
  // TLinear fitter put as first parameter offset - fixing parameter shifted by one
  //
  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