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