ROOT logo
//-------------------------------------------------------------------------
//               Implementation of the ITSU track class
//             based on the "cooked covariance" approach
//-------------------------------------------------------------------------
#include "AliITSUTrackCooked.h"
#include "AliCluster.h"
#include "AliESDtrack.h"

ClassImp(AliITSUTrackCooked)

AliITSUTrackCooked::AliITSUTrackCooked(): 
AliKalmanTrack()
{
  //--------------------------------------------------------------------
  // This default constructor needs to be provided
  //--------------------------------------------------------------------
    for (Int_t i=0; i<2*AliITSUTrackerCooked::kNLayers; i++) {
        fIndex[i]=0;
    }
}

AliITSUTrackCooked::AliITSUTrackCooked(const AliITSUTrackCooked &t):
AliKalmanTrack(t)
{
    //--------------------------------------------------------------------
    // Copy constructor
    //--------------------------------------------------------------------
    for (Int_t i=0; i<2*AliITSUTrackerCooked::kNLayers; i++) {
        fIndex[i]=t.fIndex[i];
    }
}

AliITSUTrackCooked::AliITSUTrackCooked(const AliESDtrack &t):
AliKalmanTrack()
{
    //--------------------------------------------------------------------
    // Constructior from an ESD track
    //--------------------------------------------------------------------
    Set(t.GetX(), t.GetAlpha(), t.GetParameter(), t.GetCovariance());
    SetLabel(t.GetITSLabel());
    SetChi2(t.GetITSchi2());
    SetNumberOfClusters(t.GetITSclusters(fIndex));
}

AliITSUTrackCooked &AliITSUTrackCooked::operator=(const AliITSUTrackCooked &o){
    if (this != &o) {
       AliKalmanTrack::operator=(o);
       for (Int_t i=0; i<2*AliITSUTrackerCooked::kNLayers; i++)
           fIndex[i]=o.fIndex[i];
    }
    return *this;
}

AliITSUTrackCooked::~AliITSUTrackCooked()
{
  //--------------------------------------------------------------------
  // Virtual destructor
  //--------------------------------------------------------------------
}

Int_t AliITSUTrackCooked::Compare(const TObject *o) const {
  //-----------------------------------------------------------------
  // This function compares tracks according to the their curvature
  //-----------------------------------------------------------------
  const AliITSUTrackCooked *t=(const AliITSUTrackCooked*)o;
  Double_t co=TMath::Abs(t->OneOverPt());
  Double_t c =TMath::Abs(OneOverPt());
  //Double_t co=t->GetSigmaY2()*t->GetSigmaZ2();
  //Double_t c =GetSigmaY2()*GetSigmaZ2();
  if (c>co) return 1;
  else if (c<co) return -1;
  return 0;
}

void AliITSUTrackCooked::ResetClusters() {
  //------------------------------------------------------------------
  // Reset the array of attached clusters.
  //------------------------------------------------------------------
  for (Int_t i=0; i<2*AliITSUTrackerCooked::kNLayers; i++) fIndex[i]=-1;
  SetChi2(0.); 
  SetNumberOfClusters(0);
} 

void AliITSUTrackCooked::SetClusterIndex(Int_t l, Int_t i)
{
    //--------------------------------------------------------------------
    // Set the cluster index
    //--------------------------------------------------------------------
    Int_t idx = (l<<28) + i;
    Int_t n=GetNumberOfClusters();
    fIndex[n]=idx;
    SetNumberOfClusters(n+1);
}

Double_t AliITSUTrackCooked::GetPredictedChi2(const AliCluster *c) const {
  //-----------------------------------------------------------------
  // This function calculates a predicted chi2 increment.
  //-----------------------------------------------------------------
  Double_t p[2]={c->GetY(), c->GetZ()};
  Double_t cov[3]={c->GetSigmaY2(), 0., c->GetSigmaZ2()};
  return AliExternalTrackParam::GetPredictedChi2(p,cov);
}

Bool_t AliITSUTrackCooked::PropagateTo(Double_t xk, Double_t t,Double_t x0rho) {
  //------------------------------------------------------------------
  // This function propagates a track
  // t is the material thicknes in units X/X0
  // x0rho is the material X0*density
  //------------------------------------------------------------------
  Double_t xOverX0,xTimesRho; 
  xOverX0 = t; xTimesRho = t*x0rho;
  if (!CorrectForMeanMaterial(xOverX0,xTimesRho,GetMass(),kTRUE)) return kFALSE;

  Double_t bz=GetBz();
  if (!AliExternalTrackParam::PropagateTo(xk,bz)) return kFALSE;
  //Double_t b[3]; GetBxByBz(b);
  //if (!AliExternalTrackParam::PropagateToBxByBz(xk,b)) return kFALSE;

  return kTRUE;
}

