ROOT logo
// $Id$
//
// Modified track class to be able to store cached quantities.
//
// Author: C.Loizides

#include "AliEsdTrackExt.h"
#include <TVector3.h>
#include "AliESDEvent.h"

//_________________________________________________________________________________________________
AliEsdTrackExt::AliEsdTrackExt() 
  : AliESDtrack(), fEmcEta(-10), fEmcPhi(-10), fNCrossedRows(-10), fChi2TPCConstrainedVsGlobal(-10)
{
  // Default constructor.
}

//_________________________________________________________________________________________________
AliEsdTrackExt::AliEsdTrackExt(const AliESDtrack &t)
  : AliESDtrack(t), fEmcEta(-10), fEmcPhi(-10), fNCrossedRows(-10), fChi2TPCConstrainedVsGlobal(-10)
{
  // Constructor.

  const AliExternalTrackParam *outp = GetOuterParam();
  if (outp&&IsEMCAL()) {
    Double_t trkPos[3] = {0.,0.,0.};
    if (outp->GetXYZ(trkPos)) {
      TVector3 vec(trkPos[0],trkPos[1],trkPos[2]);
      Double_t veta = vec.Eta();
      Double_t vphi = vec.Phi();
      if(vphi<0)
        vphi += 2*TMath::Pi();
      fEmcEta = veta;
      fEmcPhi = vphi;
    }
  }

  fNCrossedRows = GetTPCCrossedRows();

  const AliESDVertex* vertex = 0;
  vertex = fESDEvent->GetPrimaryVertexTracks();
  if (!vertex || !vertex->GetStatus()) 
    vertex = fESDEvent->GetPrimaryVertexSPD();
  if (vertex) {
    fChi2TPCConstrainedVsGlobal            = GetChi2TPCConstrainedVsGlobal(vertex);
    fCacheChi2TPCConstrainedVsGlobalVertex = vertex;
  }
}

//_________________________________________________________________________________________________
void AliEsdTrackExt::DeleteParams()
{ 
  // Delete the unneeded params.

  delete fIp;          fIp          = 0;
  delete fTPCInner;    fTPCInner    = 0;
  delete fHMPIDp;      fHMPIDp      = 0;
  delete fFriendTrack; fFriendTrack = 0;
  if (!IsEMCAL()) {
    delete fOp;        fOp          = 0;
  }
}

