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.                  *
 **************************************************************************/
//------------------------------------------------------------------
// this class is used for a simple
// track fitting using the polynom
// bending in both directions are allowed
//-----------------------------------------------------------------


#include "AliTPCpolyTrack.h"
#include "TMath.h"

ClassImp(AliTPCpolyTrack)


AliTPCpolyTrack::AliTPCpolyTrack()
  :TObject(),
   fA(0), 
   fB(0), 
   fC(0), 
   fD(0), 
   fE(0), 
   fF(0), 
   fMaxX(0), 
   fMinX(0), 
   fSumW(0),    
   fSumX(0),    
   fSumX2(0),   
   fSumX3(0),    
   fSumX4(0),   
   fSumY(0),    
   fSumYX(0),   
   fSumYX2(0),  
   fSumZ(0),     
   fSumZX(0),   
   fSumZX2(0), 
   fNPoints(0)
{
  Reset();
  //
  for(Int_t i=0;i<200;i++){
    fX[i]=0.;
    fY[i]=0.;
    fSY[i]=0.;
    fZ[i]=0.;
    fSZ[i]=0.;
  }
}

void   AliTPCpolyTrack::Reset()
{
  //
  // reset track
  fSumX = fSumX2= fSumX3=fSumX4 = fSumY=fSumYX=fSumYX2=fSumZ=fSumZX=fSumZX2=fSumW =0;
  fNPoints = 0;
}

void AliTPCpolyTrack::AddPoint(Double_t x, Double_t y, Double_t z,Double_t sy, Double_t sz)
{
  //
  //
  if (fNPoints==0){
    fMaxX = x;
    fMinX = x;
  }else{
    if (x>fMaxX) fMaxX=x;
    if (x<fMinX) fMinX=x;
  }

  Double_t x2 = x*x; 
  Double_t w = 2./(sy+sz);
  fSumW += w;
  //
  fSumX       += x*w;
  fSumX2      += x2*w;
  fSumX3      += x2*x*w;
  fSumX4      += x2*x2*w;
  //
  fSumY       +=y*w;
  fSumYX      +=y*x*w;
  fSumYX2     +=y*x2*w;
  //
  fSumZ       +=z*w;
  fSumZX      +=z*x*w;
  fSumZX2     +=z*x2*w;
  //
  fX[fNPoints] = x;
  fY[fNPoints] = y;
  fZ[fNPoints] = z;  
  fSY[fNPoints] = sy;
  fSZ[fNPoints] = sz;  

  fNPoints++;
  
}

void  AliTPCpolyTrack::UpdateParameters()
{
  //
  //
  //Update fit parameters
  if (fNPoints>4){
    Fit2(fA,fB,fC);
    //    Fit2(fSumZ,fSumZX,fSumZX2,fSumX,fSumX2,fSumX3,fSumX4,fNPoints,fD,fE,fF);
    Fit1(fD,fE,fF);
  }
  else
    {
      Fit1(fA,fB,fC);
      Fit1(fD,fE,fF);
    }
}

void  AliTPCpolyTrack::UpdateParameters(Int_t ny, Int_t nz)
{
  //
  //
  //Update fit parameters
  if (ny>1){
    Fit2(fA,fB,fC);
  }
  else{ 
    Fit1(fA,fB,fC);
  }
  if (nz>1){
    Fit2(fD,fE,fF);
  }
  else{
    Fit1(fD,fE,fF);
  }
}