Bool_t AliITSUTrackCooked::Update(const AliCluster *c, Double_t chi2, Int_t idx)
{
  //--------------------------------------------------------------------
  // Update track params
  //--------------------------------------------------------------------
  Double_t p[2]={c->GetY(), c->GetZ()};
  Double_t cov[3]={c->GetSigmaY2(), c->GetSigmaYZ(), c->GetSigmaZ2()};

  if (!AliExternalTrackParam::Update(p,cov)) return kFALSE;

  Int_t n=GetNumberOfClusters();
  fIndex[n]=idx;
  SetNumberOfClusters(n+1);
  SetChi2(GetChi2()+chi2);

  return kTRUE;
}

Bool_t AliITSUTrackCooked::
GetPhiZat(Double_t r, Double_t &phi, Double_t &z) const {
  //------------------------------------------------------------------
  // This function returns the global cylindrical (phi,z) of the track 
  // position estimated at the radius r. 
  // The track curvature is neglected.
  //------------------------------------------------------------------
  Double_t d=GetD(0., 0., GetBz());
  if (TMath::Abs(d) > r) {
    if (r>1e-1) return kFALSE;
    r = TMath::Abs(d);
  }

  Double_t rcurr=TMath::Sqrt(GetX()*GetX() + GetY()*GetY());
  if (TMath::Abs(d) > rcurr) return kFALSE;
  Double_t globXYZcurr[3]; GetXYZ(globXYZcurr); 
  Double_t phicurr=TMath::ATan2(globXYZcurr[1],globXYZcurr[0]);

  if (GetX()>=0.) {
    phi=phicurr+TMath::ASin(d/r)-TMath::ASin(d/rcurr);
  } else {
    phi=phicurr+TMath::ASin(d/r)+TMath::ASin(d/rcurr)-TMath::Pi();
  }

  // return a phi in [0,2pi[ 
  if (phi<0.) phi+=2.*TMath::Pi();
  else if (phi>=2.*TMath::Pi()) phi-=2.*TMath::Pi();
  z=GetZ()+GetTgl()*(TMath::Sqrt((r-d)*(r+d))-TMath::Sqrt((rcurr-d)*(rcurr+d)));

  return kTRUE;
}
 AliITSUTrackCooked.cxx:1
 AliITSUTrackCooked.cxx:2
 AliITSUTrackCooked.cxx:3
 AliITSUTrackCooked.cxx:4
 AliITSUTrackCooked.cxx:5
 AliITSUTrackCooked.cxx:6
 AliITSUTrackCooked.cxx:7
 AliITSUTrackCooked.cxx:8
 AliITSUTrackCooked.cxx:9
 AliITSUTrackCooked.cxx:10
 AliITSUTrackCooked.cxx:11
 AliITSUTrackCooked.cxx:12
 AliITSUTrackCooked.cxx:13
 AliITSUTrackCooked.cxx:14
 AliITSUTrackCooked.cxx:15
 AliITSUTrackCooked.cxx:16
 AliITSUTrackCooked.cxx:17
 AliITSUTrackCooked.cxx:18
 AliITSUTrackCooked.cxx:19
 AliITSUTrackCooked.cxx:20
 AliITSUTrackCooked.cxx:21
 AliITSUTrackCooked.cxx:22
 AliITSUTrackCooked.cxx:23
 AliITSUTrackCooked.cxx:24
 AliITSUTrackCooked.cxx:25
 AliITSUTrackCooked.cxx:26
 AliITSUTrackCooked.cxx:27
 AliITSUTrackCooked.cxx:28
 AliITSUTrackCooked.cxx:29
 AliITSUTrackCooked.cxx:30
 AliITSUTrackCooked.cxx:31
 AliITSUTrackCooked.cxx:32
 AliITSUTrackCooked.cxx:33
 AliITSUTrackCooked.cxx:34
 AliITSUTrackCooked.cxx:35
 AliITSUTrackCooked.cxx:36
 AliITSUTrackCooked.cxx:37
 AliITSUTrackCooked.cxx:38
 AliITSUTrackCooked.cxx:39
 AliITSUTrackCooked.cxx:40
 AliITSUTrackCooked.cxx:41
 AliITSUTrackCooked.cxx:42
 AliITSUTrackCooked.cxx:43
 AliITSUTrackCooked.cxx:44
 AliITSUTrackCooked.cxx:45
 AliITSUTrackCooked.cxx:46
 AliITSUTrackCooked.cxx:47
 AliITSUTrackCooked.cxx:48
 AliITSUTrackCooked.cxx:49
 AliITSUTrackCooked.cxx:50
 AliITSUTrackCooked.cxx:51
 AliITSUTrackCooked.cxx:52
 AliITSUTrackCooked.cxx:53
 AliITSUTrackCooked.cxx:54
 AliITSUTrackCooked.cxx:55
 AliITSUTrackCooked.cxx:56
 AliITSUTrackCooked.cxx:57
 AliITSUTrackCooked.cxx:58
 AliITSUTrackCooked.cxx:59
 AliITSUTrackCooked.cxx:60
 AliITSUTrackCooked.cxx:61
 AliITSUTrackCooked.cxx:62
 AliITSUTrackCooked.cxx:63
 AliITSUTrackCooked.cxx:64
 AliITSUTrackCooked.cxx:65
 AliITSUTrackCooked.cxx:66
 AliITSUTrackCooked.cxx:67
 AliITSUTrackCooked.cxx:68
 AliITSUTrackCooked.cxx:69
 AliITSUTrackCooked.cxx:70
 AliITSUTrackCooked.cxx:71
 AliITSUTrackCooked.cxx:72
 AliITSUTrackCooked.cxx:73
 AliITSUTrackCooked.cxx:74
 AliITSUTrackCooked.cxx:75
 AliITSUTrackCooked.cxx:76
 AliITSUTrackCooked.cxx:77
 AliITSUTrackCooked.cxx:78
 AliITSUTrackCooked.cxx:79
 AliITSUTrackCooked.cxx:80
 AliITSUTrackCooked.cxx:81
 AliITSUTrackCooked.cxx:82
 AliITSUTrackCooked.cxx:83
 AliITSUTrackCooked.cxx:84
 AliITSUTrackCooked.cxx:85
 AliITSUTrackCooked.cxx:86
 AliITSUTrackCooked.cxx:87
 AliITSUTrackCooked.cxx:88
 AliITSUTrackCooked.cxx:89
 AliITSUTrackCooked.cxx:90
 AliITSUTrackCooked.cxx:91
 AliITSUTrackCooked.cxx:92
 AliITSUTrackCooked.cxx:93
 AliITSUTrackCooked.cxx:94
 AliITSUTrackCooked.cxx:95
 AliITSUTrackCooked.cxx:96
 AliITSUTrackCooked.cxx:97
 AliITSUTrackCooked.cxx:98
 AliITSUTrackCooked.cxx:99
 AliITSUTrackCooked.cxx:100
 AliITSUTrackCooked.cxx:101
 AliITSUTrackCooked.cxx:102
 AliITSUTrackCooked.cxx:103
 AliITSUTrackCooked.cxx:104
 AliITSUTrackCooked.cxx:105
 AliITSUTrackCooked.cxx:106
 AliITSUTrackCooked.cxx:107
 AliITSUTrackCooked.cxx:108
 AliITSUTrackCooked.cxx:109
 AliITSUTrackCooked.cxx:110
 AliITSUTrackCooked.cxx:111
 AliITSUTrackCooked.cxx:112
 AliITSUTrackCooked.cxx:113
 AliITSUTrackCooked.cxx:114
 AliITSUTrackCooked.cxx:115
 AliITSUTrackCooked.cxx:116
 AliITSUTrackCooked.cxx:117
 AliITSUTrackCooked.cxx:118
 AliITSUTrackCooked.cxx:119
 AliITSUTrackCooked.cxx:120
 AliITSUTrackCooked.cxx:121
 AliITSUTrackCooked.cxx:122
 AliITSUTrackCooked.cxx:123
 AliITSUTrackCooked.cxx:124
 AliITSUTrackCooked.cxx:125
 AliITSUTrackCooked.cxx:126
 AliITSUTrackCooked.cxx:127
 AliITSUTrackCooked.cxx:128
 AliITSUTrackCooked.cxx:129
 AliITSUTrackCooked.cxx:130
 AliITSUTrackCooked.cxx:131
 AliITSUTrackCooked.cxx:132
 AliITSUTrackCooked.cxx:133
 AliITSUTrackCooked.cxx:134
 AliITSUTrackCooked.cxx:135
 AliITSUTrackCooked.cxx:136
 AliITSUTrackCooked.cxx:137
 AliITSUTrackCooked.cxx:138
 AliITSUTrackCooked.cxx:139
 AliITSUTrackCooked.cxx:140
 AliITSUTrackCooked.cxx:141
 AliITSUTrackCooked.cxx:142
 AliITSUTrackCooked.cxx:143
 AliITSUTrackCooked.cxx:144
 AliITSUTrackCooked.cxx:145
 AliITSUTrackCooked.cxx:146
 AliITSUTrackCooked.cxx:147
 AliITSUTrackCooked.cxx:148
 AliITSUTrackCooked.cxx:149
 AliITSUTrackCooked.cxx:150
 AliITSUTrackCooked.cxx:151
 AliITSUTrackCooked.cxx:152
 AliITSUTrackCooked.cxx:153
 AliITSUTrackCooked.cxx:154
 AliITSUTrackCooked.cxx:155
 AliITSUTrackCooked.cxx:156
 AliITSUTrackCooked.cxx:157
 AliITSUTrackCooked.cxx:158
 AliITSUTrackCooked.cxx:159
 AliITSUTrackCooked.cxx:160
 AliITSUTrackCooked.cxx:161
 AliITSUTrackCooked.cxx:162
 AliITSUTrackCooked.cxx:163
 AliITSUTrackCooked.cxx:164
 AliITSUTrackCooked.cxx:165
 AliITSUTrackCooked.cxx:166
 AliITSUTrackCooked.cxx:167
 AliITSUTrackCooked.cxx:168
 AliITSUTrackCooked.cxx:169
 AliITSUTrackCooked.cxx:170