//_________________________________________________________________________________________________
void AliEsdTrackExt::MakeMiniTrack(Bool_t dall, Bool_t dcon, Bool_t dtrp, Bool_t dmap, 
                                   Bool_t dits, Bool_t dtpc, Bool_t dtrd, Bool_t dtof, 
                                   Bool_t dhmp)
{ 
  // Make mini track depending on what should be reset.

  if (fCp && !dcon) 
    fCp->ResetCovariance(1);

  if (dtrp) {
    if (dcon) {
      delete fCp;
      fCp = 0;
    }
    delete fIp;          fIp          = 0;
    delete fTPCInner;    fTPCInner    = 0;
    delete fOp;          fOp          = 0;
    delete fHMPIDp;      fHMPIDp      = 0;
    delete fFriendTrack; fFriendTrack = 0;
  }

  if (dmap) {
    fTPCFitMap.Clear();
    fTPCClusterMap.Clear();
    fTPCSharedMap.Clear();
  }

  // Reset ITS track related information
  if (dits) {
    if (dall) {
      fITSchi2       = 0;
      fITSncls       = 0;       
      fITSClusterMap = 0;
      fITSSharedMap  = 0;
      fITSsignal     = 0;     
    }     
    fITSLabel      = 0;  
    for (Int_t i=0;i<4;++i) fITSdEdxSamples[i] = 0.;
    for (Int_t i=0;i<AliPID::kSPECIES;++i) fITSr[i] = 0; 
    for (Int_t i=0;i<12;++i) fITSModule[i] = -1;
  }

  // Reset TPC related track information
  if (dtpc) {
    if (dall) {
      fTPCchi2       = 0;
      fTPCchi2Iter1  = 0;
      fTPCncls       = 0;
      fTPCnclsF      = 0;
      fTPCnclsIter1  = 0;
      fTPCnclsFIter1 = 0;
      fTPCFitMap     = 0;
      fTPCClusterMap = 0;
      fTPCSharedMap  = 0;
      fTPCsignal     = 0;
      fTPCsignalS    = 0;
      fTPCsignalN    = 0;
    }
    fTPCLabel      = 0;
    fdTPC          = 0;
    fzTPC          = 0;
    fCddTPC        = 0;
    fCdzTPC        = 0;
    fCzzTPC        = 0;
    fCchi2TPC      = 0;
    for (Int_t i=0;i<AliPID::kSPECIES;++i) fTPCr[i] = 0; 
    for (Int_t i=0;i<4;++i) fTPCPoints[i] = 0;
    for (Int_t i=0; i<3;++i) fKinkIndexes[i] = 0;
    for (Int_t i=0; i<3;++i) fV0Indexes[i] = 0;
    delete fTPCdEdxInfo; fTPCdEdxInfo = 0;
  }

  // Reset TRD related track information
  if (dtrd) {
    fTRDchi2       = 0;
    fTRDncls       = 0;
    fTRDncls0      = 0;
    fTRDsignal     = 0;
    fTRDLabel      = 0;
    fTRDQuality    = 0;
    fTRDntracklets = 0;
    fTRDslices     = 0;
    fTRDBudget     = 0;
    for (Int_t i=0;i<kTRDnPlanes;++i) fTRDTimBin[i] = 0;
    for (Int_t i=0;i<AliPID::kSPECIES;++i) fTRDr[i] = 0; 
    fTRDnSlices    = 0;
    if(fTRDnSlices)
      delete[] fTRDslices;
  }

  // Reset TOF related track information
  if (dtof) {
    if (dall) {
      fTOFchi2       = 0;        
      fTOFindex      = -1;       
      fTOFsignal     = 99999;      
      fTOFCalChannel = -1;
      fTOFsignalToT  = 99999;
      fTOFsignalRaw  = 99999;
      fTOFsignalDz   = 999;
      fTOFsignalDx   = 999;
      fTOFdeltaBC    = 999;
      fTOFl0l1       = 999;
    }
    for (Int_t i=0;i<AliPID::kSPECIES;++i) fTOFr[i] = 0;
    for (Int_t i=0;i<3;++i) fTOFLabel[i] = -1;
    for (Int_t i=0;i<10;++i) fTOFInfo[i] = 0;
    for (Int_t i=0;i<AliPID::kSPECIES;++i) fTrackTime[i] = 0;
  }

  // Reset HMPID related track information
  if (dhmp) {
    fHMPIDchi2     = 0;     
    fHMPIDqn       = 0;     
    fHMPIDcluIdx   = -1;     
    fHMPIDsignal   = 0;     
    fHMPIDtrkTheta = 0;     
    fHMPIDtrkPhi   = 0;      
    fHMPIDtrkX     = 0;     
    fHMPIDtrkY     = 0;      
    fHMPIDmipX     = 0;
    fHMPIDmipY     = 0;
    for (Int_t i=0;i<AliPID::kSPECIES;++i) fHMPIDr[i] = 0;
  }
}

