b351f7f6606e2e313db1da27cb8035a4cc81a9dc
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / AliFemtoParticle.h
1 ///////////////////////////////////////////////////////////////////////////
2 //                                                                       //
3 // AliFemtoParticle: main class halding all the necessary information    //
4 // about a particle that is required during femtoscopic analysis         //
5 //                                                                       //
6 ///////////////////////////////////////////////////////////////////////////
7
8 #ifndef ALIFEMTOPARTICLE_H
9 #define ALIFEMTOPARTICLE_H
10
11 //#include "math.h"
12 #include "AliFemtoTypes.h"
13 #include "AliFemtoTrack.h"
14 #include "AliFemtoV0.h"
15 #include "AliFemtoKink.h"
16 #include "AliFemtoXi.h"
17 #include "AliFmPhysicalHelixD.h"
18 // ***
19 class AliFemtoHiddenInfo;
20 // ***
21 class AliFemtoParticle{
22 public:
23   AliFemtoParticle();
24   AliFemtoParticle(const AliFemtoParticle& aParticle);
25   AliFemtoParticle(const AliFemtoTrack* const hbtTrack, const double& mass);
26   AliFemtoParticle(const AliFemtoV0* const hbtV0, const double& mass);
27   AliFemtoParticle(const AliFemtoKink* const hbtKink, const double& mass);
28   AliFemtoParticle(const AliFemtoXi* const hbtXi, const double& mass);
29   ~AliFemtoParticle();
30
31   AliFemtoParticle& operator=(const AliFemtoParticle& aParticle);
32
33   const AliFemtoLorentzVector& FourMomentum() const;
34
35   AliFmPhysicalHelixD& Helix();
36
37   const AliFemtoThreeVector DecayVertexPosition() const;
38   unsigned long TopologyMap(const int word) const;
39   int NumberOfHits() const;
40
41   unsigned long TrackId() const;         // only for particles from tracks 
42   unsigned short   NegTrackId() const;   // only for particles from v0 
43   unsigned short   PosTrackId() const;   // only for particles from v0 
44
45   AliFemtoTrack* Track() const;
46   AliFemtoV0* V0() const;
47   AliFemtoKink* Kink() const;
48
49   const AliFemtoThreeVector& NominalTpcExitPoint() const;     // position track exits TPC assuming start at (0,0,0)
50   const AliFemtoThreeVector& NominalTpcEntrancePoint() const; // position track crosses IFC assuming start at (0,0,0)
51   const AliFemtoThreeVector& TpcV0PosExitPoint() const;  
52   const AliFemtoThreeVector& TpcV0PosEntrancePoint() const;
53   const AliFemtoThreeVector& TpcV0NegExitPoint() const;  
54   const AliFemtoThreeVector& TpcV0NegEntrancePoint() const;
55
56   // the following method is for explicit internal calculation to fill datamembers.
57   // It is invoked automatically if AliFemtoParticle constructed from AliFemtoTrack
58   // void CalculateNominalTpcExitAndEntrancePoints(); 
59   // NOTE - this requires the fHelix, so be sure this is filled
60
61
62   AliFemtoThreeVector fNominalPosSample[11];  // I make this public for convenience and speed of AliFemtoPair()
63   float fZ[45];  // Z position of cluster on padrow
64   float fU[45];  // U position of cluster on padrow
65   int fSect[45]; // Sector number of cluster on padrow
66
67   void ResetFourMomentum(const AliFemtoLorentzVector& fourMomentum);
68
69   const AliFemtoHiddenInfo*  HiddenInfo() const;
70   // Fab private
71   AliFemtoHiddenInfo*  GetHiddenInfo() const;
72   void SetHiddenInfo(AliFemtoHiddenInfo* aHiddenInfo);
73   void CalculatePurity();
74   double GetPionPurity();
75   double GetKaonPurity();
76   double GetProtonPurity();
77   void CalculateTpcExitAndEntrancePoints( AliFmPhysicalHelixD* tHelix,
78                                           AliFemtoThreeVector* PrimVert,
79                                           AliFemtoThreeVector* SecVert,
80                                           AliFemtoThreeVector* tmpTpcEntrancePoint,
81                                           AliFemtoThreeVector* tmpTpcExitPoint,
82                                           AliFemtoThreeVector* tmpPosSample,
83                                           float* tmpZ,float* tmpU,int* tmpSect);
84
85   // For V0 Neg Daugthers TpcEntrance/ExitPoints
86   AliFemtoThreeVector* fTpcV0NegPosSample; // Sample of TPC V0 neg
87   float* fV0NegZ;                          // Array of Neg Z cluster positions
88   float* fV0NegU;                          // Array of Neg U cluster positions
89   int* fV0NegSect;                         // Array of Neg cluster sectors
90  
91 private:
92   AliFemtoTrack* fTrack;  // copy of the track the particle was formed of, else Null
93   AliFemtoV0* fV0;        // copy of the v0 the particle was formed of, else Null
94   AliFemtoKink* fKink;    // copy of the v0 the particle was formed of, else Null
95   AliFemtoXi* fXi;        // copy of the Xi the particle was formed of, else Null  
96
97   AliFemtoLorentzVector fFourMomentum; // Particle momentum
98   AliFmPhysicalHelixD fHelix;          // Particle trajectory helix
99   //unsigned long  fMap[2]; 
100   //int fNhits;
101   AliFemtoThreeVector fNominalTpcExitPoint; // Point where particle exits TPC
102   AliFemtoThreeVector fNominalTpcEntrancePoint; // Point where particle enters TPC
103   AliFemtoHiddenInfo* fHiddenInfo;  // Fab private
104
105   double fPurity[6];  // Purity variables
106
107   static double fgPrimPimPar0; // purity parameterization parameter
108   static double fgPrimPimPar1; // purity parameterization parameter
109   static double fgPrimPimPar2; // purity parameterization parameter
110   static double fgPrimPipPar0; // purity parameterization parameter 
111   static double fgPrimPipPar1; // purity parameterization parameter
112   static double fgPrimPipPar2; // purity parameterization parameter
113   static double fgPrimPmPar0;  // purity parameterization parameter
114   static double fgPrimPmPar1;  // purity parameterization parameter
115   static double fgPrimPmPar2;  // purity parameterization parameter
116   static double fgPrimPpPar0;  // purity parameterization parameter
117   static double fgPrimPpPar1;  // purity parameterization parameter
118   static double fgPrimPpPar2;  // purity parameterization parameter
119
120    // For V0 Daugthers TpcEntrance/ExitPoints
121   AliFemtoThreeVector fPrimaryVertex;   // primary vertex of V0
122   AliFemtoThreeVector fSecondaryVertex; // secondary vertex of V0
123
124   AliFmPhysicalHelixD fHelixV0Pos;            // helix for positive V0 daughter            
125   AliFemtoThreeVector fTpcV0PosEntrancePoint; // positive V0 daughter entrance point to TPC
126   AliFemtoThreeVector fTpcV0PosExitPoint;     // positive V0 daughter exit point from TPC  
127
128   AliFmPhysicalHelixD fHelixV0Neg;            // helix for negative V0 daughter            
129   AliFemtoThreeVector fTpcV0NegEntrancePoint; // negative V0 daughter entrance point to TPC
130   AliFemtoThreeVector fTpcV0NegExitPoint;     // negative V0 daughter exit point from TPC  
131 };
132
133 inline AliFemtoTrack* AliFemtoParticle::Track() const { return fTrack; }
134 inline unsigned long  AliFemtoParticle::TrackId() const { return fTrack->TrackId(); }
135 inline const AliFemtoLorentzVector& AliFemtoParticle::FourMomentum() const {return fFourMomentum;}
136 inline AliFmPhysicalHelixD& AliFemtoParticle::Helix() {return fHelix;}
137 //inline unsigned long AliFemtoParticle::TopologyMap(const int word) const {return fMap[word];}
138 //inline int AliFemtoParticle::NumberOfHits() const {return fNhits;}
139 //by marek chojnacki to could compile 
140
141 inline unsigned long AliFemtoParticle::TopologyMap(const int word) const {return 1;}
142 inline int AliFemtoParticle::NumberOfHits() const {return 1;}
143
144 inline AliFemtoV0* AliFemtoParticle::V0() const { return fV0; }
145 inline unsigned short AliFemtoParticle::NegTrackId() const { return fV0->IdNeg(); }
146 inline unsigned short AliFemtoParticle::PosTrackId() const { return fV0->IdPos(); }
147 inline const AliFemtoThreeVector AliFemtoParticle::DecayVertexPosition() const {return fV0->DecayVertexV0(); }
148 // ***
149 inline AliFemtoHiddenInfo* AliFemtoParticle::GetHiddenInfo() const
150 {return fHiddenInfo;}
151 inline const AliFemtoHiddenInfo* AliFemtoParticle::HiddenInfo() const
152 {return fHiddenInfo;}
153 inline void AliFemtoParticle::SetHiddenInfo(AliFemtoHiddenInfo* aHiddenInfo)
154 { fHiddenInfo = aHiddenInfo->Clone();}
155 // ***
156
157 inline void AliFemtoParticle::ResetFourMomentum(const AliFemtoLorentzVector& vec){fFourMomentum = vec;}
158
159 inline AliFemtoKink* AliFemtoParticle::Kink() const { return fKink; }
160
161 #endif