c5c857fbff9552c2177cc9d98ebef81b0f4496af
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / AliFemtoTrack.cxx
1 ///////////////////////////////////////////////////////////////////////////
2 //                                                                       //
3 // AliFemtoTrack: main class holding all the necessary information       //
4 // about a track (before the identification) that is required during     //
5 // femtoscopic analysis. This class is filled with information from the  //
6 // input stream by the reader. A particle has a link back to the Track   //
7 // it was created from, so we do not copy the information.               //
8 //                                                                       //
9 ///////////////////////////////////////////////////////////////////////////
10
11 #include "AliFemtoTrack.h" 
12 #ifndef __NO_STAR_DEPENDENCE_ALLOWED__
13 #ifdef __ROOT__
14 #include "StEvent/StEnumerations.h"
15 #include "AliFemtoAihongPid.h"
16 #include "StEventUtilities/StuProbabilityPidAlgorithm.h"
17 #endif
18 #endif
19
20 #include "SystemOfUnits.h"   // has "tesla" in it
21 //#include "AliFemtoParticleTypes.h"
22 //#include "AliFemtoTTreeEvent.h" 
23 //#include "AliFemtoTTreeTrack.h" 
24
25 AliFemtoTrack::AliFemtoTrack():
26   fCharge(0),
27   fPidProbElectron(0),
28   fPidProbPion(0),
29   fPidProbKaon(0),
30   fPidProbProton(0),
31   fPidProbMuon(0),
32   fTrackId(0),
33   fP(0,0,0),
34   fPt(0),
35   fHelix(),
36   fFlags(0),
37   fLabel(0),
38   fImpactD(0),
39   fImpactZ(0),
40   fCdd(0),
41   fCdz(0),
42   fCzz(0),
43   fITSchi2(0),       
44   fITSncls(0),        
45   fTPCchi2(0),       
46   fTPCncls(0),       
47   fTPCnclsF(0),      
48   fTPCsignalN(0),    
49   fTPCsignalS(0),
50   fClusters(159),
51   fShared(159),
52   fHiddenInfo(0)
53 {
54   // Default constructor
55   fHiddenInfo = NULL;
56   fKinkIndexes[0] = 0;
57   fKinkIndexes[1] = 0;
58   fKinkIndexes[2] = 0;
59   //  cout << "Created track " << this << endl;
60 }
61
62
63 AliFemtoTrack::AliFemtoTrack(const AliFemtoTrack& t) :
64   fCharge(0),
65   fPidProbElectron(0),
66   fPidProbPion(0),
67   fPidProbKaon(0),
68   fPidProbProton(0),
69   fPidProbMuon(0),
70   fTrackId(0),
71   fP(0,0,0),
72   fPt(0),
73   fHelix(),
74   fFlags(0),
75   fLabel(0),
76   fImpactD(0),
77   fImpactZ(0),
78   fCdd(0),
79   fCdz(0),
80   fCzz(0),
81   fITSchi2(0),       
82   fITSncls(0),        
83   fTPCchi2(0),       
84   fTPCncls(0),       
85   fTPCnclsF(0),      
86   fTPCsignalN(0),    
87   fTPCsignalS(0),
88   fClusters(159),
89   fShared(159),
90   fHiddenInfo(0)
91  { 
92    // copy constructor
93   fCharge = t.fCharge;
94   fPidProbElectron = t.fPidProbElectron;
95   fPidProbPion = t.fPidProbPion;
96   fPidProbKaon = t.fPidProbKaon;
97   fPidProbProton = t.fPidProbProton;
98   fPidProbMuon=t.fPidProbMuon;
99   fP = t.fP;
100   fPt = t.fPt;
101   fHelix = t.fHelix;
102   fTrackId = t.fTrackId;
103   fFlags=t.fFlags;
104   fLabel=t.fLabel;
105   fImpactD=t.fImpactD;
106   fImpactZ=t.fImpactZ;
107   fCdd=t.fCdd;
108   fCdz=t.fCdz;
109   fCzz=t.fCzz;
110   fITSchi2=t.fITSchi2;       
111   fITSncls=t.fITSncls;        
112   fTPCchi2=t.fTPCchi2;       
113   fTPCncls=t.fTPCncls;       
114   fTPCnclsF=t.fTPCnclsF;      
115   fTPCsignalN=t.fTPCsignalN;    
116   fTPCsignalS=t.fTPCsignalS;  
117   fClusters=t.fClusters;
118   fShared=t.fShared;
119   if (t.ValidHiddenInfo())
120     fHiddenInfo = t.GetHiddenInfo()->Clone();
121   else 
122     fHiddenInfo = NULL;
123   fKinkIndexes[0] = t.fKinkIndexes[0];
124   fKinkIndexes[1] = t.fKinkIndexes[1];
125   fKinkIndexes[2] = t.fKinkIndexes[2];
126   //  cout << "Created track " << this << endl;
127 }
128
129 AliFemtoTrack& AliFemtoTrack::operator=(const AliFemtoTrack& aTrack)
130 {
131   // assignment operator
132   if (this == &aTrack)
133     return *this;
134   fCharge = aTrack.fCharge;
135   fPidProbElectron = aTrack.fPidProbElectron;
136   fPidProbPion = aTrack.fPidProbPion;
137   fPidProbKaon = aTrack.fPidProbKaon;
138   fPidProbProton = aTrack.fPidProbProton;
139   fPidProbMuon=aTrack.fPidProbMuon;
140   fP = aTrack.fP;
141   fPt = aTrack.fPt;
142   fHelix = aTrack.fHelix;
143   fTrackId = aTrack.fTrackId;
144   fFlags=aTrack.fFlags;
145   fLabel=aTrack.fLabel;
146   fImpactD=aTrack.fImpactD;
147   fImpactZ=aTrack.fImpactZ;
148   fCdd=aTrack.fCdd;
149   fCdz=aTrack.fCdz;
150   fCzz=aTrack.fCzz;
151   fITSchi2=aTrack.fITSchi2;       
152   fITSncls=aTrack.fITSncls;        
153   fTPCchi2=aTrack.fTPCchi2;       
154   fTPCncls=aTrack.fTPCncls;       
155   fTPCnclsF=aTrack.fTPCnclsF;      
156   fTPCsignalN=aTrack.fTPCsignalN;    
157   fTPCsignalS=aTrack.fTPCsignalS;  
158   fClusters=aTrack.fClusters;
159   fShared=aTrack.fShared;
160   fKinkIndexes[0] = aTrack.fKinkIndexes[0];
161   fKinkIndexes[1] = aTrack.fKinkIndexes[1];
162   fKinkIndexes[2] = aTrack.fKinkIndexes[2];
163   if (ValidHiddenInfo())
164     delete fHiddenInfo;
165   if (aTrack.ValidHiddenInfo())
166     fHiddenInfo = aTrack.GetHiddenInfo()->Clone();
167   else 
168     fHiddenInfo = NULL;
169
170   return *this;
171 }
172
173 void AliFemtoTrack::SetCharge(const short& ch){fCharge=ch;}
174
175 void AliFemtoTrack::SetPidProbElectron(const float& x){fPidProbElectron = x;}
176 void AliFemtoTrack::SetPidProbPion(const float& x){fPidProbPion = x;}
177 void AliFemtoTrack::SetPidProbKaon(const float& x){fPidProbKaon = x;}
178 void AliFemtoTrack::SetPidProbProton(const float& x){fPidProbProton = x;}
179 void AliFemtoTrack::SetPidProbMuon(const float& x){fPidProbMuon = x;}
180  
181 void AliFemtoTrack::SetP(const AliFemtoThreeVector& p){fP = p;}
182 void AliFemtoTrack::SetPt(const float& pt){fPt = pt;} 
183 void AliFemtoTrack::SetHelix(const AliFmPhysicalHelixD& h){fHelix = h;}
184 void AliFemtoTrack::SetTrackId(const short & id) { fTrackId=id;}
185 void AliFemtoTrack::SetFlags(const long int &flags) {fFlags=flags;}
186 void AliFemtoTrack::SetLabel(const int &label) {fLabel=label;}
187 void AliFemtoTrack::SetImpactD(const float& ImpactD){fImpactD=ImpactD;}
188 void AliFemtoTrack::SetImpactZ(const float& ImpactZ){fImpactZ=ImpactZ;}
189 void AliFemtoTrack::SetCdd(const float& Cdd){fCdd=Cdd;}
190 void AliFemtoTrack::SetCdz(const float& Cdz){fCdz=Cdz;}
191 void AliFemtoTrack::SetCzz(const float& Czz){fCzz=Czz;}
192 void AliFemtoTrack::SetITSchi2(const float& ITSchi2){fITSchi2=ITSchi2;}    
193 void AliFemtoTrack::SetITSncls(const int& ITSncls){fITSncls=ITSncls;}     
194 void AliFemtoTrack::SetTPCchi2(const float& TPCchi2){fTPCchi2=TPCchi2;}       
195 void AliFemtoTrack::SetTPCncls(const int& TPCncls){fTPCncls=TPCncls;}       
196 void AliFemtoTrack::SetTPCnclsF(const short& TPCnclsF){fTPCnclsF=TPCnclsF;}      
197 void AliFemtoTrack::SetTPCsignalN(const short& TPCsignalN){fTPCsignalN=TPCsignalN;}    
198 void AliFemtoTrack::SetTPCsignalS(const float& TPCsignalS){fTPCsignalS=TPCsignalS;} 
199
200
201 short AliFemtoTrack::Charge() const {return fCharge;}  
202 AliFemtoThreeVector AliFemtoTrack::P() const {return fP;}
203 float AliFemtoTrack::Pt() const {return fPt;}              
204 const AliFmPhysicalHelixD& AliFemtoTrack::Helix() const {return fHelix;}
205 short AliFemtoTrack::TrackId() const { return fTrackId; }
206 long int AliFemtoTrack::Flags() const {return fFlags;}
207 int AliFemtoTrack::Label()const {return fLabel;}
208 float AliFemtoTrack::ImpactD()const{return fImpactD;}
209 float AliFemtoTrack::ImpactZ()const{return fImpactZ;}
210 float AliFemtoTrack::Cdd() const{return fCdd;}
211 float AliFemtoTrack::Cdz() const{return fCdz;}
212 float AliFemtoTrack::Czz() const{return fCzz;} 
213 float AliFemtoTrack::ITSchi2() const{return fITSchi2;}    
214 int   AliFemtoTrack::ITSncls() const{return fITSncls;}     
215 float AliFemtoTrack::TPCchi2() const{return fTPCchi2;}       
216 int   AliFemtoTrack::TPCncls() const{return fTPCncls;}       
217 short AliFemtoTrack::TPCnclsF() const{return fTPCnclsF;}      
218 short AliFemtoTrack::TPCsignalN() const{return fTPCsignalN;}    
219 float AliFemtoTrack::TPCsignalS() const{return fTPCsignalS;} 
220
221 void AliFemtoTrack::SetHiddenInfo(AliFemtoHiddenInfo* aHiddenInfo) {fHiddenInfo=aHiddenInfo;}
222 bool AliFemtoTrack::ValidHiddenInfo() const { if (fHiddenInfo) return true; else return false; }
223 AliFemtoHiddenInfo* AliFemtoTrack::GetHiddenInfo() const {return fHiddenInfo;}
224   
225 AliFemtoTrack::~AliFemtoTrack()
226 {
227   if (fHiddenInfo)
228     delete fHiddenInfo;
229   //  cout << "Deleted track " << this << endl;
230 }
231
232 const TBits& AliFemtoTrack::TPCclusters() const {return fClusters;}
233 const TBits& AliFemtoTrack::TPCsharing()  const {return fShared;}
234
235 void AliFemtoTrack::SetTPCcluster(const short& aNBit, const Bool_t& aValue)
236 {
237   fClusters.SetBitNumber(aNBit, aValue);
238 }
239
240 void AliFemtoTrack::SetTPCshared(const short& aNBit, const Bool_t& aValue)
241 {
242   fShared.SetBitNumber(aNBit, aValue);
243 }
244
245 void AliFemtoTrack::SetTPCClusterMap(const TBits& aBits)
246 {
247   fClusters = aBits;
248 }
249 void AliFemtoTrack::SetTPCSharedMap(const TBits& aBits)
250 {
251   fShared = aBits;
252 }
253
254 void AliFemtoTrack::SetKinkIndexes(int points[3])
255 {
256   fKinkIndexes[0] = points[0];
257   fKinkIndexes[1] = points[1];
258   fKinkIndexes[2] = points[2];
259 }
260
261 int  AliFemtoTrack::KinkIndex(int aIndex) const
262 {
263   if ((aIndex <3) && (aIndex>=0))
264     return fKinkIndexes[aIndex];
265   else
266     return 0;
267 }