ext track class
[u/mrichter/AliRoot.git] / PWG4 / UserTasks / EmcalTasks / AliEsdTrackExt.cxx
1 // $Id$
2 //
3 // Modified track class to be able to store cached quantities.
4 //
5 //
6
7 #include "AliEsdTrackExt.h"
8 #include <TVector3.h>
9 #include "AliESDEvent.h"
10
11 //_________________________________________________________________________________________________
12 AliEsdTrackExt::AliEsdTrackExt(const AliESDtrack &t)
13   : AliESDtrack(t), fEmcEta(-10), fEmcPhi(-10), fNCrossedRows(-10), fChi2TPCConstrainedVsGlobal(-10)
14 {
15   // Constructor.
16
17   const AliExternalTrackParam *outp = GetOuterParam();
18   if (outp&&IsEMCAL()) {
19     Double_t trkPos[3] = {0.,0.,0.};
20     if (outp->GetXYZ(trkPos)) {
21       TVector3 vec(trkPos[0],trkPos[1],trkPos[2]);
22       Double_t veta = vec.Eta();
23       Double_t vphi = vec.Phi();
24       if(vphi<0)
25         vphi += 2*TMath::Pi();
26       fEmcEta = veta;
27       fEmcPhi = vphi;
28     }
29   }
30
31   fNCrossedRows = GetTPCCrossedRows();
32
33   const AliESDVertex* vertex = 0;
34   vertex = fESDEvent->GetPrimaryVertexTracks();
35   if (!vertex || !vertex->GetStatus()) 
36     vertex = fESDEvent->GetPrimaryVertexSPD();
37   if (vertex) {
38     fChi2TPCConstrainedVsGlobal            = GetChi2TPCConstrainedVsGlobal(vertex);
39     fCacheChi2TPCConstrainedVsGlobalVertex = vertex;
40   }
41 }
42
43 //_________________________________________________________________________________________________
44 void AliEsdTrackExt::DeleteParams()
45
46   // Delete the unneeded params.
47
48   delete fIp;          fIp          = 0;
49   delete fTPCInner;    fTPCInner    = 0;
50   delete fHMPIDp;      fHMPIDp      = 0;
51   delete fFriendTrack; fFriendTrack = 0;
52   if (!IsEMCAL()) {
53     delete fOp;        fOp          = 0;
54   }
55 }
56
57 //_________________________________________________________________________________________________
58 void AliEsdTrackExt::MakeMiniTrack(Bool_t dall, Bool_t dtrp, Bool_t dmap, Bool_t dits, 
59                                    Bool_t dtpc, Bool_t dtrd, Bool_t dtof, Bool_t dhmp)
60
61   // Make mini track depending on what should be reset.
62
63   if (dtrp) {
64     delete fCp;          fCp          = 0;
65     delete fIp;          fIp          = 0;
66     delete fTPCInner;    fTPCInner    = 0;
67     delete fOp;          fOp          = 0;
68     delete fHMPIDp;      fHMPIDp      = 0;
69     delete fFriendTrack; fFriendTrack = 0;
70   }
71
72   if (dmap) {
73     fTPCFitMap.Clear();
74     fTPCClusterMap.Clear();
75     fTPCSharedMap.Clear();
76   }
77
78   // Reset ITS track related information
79   if (dits) {
80     if (dall) {
81       fITSchi2       = 0;
82       fITSncls       = 0;       
83       fITSClusterMap = 0;
84       fITSSharedMap  = 0;
85       fITSsignal     = 0;     
86       fITSLabel      = 0;  
87     }     
88     for (Int_t i=0;i<4;++i) fITSdEdxSamples[i] = 0.;
89     for (Int_t i=0;i<AliPID::kSPECIES;++i) fITSr[i] = 0; 
90     for (Int_t i=0;i<12;++i) fITSModule[i] = -1;
91   }
92
93   // Reset TPC related track information
94   if (dtpc) {
95     if (dall) {
96       fTPCchi2       = 0;
97       fTPCchi2Iter1  = 0;
98       fTPCncls       = 0;
99       fTPCnclsF      = 0;
100       fTPCnclsIter1  = 0;
101       fTPCnclsFIter1 = 0;
102       fTPCFitMap     = 0;
103       fTPCClusterMap = 0;
104       fTPCSharedMap  = 0;
105       fTPCsignal     = 0;
106       fTPCsignalS    = 0;
107       fTPCsignalN    = 0;
108       fTPCLabel      = 0;
109       fdTPC          = 0;
110       fzTPC          = 0;
111       fCddTPC        = 0;
112       fCdzTPC        = 0;
113       fCzzTPC        = 0;
114       fCchi2TPC      = 0;
115     }
116     for (Int_t i=0;i<AliPID::kSPECIES;++i) fTPCr[i] = 0; 
117     for (Int_t i=0;i<4;++i) fTPCPoints[i] = 0;
118     for (Int_t i=0; i<3;++i) fKinkIndexes[i] = 0;
119     for (Int_t i=0; i<3;++i) fV0Indexes[i] = 0;
120     delete fTPCdEdxInfo; fTPCdEdxInfo = 0;
121   }
122
123   // Reset TRD related track information
124   if (dtrd) {
125     fTRDchi2       = 0;
126     fTRDncls       = 0;
127     fTRDncls0      = 0;
128     fTRDsignal     = 0;
129     fTRDLabel      = 0;
130     fTRDQuality    = 0;
131     fTRDntracklets = 0;
132     fTRDslices     = 0;
133     fTRDBudget     = 0;
134     for (Int_t i=0;i<kTRDnPlanes;++i) fTRDTimBin[i] = 0;
135     for (Int_t i=0;i<AliPID::kSPECIES;++i) fTRDr[i] = 0; 
136     fTRDnSlices    = 0;
137     if(fTRDnSlices)
138       delete[] fTRDslices;
139   }
140
141   // Reset TOF related track information
142   if (dtof) {
143     if (dall) {
144       fTOFchi2       = 0;        
145       fTOFindex      = -1;       
146       fTOFsignal     = 99999;      
147       fTOFCalChannel = -1;
148       fTOFsignalToT  = 99999;
149       fTOFsignalRaw  = 99999;
150       fTOFsignalDz   = 999;
151       fTOFsignalDx   = 999;
152       fTOFdeltaBC    = 999;
153       fTOFl0l1       = 999;
154     }
155     for (Int_t i=0;i<AliPID::kSPECIES;++i) fTOFr[i] = 0;
156     for (Int_t i=0;i<3;++i) fTOFLabel[i] = -1;
157     for (Int_t i=0;i<10;++i) fTOFInfo[i] = 0;
158     for (Int_t i=0;i<AliPID::kSPECIES;++i) fTrackTime[i] = 0;
159   }
160
161   // Reset HMPID related track information
162   if (dhmp) {
163     fHMPIDchi2     = 0;     
164     fHMPIDqn       = 0;     
165     fHMPIDcluIdx   = -1;     
166     fHMPIDsignal   = 0;     
167     fHMPIDtrkTheta = 0;     
168     fHMPIDtrkPhi   = 0;      
169     fHMPIDtrkX     = 0;     
170     fHMPIDtrkY     = 0;      
171     fHMPIDmipX     = 0;
172     fHMPIDmipY     = 0;
173     for (Int_t i=0;i<AliPID::kSPECIES;++i) fHMPIDr[i] = 0;
174   }
175 }
176
177 //_________________________________________________________________________________________________
178 void AliEsdTrackExt::Setup()
179 {
180   // Setup cache with stored variables.
181
182   fCacheNCrossedRows = fNCrossedRows;
183
184   const AliESDVertex* vertex = 0;
185   vertex = fESDEvent->GetPrimaryVertexTracks();
186   if (!vertex || !vertex->GetStatus()) 
187     vertex = fESDEvent->GetPrimaryVertexSPD();
188   if (vertex) {
189     fCacheChi2TPCConstrainedVsGlobal       = fChi2TPCConstrainedVsGlobal;
190     fCacheChi2TPCConstrainedVsGlobalVertex = vertex;
191   }
192 }