//_________________________________________________________________________________________________
void AliEsdTrackExt::Setup()
{
  // Setup cache with stored variables.

  fCacheNCrossedRows = fNCrossedRows;

  const AliESDVertex* vertex = 0;
  vertex = fESDEvent->GetPrimaryVertexTracks();
  if (!vertex || !vertex->GetStatus()) 
    vertex = fESDEvent->GetPrimaryVertexSPD();
  if (vertex) {
    fCacheChi2TPCConstrainedVsGlobal       = fChi2TPCConstrainedVsGlobal;
    fCacheChi2TPCConstrainedVsGlobalVertex = vertex;
  }
}
 AliEsdTrackExt.cxx:1
 AliEsdTrackExt.cxx:2
 AliEsdTrackExt.cxx:3
 AliEsdTrackExt.cxx:4
 AliEsdTrackExt.cxx:5
 AliEsdTrackExt.cxx:6
 AliEsdTrackExt.cxx:7
 AliEsdTrackExt.cxx:8
 AliEsdTrackExt.cxx:9
 AliEsdTrackExt.cxx:10
 AliEsdTrackExt.cxx:11
 AliEsdTrackExt.cxx:12
 AliEsdTrackExt.cxx:13
 AliEsdTrackExt.cxx:14
 AliEsdTrackExt.cxx:15
 AliEsdTrackExt.cxx:16
 AliEsdTrackExt.cxx:17
 AliEsdTrackExt.cxx:18
 AliEsdTrackExt.cxx:19
 AliEsdTrackExt.cxx:20
 AliEsdTrackExt.cxx:21
 AliEsdTrackExt.cxx:22
 AliEsdTrackExt.cxx:23
 AliEsdTrackExt.cxx:24
 AliEsdTrackExt.cxx:25
 AliEsdTrackExt.cxx:26
 AliEsdTrackExt.cxx:27
 AliEsdTrackExt.cxx:28
 AliEsdTrackExt.cxx:29
 AliEsdTrackExt.cxx:30
 AliEsdTrackExt.cxx:31
 AliEsdTrackExt.cxx:32
 AliEsdTrackExt.cxx:33
 AliEsdTrackExt.cxx:34
 AliEsdTrackExt.cxx:35
 AliEsdTrackExt.cxx:36
 AliEsdTrackExt.cxx:37
 AliEsdTrackExt.cxx:38
 AliEsdTrackExt.cxx:39
 AliEsdTrackExt.cxx:40
 AliEsdTrackExt.cxx:41
 AliEsdTrackExt.cxx:42
 AliEsdTrackExt.cxx:43
 AliEsdTrackExt.cxx:44
 AliEsdTrackExt.cxx:45
 AliEsdTrackExt.cxx:46
 AliEsdTrackExt.cxx:47
 AliEsdTrackExt.cxx:48
 AliEsdTrackExt.cxx:49
 AliEsdTrackExt.cxx:50
 AliEsdTrackExt.cxx:51
 AliEsdTrackExt.cxx:52
 AliEsdTrackExt.cxx:53
 AliEsdTrackExt.cxx:54
 AliEsdTrackExt.cxx:55
 AliEsdTrackExt.cxx:56
 AliEsdTrackExt.cxx:57
 AliEsdTrackExt.cxx:58
 AliEsdTrackExt.cxx:59
 AliEsdTrackExt.cxx:60
 AliEsdTrackExt.cxx:61
 AliEsdTrackExt.cxx:62
 AliEsdTrackExt.cxx:63
 AliEsdTrackExt.cxx:64
 AliEsdTrackExt.cxx:65
 AliEsdTrackExt.cxx:66
 AliEsdTrackExt.cxx:67
 AliEsdTrackExt.cxx:68
 AliEsdTrackExt.cxx:69
 AliEsdTrackExt.cxx:70
 AliEsdTrackExt.cxx:71
 AliEsdTrackExt.cxx:72
 AliEsdTrackExt.cxx:73
 AliEsdTrackExt.cxx:74
 AliEsdTrackExt.cxx:75
 AliEsdTrackExt.cxx:76
 AliEsdTrackExt.cxx:77
 AliEsdTrackExt.cxx:78
 AliEsdTrackExt.cxx:79
 AliEsdTrackExt.cxx:80
 AliEsdTrackExt.cxx:81
 AliEsdTrackExt.cxx:82
 AliEsdTrackExt.cxx:83
 AliEsdTrackExt.cxx:84
 AliEsdTrackExt.cxx:85
 AliEsdTrackExt.cxx:86
 AliEsdTrackExt.cxx:87
 AliEsdTrackExt.cxx:88
 AliEsdTrackExt.cxx:89
 AliEsdTrackExt.cxx:90
 AliEsdTrackExt.cxx:91
 AliEsdTrackExt.cxx:92
 AliEsdTrackExt.cxx:93
 AliEsdTrackExt.cxx:94
 AliEsdTrackExt.cxx:95
 AliEsdTrackExt.cxx:96
 AliEsdTrackExt.cxx:97
 AliEsdTrackExt.cxx:98
 AliEsdTrackExt.cxx:99
 AliEsdTrackExt.cxx:100
 AliEsdTrackExt.cxx:101
 AliEsdTrackExt.cxx:102
 AliEsdTrackExt.cxx:103
 AliEsdTrackExt.cxx:104
 AliEsdTrackExt.cxx:105
 AliEsdTrackExt.cxx:106
 AliEsdTrackExt.cxx:107
 AliEsdTrackExt.cxx:108
 AliEsdTrackExt.cxx:109
 AliEsdTrackExt.cxx:110
 AliEsdTrackExt.cxx:111
 AliEsdTrackExt.cxx:112
 AliEsdTrackExt.cxx:113
 AliEsdTrackExt.cxx:114
 AliEsdTrackExt.cxx:115
 AliEsdTrackExt.cxx:116
 AliEsdTrackExt.cxx:117
 AliEsdTrackExt.cxx:118
 AliEsdTrackExt.cxx:119
 AliEsdTrackExt.cxx:120
 AliEsdTrackExt.cxx:121
 AliEsdTrackExt.cxx:122
 AliEsdTrackExt.cxx:123
 AliEsdTrackExt.cxx:124
 AliEsdTrackExt.cxx:125
 AliEsdTrackExt.cxx:126
 AliEsdTrackExt.cxx:127
 AliEsdTrackExt.cxx:128
 AliEsdTrackExt.cxx:129
 AliEsdTrackExt.cxx:130
 AliEsdTrackExt.cxx:131
 AliEsdTrackExt.cxx:132
 AliEsdTrackExt.cxx:133
 AliEsdTrackExt.cxx:134
 AliEsdTrackExt.cxx:135
 AliEsdTrackExt.cxx:136
 AliEsdTrackExt.cxx:137
 AliEsdTrackExt.cxx:138
 AliEsdTrackExt.cxx:139
 AliEsdTrackExt.cxx:140
 AliEsdTrackExt.cxx:141
 AliEsdTrackExt.cxx:142
 AliEsdTrackExt.cxx:143
 AliEsdTrackExt.cxx:144
 AliEsdTrackExt.cxx:145
 AliEsdTrackExt.cxx:146
 AliEsdTrackExt.cxx:147
 AliEsdTrackExt.cxx:148
 AliEsdTrackExt.cxx:149
 AliEsdTrackExt.cxx:150
 AliEsdTrackExt.cxx:151
 AliEsdTrackExt.cxx:152
 AliEsdTrackExt.cxx:153
 AliEsdTrackExt.cxx:154
 AliEsdTrackExt.cxx:155
 AliEsdTrackExt.cxx:156
 AliEsdTrackExt.cxx:157
 AliEsdTrackExt.cxx:158
 AliEsdTrackExt.cxx:159
 AliEsdTrackExt.cxx:160
 AliEsdTrackExt.cxx:161
 AliEsdTrackExt.cxx:162
 AliEsdTrackExt.cxx:163
 AliEsdTrackExt.cxx:164
 AliEsdTrackExt.cxx:165
 AliEsdTrackExt.cxx:166
 AliEsdTrackExt.cxx:167
 AliEsdTrackExt.cxx:168
 AliEsdTrackExt.cxx:169
 AliEsdTrackExt.cxx:170
 AliEsdTrackExt.cxx:171
 AliEsdTrackExt.cxx:172
 AliEsdTrackExt.cxx:173
 AliEsdTrackExt.cxx:174
 AliEsdTrackExt.cxx:175
 AliEsdTrackExt.cxx:176
 AliEsdTrackExt.cxx:177
 AliEsdTrackExt.cxx:178
 AliEsdTrackExt.cxx:179
 AliEsdTrackExt.cxx:180
 AliEsdTrackExt.cxx:181
 AliEsdTrackExt.cxx:182
 AliEsdTrackExt.cxx:183
 AliEsdTrackExt.cxx:184
 AliEsdTrackExt.cxx:185
 AliEsdTrackExt.cxx:186
 AliEsdTrackExt.cxx:187
 AliEsdTrackExt.cxx:188
 AliEsdTrackExt.cxx:189
 AliEsdTrackExt.cxx:190
 AliEsdTrackExt.cxx:191
 AliEsdTrackExt.cxx:192
 AliEsdTrackExt.cxx:193
 AliEsdTrackExt.cxx:194
 AliEsdTrackExt.cxx:195
 AliEsdTrackExt.cxx:196
 AliEsdTrackExt.cxx:197
 AliEsdTrackExt.cxx:198
 AliEsdTrackExt.cxx:199
 AliEsdTrackExt.cxx:200
 AliEsdTrackExt.cxx:201
 AliEsdTrackExt.cxx:202
 AliEsdTrackExt.cxx:203
 AliEsdTrackExt.cxx:204
 AliEsdTrackExt.cxx:205
 AliEsdTrackExt.cxx:206