void  AliTPCpolyTrack::Fit2(
	    Double_t &a, Double_t &b, Double_t &c)
{
  //fit of second order
  Double_t det = 
    fSumW* (fSumX2*fSumX4-fSumX3*fSumX3) -
    fSumX*      (fSumX*fSumX4-fSumX3*fSumX2)+
    fSumX2*     (fSumX*fSumX3-fSumX2*fSumX2);
    
  if (TMath::Abs(det)> 0.000000000000001) {    
    a = 
      (fSumY * (fSumX2*fSumX4-fSumX3*fSumX3)-
       fSumX *(fSumYX*fSumX4-fSumYX2*fSumX3)+
       fSumX2*(fSumYX*fSumX3-fSumYX2*fSumX2))/det; 
    b=
      (fSumW*(fSumYX*fSumX4-fSumX3*fSumYX2)-
      fSumY*(fSumX*fSumX4-fSumX3*fSumX2)+
      fSumX2*(fSumX*fSumYX2-fSumYX*fSumX2))/det;
    c=
      (fSumW*(fSumX2*fSumYX2-fSumYX*fSumX3)-
       fSumX*(fSumX*fSumYX2-fSumYX*fSumX2)+
       fSumY*(fSumX*fSumX3-fSumX2*fSumX2))/det;  
  }
}

void  AliTPCpolyTrack::Fit1( Double_t &a, Double_t &b, Double_t &c)
{
  //
  //
  //
  Double_t det = fSumW*fSumX2-fSumX*fSumX;
  if (TMath::Abs(det)> 0.000000000000001) { 
    b = (fSumW*fSumYX-fSumX*fSumY)/det;
    a = (fSumX2*fSumY-fSumX*fSumYX)/det;
    c = 0;
  }else{
    a =fSumYX/fSumX;
    b =0;
    c =0;
  }

}

void AliTPCpolyTrack::Refit(AliTPCpolyTrack &track, Double_t deltay, Double_t deltaz)
{
  //
  // refit with cut on distortion
  //
  track.Reset();
  //first refit to temporary
  AliTPCpolyTrack track0;
  track0.Reset();
  for (Int_t i=0;i<fNPoints;i++){
    Double_t y,z;
    GetFitPoint(fX[i],y,z);
    if ( (TMath::Abs(y-fY[i])<deltay)&&(TMath::Abs(z-fZ[i])<deltaz)){
      track0.AddPoint(fX[i],y,z);
    }
  }
  if (track0.GetN()>2) 
    track0.UpdateParameters();
  else 
    return;
  //
  for (Int_t i=0;i<fNPoints;i++){
    Double_t y,z;
    track0.GetFitPoint(fX[i],y,z);
    if ( (TMath::Abs(y-fY[i])<deltay)&&(TMath::Abs(z-fZ[i])<deltaz)){
      track.AddPoint(fX[i],y,z);
    }
  }
  if (track.GetN()>2) 
    track.UpdateParameters();

}

