Bring AliFemto up to date with latest code developements
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / AliFemtoTrack.h
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 #ifndef ALIFEMTOTRACK_H
12 #define ALIFEMTOTRACK_H
13
14 #include "AliFemtoTypes.h"
15 #include "AliFmPhysicalHelixD.h"
16 #include "TBits.h"
17 /* Th stuff */
18 #include "AliFemtoHiddenInfo.h"
19 /***/
20
21 #ifndef __NO_STAR_DEPENDENCE_ALLOWED__
22 class StEvent;
23 class StTrack;
24 class StMuDst;
25 class StMuTrack;
26 #endif
27
28 class AliFemtoTrack{
29 public:
30   AliFemtoTrack();
31   AliFemtoTrack(const AliFemtoTrack& aTrack);// copy constructor
32   AliFemtoTrack& operator=(const AliFemtoTrack& aTrack);
33 #ifndef __NO_STAR_DEPENDENCE_ALLOWED__
34 #ifdef __ROOT__
35  //AliFemtoTrack(const StTrack*, AliFemtoThreeVector);   // c-tor from StTrack of STAR DSTs
36   //AliFemtoTrack(const StMuDst* dst, const StMuTrack* t);
37 #endif
38   //AliFemtoTrack(const StEvent*, const StTrack*);
39 #endif
40
41   ~AliFemtoTrack();
42 //    ~AliFemtoTrack(){/* no-op*/};
43
44   short Charge() const;
45   float PidProbElectron() const;
46   float PidProbPion() const;
47   float PidProbKaon() const;
48   float PidProbProton() const;
49   float PidProbMuon() const;
50   
51   AliFemtoThreeVector P() const;
52   float Pt() const;
53   const AliFmPhysicalHelixD& Helix() const;
54   short TrackId() const;
55   long int Flags() const;
56   int Label()const;
57   float ImpactD()const;
58   float ImpactZ()const;
59   float Cdd() const;
60   float Cdz() const;
61   float Czz() const; 
62   
63   float ITSchi2() const;    
64   int   ITSncls() const;     
65   float TPCchi2() const;       
66   int   TPCncls() const;       
67   short TPCnclsF() const;      
68   short TPCsignalN() const;    
69   float TPCsignalS() const;   
70
71   const TBits& TPCclusters() const;
72   const TBits& TPCsharing()  const;
73   
74   void SetCharge(const short& s);
75   void SetPidProbElectron(const float& x);
76   void SetPidProbPion(const float& x);
77   void SetPidProbKaon(const float& x);
78   void SetPidProbProton(const float& x);
79   void SetPidProbMuon(const float& x);
80    
81   void SetP(const AliFemtoThreeVector& p);
82   void SetPt(const float& x);
83   void SetHelix(const AliFmPhysicalHelixD& h);
84   void SetTrackId(const short& s);
85   void SetFlags(const long int& i);
86   void SetLabel(const int& i);
87   void SetImpactD(const float& x);
88   void SetImpactZ(const float& x);
89   void SetCdd(const float& x);
90   void SetCdz(const float& x);
91   void SetCzz(const float& x);
92   
93   void SetITSchi2(const float& x);    
94   void SetITSncls(const int& i);     
95   void SetTPCchi2(const float& x);       
96   void SetTPCncls(const int& i);       
97   void SetTPCnclsF(const short& s);      
98   void SetTPCsignalN(const short& s);    
99   void SetTPCsignalS(const float& x);   
100
101   void SetTPCcluster(const short& aNBit, const Bool_t& aValue);
102   void SetTPCshared(const short& aNBit, const Bool_t& aValue);
103
104   void SetTPCClusterMap(const TBits& aBits);
105   void SetTPCSharedMap(const TBits& aBits);
106
107   void SetKinkIndexes(int points[3]);
108   int  KinkIndex(int aIndex) const;
109
110   /* Th stuff */
111   void SetHiddenInfo(AliFemtoHiddenInfo* aHiddenInfo);
112   bool ValidHiddenInfo() const;
113   // Fab private : (official : const AliFemtoHiddenInfo* HiddenInfo() const;
114   AliFemtoHiddenInfo* GetHiddenInfo() const;
115   /***/
116   
117   const AliFemtoThreeVector& NominalTpcExitPoint() const;
118   const AliFemtoThreeVector& NominalTpcEntrancePoint() const;
119     
120   void SetNominalTPCEntrancePoint(const AliFemtoThreeVector& aXTPC);
121   void SetNominalTPCEntrancePoint(double *aXTPC);
122
123   void SetNominalTPCExitPoint(const AliFemtoThreeVector& aXTPC);
124   void SetNominalTPCExitPoint(double *aXTPC);
125   void SetSigmaToVertex(const float& Sigma);
126   float SigmaToVertex() const;
127  
128   //Alice stuff
129   enum {
130     kITSin=0x0001,kITSout=0x0002,kITSrefit=0x0004,kITSpid=0x0008,
131     kTPCin=0x0010,kTPCout=0x0020,kTPCrefit=0x0040,kTPCpid=0x0080,
132     kTRDin=0x0100,kTRDout=0x0200,kTRDrefit=0x0400,kTRDpid=0x0800,
133     kTOFin=0x1000,kTOFout=0x2000,kTOFrefit=0x4000,kTOFpid=0x8000,
134     kRICHpid=0x20000,
135     kTRDbackup=0x80000,
136     kTRDStop=0x20000000,
137     kESDpid=0x40000000,
138     kTIME=0x80000000
139   };
140   
141  private:
142   char fCharge;           // track charge
143   float fPidProbElectron; // electron pid
144   float fPidProbPion;     // pion pid 
145   float fPidProbKaon;     // kaon pid 
146   float fPidProbProton;   // proton pid
147   float fPidProbMuon;     // muon pid
148   unsigned int fTrackId;  // track unique id
149
150
151   AliFemtoThreeVector fP; // track momentum
152   float fPt;              // transverse momenta
153   AliFmPhysicalHelixD fHelix; // track helix
154   //alice stuff
155   long int fFlags; //Reconsruction status flags
156   int fLabel; //Track label  
157   float fImpactD; //impact parameter in xy plane
158   float fImpactZ;//impacct parameter in z
159   float fCdd,fCdz,fCzz;//covariance matrix of the impact parameters
160   // ITS related track information
161   float fITSchi2;        // chi2 in the ITS
162   int   fITSncls;        // number of clusters assigned in the ITS
163   // TPC related track information
164   float  fTPCchi2;       // chi2 in the TPC
165   int    fTPCncls;       // number of clusters assigned in the TPC
166   short fTPCnclsF;       // number of findable clusters in the TPC
167   short fTPCsignalN;     // number of points used for dEdx
168   float fTPCsignalS;     // RMS of dEdx measurement
169   float fSigmaToVertex;  // Distance from track to vertex in sigmas
170   TBits fClusters;       // Cluster per padrow map
171   TBits fShared;         // Sharing per padrow map
172   AliFemtoThreeVector fNominalTpcEntrancePoint; // Nominal track entrance point into TPC
173   AliFemtoThreeVector fNominalTpcExitPoint;     // Nominal track exit point from TPC
174
175   int   fKinkIndexes[3]; // Kink Index list
176   /* Th stuff */
177   // Fab private : add mutable
178   //  mutable 
179   AliFemtoHiddenInfo* fHiddenInfo; //! hidden info
180   /***/
181 };
182
183 //inline const float* AliFemtoTrack::NSigma() const 
184 //{return &mNSigmaElectron;} // Fab private 
185 inline float AliFemtoTrack::PidProbElectron() const {return fPidProbElectron;}
186 inline float AliFemtoTrack::PidProbPion() const {return fPidProbPion;}
187 inline float AliFemtoTrack::PidProbKaon() const {return fPidProbKaon;}
188 inline float AliFemtoTrack::PidProbProton() const {return fPidProbProton;}
189 inline float AliFemtoTrack::PidProbMuon() const {return fPidProbMuon;}
190
191 #endif