]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FEMTOSCOPY/AliFemto/AliFemtoTrack.cxx
3154d6b379d86dabf38612add3530bb22732213a
[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   fTPCsignal(0),
49   fTPCsignalN(0),    
50   fTPCsignalS(0),
51   fSigmaToVertex(0),
52   fClusters(159),
53   fShared(159),
54   fNominalTpcEntrancePoint(0,0,0),
55   fNominalTpcExitPoint(0,0,0),
56   fHiddenInfo(0)
57 {
58   // Default constructor
59   fHiddenInfo = NULL;
60   fKinkIndexes[0] = 0;
61   fKinkIndexes[1] = 0;
62   fKinkIndexes[2] = 0;
63   //  cout << "Created track " << this << endl;
64 }
65
66
67 AliFemtoTrack::AliFemtoTrack(const AliFemtoTrack& t) :
68   fCharge(0),
69   fPidProbElectron(0),
70   fPidProbPion(0),
71   fPidProbKaon(0),
72   fPidProbProton(0),
73   fPidProbMuon(0),
74   fTrackId(0),
75   fP(0,0,0),
76   fPt(0),
77   fHelix(),
78   fFlags(0),
79   fLabel(0),
80   fImpactD(0),
81   fImpactZ(0),
82   fCdd(0),
83   fCdz(0),
84   fCzz(0),
85   fITSchi2(0),       
86   fITSncls(0),        
87   fTPCchi2(0),       
88   fTPCncls(0),       
89   fTPCnclsF(0),      
90   fTPCsignal(0),
91   fTPCsignalN(0),    
92   fTPCsignalS(0),
93   fSigmaToVertex(0),
94   fClusters(159),
95   fShared(159),
96   fNominalTpcEntrancePoint(0,0,0),
97   fNominalTpcExitPoint(0,0,0),
98   fHiddenInfo(0)
99  { 
100    // copy constructor
101   fCharge = t.fCharge;
102   fPidProbElectron = t.fPidProbElectron;
103   fPidProbPion = t.fPidProbPion;
104   fPidProbKaon = t.fPidProbKaon;
105   fPidProbProton = t.fPidProbProton;
106   fPidProbMuon=t.fPidProbMuon;
107   fP = t.fP;
108   fPt = t.fPt;
109   fHelix = t.fHelix;
110   fTrackId = t.fTrackId;
111   fFlags=t.fFlags;
112   fLabel=t.fLabel;
113   fImpactD=t.fImpactD;
114   fImpactZ=t.fImpactZ;
115   fCdd=t.fCdd;
116   fCdz=t.fCdz;
117   fCzz=t.fCzz;
118   fITSchi2=t.fITSchi2;       
119   fITSncls=t.fITSncls;        
120   fTPCchi2=t.fTPCchi2;       
121   fTPCncls=t.fTPCncls;       
122   fTPCnclsF=t.fTPCnclsF;      
123   fTPCsignal=t.fTPCsignal;
124   fTPCsignalN=t.fTPCsignalN;    
125   fTPCsignalS=t.fTPCsignalS;  
126   fSigmaToVertex=t.fSigmaToVertex;
127   fClusters=t.fClusters;
128   fShared=t.fShared;
129   fNominalTpcEntrancePoint=t.fNominalTpcEntrancePoint;
130   fNominalTpcExitPoint=t.fNominalTpcExitPoint;
131   if (t.ValidHiddenInfo())
132     fHiddenInfo = t.GetHiddenInfo()->Clone();
133   else 
134     fHiddenInfo = NULL;
135   fKinkIndexes[0] = t.fKinkIndexes[0];
136   fKinkIndexes[1] = t.fKinkIndexes[1];
137   fKinkIndexes[2] = t.fKinkIndexes[2];
138   //  cout << "Created track " << this << endl;
139 }
140
141 AliFemtoTrack& AliFemtoTrack::operator=(const AliFemtoTrack& aTrack)
142 {
143   // assignment operator
144   if (this == &aTrack)
145     return *this;
146   fCharge = aTrack.fCharge;
147   fPidProbElectron = aTrack.fPidProbElectron;
148   fPidProbPion = aTrack.fPidProbPion;
149   fPidProbKaon = aTrack.fPidProbKaon;
150   fPidProbProton = aTrack.fPidProbProton;
151   fPidProbMuon=aTrack.fPidProbMuon;
152   fP = aTrack.fP;
153   fPt = aTrack.fPt;
154   fHelix = aTrack.fHelix;
155   fTrackId = aTrack.fTrackId;
156   fFlags=aTrack.fFlags;
157   fLabel=aTrack.fLabel;
158   fImpactD=aTrack.fImpactD;
159   fImpactZ=aTrack.fImpactZ;
160   fCdd=aTrack.fCdd;
161   fCdz=aTrack.fCdz;
162   fCzz=aTrack.fCzz;
163   fITSchi2=aTrack.fITSchi2;       
164   fITSncls=aTrack.fITSncls;        
165   fTPCchi2=aTrack.fTPCchi2;       
166   fTPCncls=aTrack.fTPCncls;       
167   fTPCnclsF=aTrack.fTPCnclsF;
168   fTPCsignal=aTrack.fTPCsignal;
169   fTPCsignalN=aTrack.fTPCsignalN;    
170   fTPCsignalS=aTrack.fTPCsignalS;  
171   fClusters=aTrack.fClusters;
172   fShared=aTrack.fShared;
173   fNominalTpcEntrancePoint=aTrack.fNominalTpcEntrancePoint;
174   fNominalTpcExitPoint=aTrack.fNominalTpcExitPoint;
175   fKinkIndexes[0] = aTrack.fKinkIndexes[0];
176   fKinkIndexes[1] = aTrack.fKinkIndexes[1];
177   fKinkIndexes[2] = aTrack.fKinkIndexes[2];
178   if (ValidHiddenInfo())
179     delete fHiddenInfo;
180   if (aTrack.ValidHiddenInfo())
181     fHiddenInfo = aTrack.GetHiddenInfo()->Clone();
182   else 
183     fHiddenInfo = NULL;
184
185   return *this;
186 }
187
188 void AliFemtoTrack::SetCharge(const short& ch){fCharge=ch;}
189
190 void AliFemtoTrack::SetPidProbElectron(const float& x){fPidProbElectron = x;}
191 void AliFemtoTrack::SetPidProbPion(const float& x){fPidProbPion = x;}
192 void AliFemtoTrack::SetPidProbKaon(const float& x){fPidProbKaon = x;}
193 void AliFemtoTrack::SetPidProbProton(const float& x){fPidProbProton = x;}
194 void AliFemtoTrack::SetPidProbMuon(const float& x){fPidProbMuon = x;}
195  
196 void AliFemtoTrack::SetP(const AliFemtoThreeVector& p){fP = p;}
197 void AliFemtoTrack::SetPt(const float& pt){fPt = pt;} 
198 void AliFemtoTrack::SetHelix(const AliFmPhysicalHelixD& h){fHelix = h;}
199 void AliFemtoTrack::SetTrackId(const short & id) { fTrackId=id;}
200 void AliFemtoTrack::SetFlags(const long int &flags) {fFlags=flags;}
201 void AliFemtoTrack::SetLabel(const int &label) {fLabel=label;}
202 void AliFemtoTrack::SetImpactD(const float& aImpactD){fImpactD=aImpactD;}
203 void AliFemtoTrack::SetImpactZ(const float& aImpactZ){fImpactZ=aImpactZ;}
204 void AliFemtoTrack::SetCdd(const float& aCdd){fCdd=aCdd;}
205 void AliFemtoTrack::SetCdz(const float& aCdz){fCdz=aCdz;}
206 void AliFemtoTrack::SetCzz(const float& aCzz){fCzz=aCzz;}
207 void AliFemtoTrack::SetITSchi2(const float& aITSchi2){fITSchi2=aITSchi2;}    
208 void AliFemtoTrack::SetITSncls(const int& aITSncls){fITSncls=aITSncls;}     
209 void AliFemtoTrack::SetTPCchi2(const float& aTPCchi2){fTPCchi2=aTPCchi2;}       
210 void AliFemtoTrack::SetTPCncls(const int& aTPCncls){fTPCncls=aTPCncls;}       
211 void AliFemtoTrack::SetTPCnclsF(const short& aTPCnclsF){fTPCnclsF=aTPCnclsF;}      
212 void AliFemtoTrack::SetTPCsignal(const float& aTPCsig){fTPCsignal=aTPCsig;}
213 void AliFemtoTrack::SetTPCsignalN(const short& aTPCsignalN){fTPCsignalN=aTPCsignalN;}    
214 void AliFemtoTrack::SetTPCsignalS(const float& aTPCsignalS){fTPCsignalS=aTPCsignalS;} 
215 void AliFemtoTrack::SetSigmaToVertex(const float& aSigma){fSigmaToVertex=aSigma;} 
216
217
218 short AliFemtoTrack::Charge() const {return fCharge;}  
219 AliFemtoThreeVector AliFemtoTrack::P() const {return fP;}
220 float AliFemtoTrack::Pt() const {return fPt;}              
221 const AliFmPhysicalHelixD& AliFemtoTrack::Helix() const {return fHelix;}
222 short AliFemtoTrack::TrackId() const { return fTrackId; }
223 long int AliFemtoTrack::Flags() const {return fFlags;}
224 int AliFemtoTrack::Label()const {return fLabel;}
225 float AliFemtoTrack::ImpactD()const{return fImpactD;}
226 float AliFemtoTrack::ImpactZ()const{return fImpactZ;}
227 float AliFemtoTrack::Cdd() const{return fCdd;}
228 float AliFemtoTrack::Cdz() const{return fCdz;}
229 float AliFemtoTrack::Czz() const{return fCzz;} 
230 float AliFemtoTrack::ITSchi2() const{return fITSchi2;}    
231 int   AliFemtoTrack::ITSncls() const{return fITSncls;}     
232 float AliFemtoTrack::TPCchi2() const{return fTPCchi2;}       
233 int   AliFemtoTrack::TPCncls() const{return fTPCncls;}       
234 short AliFemtoTrack::TPCnclsF() const{return fTPCnclsF;}      
235 float AliFemtoTrack::TPCsignal() const{return fTPCsignal;}
236 short AliFemtoTrack::TPCsignalN() const{return fTPCsignalN;}    
237 float AliFemtoTrack::TPCsignalS() const{return fTPCsignalS;} 
238 float AliFemtoTrack::SigmaToVertex() const{return fSigmaToVertex;} 
239
240 void AliFemtoTrack::SetHiddenInfo(AliFemtoHiddenInfo* aHiddenInfo) {fHiddenInfo=aHiddenInfo;}
241 bool AliFemtoTrack::ValidHiddenInfo() const { if (fHiddenInfo) return true; else return false; }
242 AliFemtoHiddenInfo* AliFemtoTrack::GetHiddenInfo() const {return fHiddenInfo;}
243   
244 AliFemtoTrack::~AliFemtoTrack()
245 {
246   // destructor
247   if (fHiddenInfo)
248     delete fHiddenInfo;
249   //  cout << "Deleted track " << this << endl;
250 }
251
252 const TBits& AliFemtoTrack::TPCclusters() const {return fClusters;}
253 const TBits& AliFemtoTrack::TPCsharing()  const {return fShared;}
254
255 void AliFemtoTrack::SetTPCcluster(const short& aNBit, const Bool_t& aValue)
256 {
257   fClusters.SetBitNumber(aNBit, aValue);
258 }
259
260 void AliFemtoTrack::SetTPCshared(const short& aNBit, const Bool_t& aValue)
261 {
262   fShared.SetBitNumber(aNBit, aValue);
263 }
264
265 void AliFemtoTrack::SetTPCClusterMap(const TBits& aBits)
266 {
267   fClusters = aBits;
268 }
269 void AliFemtoTrack::SetTPCSharedMap(const TBits& aBits)
270 {
271   fShared = aBits;
272 }
273
274 void AliFemtoTrack::SetKinkIndexes(int points[3])
275 {
276   // Transfer the Kink indices
277   fKinkIndexes[0] = points[0];
278   fKinkIndexes[1] = points[1];
279   fKinkIndexes[2] = points[2];
280 }
281
282 int  AliFemtoTrack::KinkIndex(int aIndex) const
283 {
284   // Return Kink index
285   if ((aIndex <3) && (aIndex>=0))
286     return fKinkIndexes[aIndex];
287   else
288     return 0;
289 }
290
291 // void AliFemtoTrack::SetXTPC(const AliFemtoThreeVector& aXTPC)
292 // {
293 //   fXTPC = aXTPC;
294 // }
295
296 // void AliFemtoTrack::SetXTPC(double *aXTPC)
297 // {
298 //   fXTPC.setX(aXTPC[0]);
299 //   fXTPC.setY(aXTPC[1]);
300 //   fXTPC.setZ(aXTPC[2]);
301 // }
302
303 // AliFemtoThreeVector AliFemtoTrack::XTPC() const
304 // {
305 //   return fXTPC;
306 // }
307
308 const AliFemtoThreeVector& AliFemtoTrack::NominalTpcExitPoint() const
309 {
310   return fNominalTpcExitPoint;
311 }
312 const AliFemtoThreeVector& AliFemtoTrack::NominalTpcEntrancePoint() const
313 {
314   return fNominalTpcEntrancePoint;
315 }
316
317 void AliFemtoTrack::SetNominalTPCEntrancePoint(const AliFemtoThreeVector& aXTPC)
318 {
319   fNominalTpcEntrancePoint = aXTPC;
320 }
321 void AliFemtoTrack::SetNominalTPCEntrancePoint(double *aXTPC)
322 {
323   // Store the nominal TPC entrance point
324   fNominalTpcEntrancePoint.SetX(aXTPC[0]);
325   fNominalTpcEntrancePoint.SetY(aXTPC[1]);
326   fNominalTpcEntrancePoint.SetZ(aXTPC[2]);
327 }
328
329 void AliFemtoTrack::SetNominalTPCExitPoint(const AliFemtoThreeVector& aXTPC)
330 {
331   fNominalTpcExitPoint = aXTPC;
332 }
333 void AliFemtoTrack::SetNominalTPCExitPoint(double *aXTPC)
334 {
335   // Store the nominal TPC exit point
336   fNominalTpcExitPoint.SetX(aXTPC[0]);
337   fNominalTpcExitPoint.SetY(aXTPC[1]);
338   fNominalTpcExitPoint.SetZ(aXTPC[2]);
339 }