void AliTPCpolyTrack::Refit(AliTPCpolyTrack &track, Double_t deltay, Double_t deltaz, Int_t nfirst, Int_t ny, Int_t nz)
{
  //
  // refit with cut on distortion
  //
  track.Reset();
  //first refit to temporary
  AliTPCpolyTrack track0;
  track0.Reset();
  for (Int_t i=0;i<fNPoints;i++){
    Double_t y,z;
    GetFitPoint(fX[i],y,z);
    if ( (TMath::Abs(y-fY[i])<deltay)&&(TMath::Abs(z-fZ[i])<deltaz)){
      track0.AddPoint(fX[i],y,z);
    }    
  }
  if (track0.GetN()>2){ 
    if (track0.GetN()>nfirst)
      track0.UpdateParameters(ny,nz);
    else 
      track0.UpdateParameters(1,1);
  }
  else 
    return;
  //
  for (Int_t i=0;i<fNPoints;i++){
    Double_t y,z;
    track0.GetFitPoint(fX[i],y,z);
    if ( (TMath::Abs(y-fY[i])<deltay)&&(TMath::Abs(z-fZ[i])<deltaz)){
      track.AddPoint(fX[i],y,z);
    }
  }
  if (track.GetN()>2) 
    track.UpdateParameters(ny,nz);

}

 AliTPCpolyTrack.cxx:1
 AliTPCpolyTrack.cxx:2
 AliTPCpolyTrack.cxx:3
 AliTPCpolyTrack.cxx:4
 AliTPCpolyTrack.cxx:5
 AliTPCpolyTrack.cxx:6
 AliTPCpolyTrack.cxx:7
 AliTPCpolyTrack.cxx:8
 AliTPCpolyTrack.cxx:9
 AliTPCpolyTrack.cxx:10
 AliTPCpolyTrack.cxx:11
 AliTPCpolyTrack.cxx:12
 AliTPCpolyTrack.cxx:13
 AliTPCpolyTrack.cxx:14
 AliTPCpolyTrack.cxx:15
 AliTPCpolyTrack.cxx:16
 AliTPCpolyTrack.cxx:17
 AliTPCpolyTrack.cxx:18
 AliTPCpolyTrack.cxx:19
 AliTPCpolyTrack.cxx:20
 AliTPCpolyTrack.cxx:21
 AliTPCpolyTrack.cxx:22
 AliTPCpolyTrack.cxx:23
 AliTPCpolyTrack.cxx:24
 AliTPCpolyTrack.cxx:25
 AliTPCpolyTrack.cxx:26
 AliTPCpolyTrack.cxx:27
 AliTPCpolyTrack.cxx:28
 AliTPCpolyTrack.cxx:29
 AliTPCpolyTrack.cxx:30
 AliTPCpolyTrack.cxx:31
 AliTPCpolyTrack.cxx:32
 AliTPCpolyTrack.cxx:33
 AliTPCpolyTrack.cxx:34
 AliTPCpolyTrack.cxx:35
 AliTPCpolyTrack.cxx:36
 AliTPCpolyTrack.cxx:37
 AliTPCpolyTrack.cxx:38
 AliTPCpolyTrack.cxx:39
 AliTPCpolyTrack.cxx:40
 AliTPCpolyTrack.cxx:41
 AliTPCpolyTrack.cxx:42
 AliTPCpolyTrack.cxx:43
 AliTPCpolyTrack.cxx:44
 AliTPCpolyTrack.cxx:45
 AliTPCpolyTrack.cxx:46
 AliTPCpolyTrack.cxx:47
 AliTPCpolyTrack.cxx:48
 AliTPCpolyTrack.cxx:49
 AliTPCpolyTrack.cxx:50
 AliTPCpolyTrack.cxx:51
 AliTPCpolyTrack.cxx:52
 AliTPCpolyTrack.cxx:53
 AliTPCpolyTrack.cxx:54
 AliTPCpolyTrack.cxx:55
 AliTPCpolyTrack.cxx:56
 AliTPCpolyTrack.cxx:57
 AliTPCpolyTrack.cxx:58
 AliTPCpolyTrack.cxx:59
 AliTPCpolyTrack.cxx:60
 AliTPCpolyTrack.cxx:61
 AliTPCpolyTrack.cxx:62
 AliTPCpolyTrack.cxx:63
 AliTPCpolyTrack.cxx:64
 AliTPCpolyTrack.cxx:65
 AliTPCpolyTrack.cxx:66
 AliTPCpolyTrack.cxx:67
 AliTPCpolyTrack.cxx:68
 AliTPCpolyTrack.cxx:69
 AliTPCpolyTrack.cxx:70
 AliTPCpolyTrack.cxx:71
 AliTPCpolyTrack.cxx:72
 AliTPCpolyTrack.cxx:73
 AliTPCpolyTrack.cxx:74
 AliTPCpolyTrack.cxx:75
 AliTPCpolyTrack.cxx:76
 AliTPCpolyTrack.cxx:77
 AliTPCpolyTrack.cxx:78
 AliTPCpolyTrack.cxx:79
 AliTPCpolyTrack.cxx:80
 AliTPCpolyTrack.cxx:81
 AliTPCpolyTrack.cxx:82
 AliTPCpolyTrack.cxx:83
 AliTPCpolyTrack.cxx:84
 AliTPCpolyTrack.cxx:85
 AliTPCpolyTrack.cxx:86
 AliTPCpolyTrack.cxx:87
 AliTPCpolyTrack.cxx:88
 AliTPCpolyTrack.cxx:89
 AliTPCpolyTrack.cxx:90
 AliTPCpolyTrack.cxx:91
 AliTPCpolyTrack.cxx:92
 AliTPCpolyTrack.cxx:93
 AliTPCpolyTrack.cxx:94
 AliTPCpolyTrack.cxx:95
 AliTPCpolyTrack.cxx:96
 AliTPCpolyTrack.cxx:97
 AliTPCpolyTrack.cxx:98
 AliTPCpolyTrack.cxx:99
 AliTPCpolyTrack.cxx:100
 AliTPCpolyTrack.cxx:101
 AliTPCpolyTrack.cxx:102
 AliTPCpolyTrack.cxx:103
 AliTPCpolyTrack.cxx:104
 AliTPCpolyTrack.cxx:105
 AliTPCpolyTrack.cxx:106
 AliTPCpolyTrack.cxx:107
 AliTPCpolyTrack.cxx:108
 AliTPCpolyTrack.cxx:109
 AliTPCpolyTrack.cxx:110
 AliTPCpolyTrack.cxx:111
 AliTPCpolyTrack.cxx:112
 AliTPCpolyTrack.cxx:113
 AliTPCpolyTrack.cxx:114
 AliTPCpolyTrack.cxx:115
 AliTPCpolyTrack.cxx:116
 AliTPCpolyTrack.cxx:117
 AliTPCpolyTrack.cxx:118
 AliTPCpolyTrack.cxx:119
 AliTPCpolyTrack.cxx:120
 AliTPCpolyTrack.cxx:121
 AliTPCpolyTrack.cxx:122
 AliTPCpolyTrack.cxx:123
 AliTPCpolyTrack.cxx:124
 AliTPCpolyTrack.cxx:125
 AliTPCpolyTrack.cxx:126
 AliTPCpolyTrack.cxx:127
 AliTPCpolyTrack.cxx:128
 AliTPCpolyTrack.cxx:129
 AliTPCpolyTrack.cxx:130
 AliTPCpolyTrack.cxx:131
 AliTPCpolyTrack.cxx:132
 AliTPCpolyTrack.cxx:133
 AliTPCpolyTrack.cxx:134
 AliTPCpolyTrack.cxx:135
 AliTPCpolyTrack.cxx:136
 AliTPCpolyTrack.cxx:137
 AliTPCpolyTrack.cxx:138
 AliTPCpolyTrack.cxx:139
 AliTPCpolyTrack.cxx:140
 AliTPCpolyTrack.cxx:141
 AliTPCpolyTrack.cxx:142
 AliTPCpolyTrack.cxx:143
 AliTPCpolyTrack.cxx:144
 AliTPCpolyTrack.cxx:145
 AliTPCpolyTrack.cxx:146
 AliTPCpolyTrack.cxx:147
 AliTPCpolyTrack.cxx:148
 AliTPCpolyTrack.cxx:149
 AliTPCpolyTrack.cxx:150
 AliTPCpolyTrack.cxx:151
 AliTPCpolyTrack.cxx:152
 AliTPCpolyTrack.cxx:153
 AliTPCpolyTrack.cxx:154
 AliTPCpolyTrack.cxx:155
 AliTPCpolyTrack.cxx:156
 AliTPCpolyTrack.cxx:157
 AliTPCpolyTrack.cxx:158
 AliTPCpolyTrack.cxx:159
 AliTPCpolyTrack.cxx:160
 AliTPCpolyTrack.cxx:161
 AliTPCpolyTrack.cxx:162
 AliTPCpolyTrack.cxx:163
 AliTPCpolyTrack.cxx:164
 AliTPCpolyTrack.cxx:165
 AliTPCpolyTrack.cxx:166
 AliTPCpolyTrack.cxx:167
 AliTPCpolyTrack.cxx:168
 AliTPCpolyTrack.cxx:169
 AliTPCpolyTrack.cxx:170
 AliTPCpolyTrack.cxx:171
 AliTPCpolyTrack.cxx:172
 AliTPCpolyTrack.cxx:173
 AliTPCpolyTrack.cxx:174
 AliTPCpolyTrack.cxx:175
 AliTPCpolyTrack.cxx:176
 AliTPCpolyTrack.cxx:177
 AliTPCpolyTrack.cxx:178
 AliTPCpolyTrack.cxx:179
 AliTPCpolyTrack.cxx:180
 AliTPCpolyTrack.cxx:181
 AliTPCpolyTrack.cxx:182
 AliTPCpolyTrack.cxx:183
 AliTPCpolyTrack.cxx:184
 AliTPCpolyTrack.cxx:185
 AliTPCpolyTrack.cxx:186
 AliTPCpolyTrack.cxx:187
 AliTPCpolyTrack.cxx:188
 AliTPCpolyTrack.cxx:189
 AliTPCpolyTrack.cxx:190
 AliTPCpolyTrack.cxx:191
 AliTPCpolyTrack.cxx:192
 AliTPCpolyTrack.cxx:193
 AliTPCpolyTrack.cxx:194
 AliTPCpolyTrack.cxx:195
 AliTPCpolyTrack.cxx:196
 AliTPCpolyTrack.cxx:197
 AliTPCpolyTrack.cxx:198
 AliTPCpolyTrack.cxx:199
 AliTPCpolyTrack.cxx:200
 AliTPCpolyTrack.cxx:201
 AliTPCpolyTrack.cxx:202
 AliTPCpolyTrack.cxx:203
 AliTPCpolyTrack.cxx:204
 AliTPCpolyTrack.cxx:205
 AliTPCpolyTrack.cxx:206
 AliTPCpolyTrack.cxx:207
 AliTPCpolyTrack.cxx:208
 AliTPCpolyTrack.cxx:209
 AliTPCpolyTrack.cxx:210
 AliTPCpolyTrack.cxx:211
 AliTPCpolyTrack.cxx:212
 AliTPCpolyTrack.cxx:213
 AliTPCpolyTrack.cxx:214
 AliTPCpolyTrack.cxx:215
 AliTPCpolyTrack.cxx:216
 AliTPCpolyTrack.cxx:217
 AliTPCpolyTrack.cxx:218
 AliTPCpolyTrack.cxx:219
 AliTPCpolyTrack.cxx:220
 AliTPCpolyTrack.cxx:221
 AliTPCpolyTrack.cxx:222
 AliTPCpolyTrack.cxx:223
 AliTPCpolyTrack.cxx:224
 AliTPCpolyTrack.cxx:225
 AliTPCpolyTrack.cxx:226
 AliTPCpolyTrack.cxx:227
 AliTPCpolyTrack.cxx:228
 AliTPCpolyTrack.cxx:229
 AliTPCpolyTrack.cxx:230
 AliTPCpolyTrack.cxx:231
 AliTPCpolyTrack.cxx:232
 AliTPCpolyTrack.cxx:233
 AliTPCpolyTrack.cxx:234
 AliTPCpolyTrack.cxx:235
 AliTPCpolyTrack.cxx:236
 AliTPCpolyTrack.cxx:237
 AliTPCpolyTrack.cxx:238
 AliTPCpolyTrack.cxx:239
 AliTPCpolyTrack.cxx:240
 AliTPCpolyTrack.cxx:241
 AliTPCpolyTrack.cxx:242
 AliTPCpolyTrack.cxx:243
 AliTPCpolyTrack.cxx:244
 AliTPCpolyTrack.cxx:245
 AliTPCpolyTrack.cxx:246
 AliTPCpolyTrack.cxx:247
 AliTPCpolyTrack.cxx:248
 AliTPCpolyTrack.cxx:249
 AliTPCpolyTrack.cxx:250
 AliTPCpolyTrack.cxx:251
 AliTPCpolyTrack.cxx:252
 AliTPCpolyTrack.cxx:253
 AliTPCpolyTrack.cxx:254
 AliTPCpolyTrack.cxx:255
 AliTPCpolyTrack.cxx:256
 AliTPCpolyTrack.cxx:257
 AliTPCpolyTrack.cxx:258
 AliTPCpolyTrack.cxx:259