]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FEMTOSCOPY/AliFemto/Infrastructure/AliFemtoParticle.h
Fixing Effective C++ warnings
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / Infrastructure / AliFemtoParticle.h
1 /***************************************************************************
2  *
3  * $Id$
4  *
5  * Author: Mike Lisa, Ohio State, lisa@mps.ohio-state.edu
6  ***************************************************************************
7  *
8  * Description: part of STAR HBT Framework: AliFemtoMaker package
9  *   Particle objects are part of the PicoEvent, which is what is
10  *   stored in the EventMixingBuffers
11  *   A Track object gets converted to a Particle object if it
12  *   passes the ParticleCut of an Analysis
13  *
14  ***************************************************************************
15  *
16  * $Log$
17  * Revision 1.1.1.1  2007/04/25 15:38:41  panos
18  * Importing the HBT code dir
19  *
20  * Revision 1.2  2007-04-03 16:00:08  mchojnacki
21  * Changes to iprove memory managing
22  *
23  * Revision 1.1.1.1  2007/03/07 10:14:49  mchojnacki
24  * First version on CVS
25  *
26  * Revision 1.19  2003/01/14 09:41:16  renault
27  * changes on average separation calculation, hit shared finder and memory optimisation
28  * for Z,U and Sectors variables.
29  *
30  * Revision 1.18  2002/12/12 17:01:50  kisiel
31  * Hidden Information handling and purity calculation
32  *
33  * Revision 1.17  2002/11/19 23:35:52  renault
34  * Enable calculation of exit/entrance separation for V0 daughters
35  *
36  * Revision 1.16  2001/12/14 23:11:30  fretiere
37  * Add class HitMergingCut. Add class fabricesPairCut = HitMerginCut + pair purity cuts. Add TpcLocalTransform function which convert to local tpc coord (not pretty). Modify AliFemtoTrack, AliFemtoParticle, AliFemtoHiddenInfo, AliFemtoPair to handle the hit information and cope with my code
38  *
39  * Revision 1.15  2001/05/25 23:23:59  lisa
40  * Added in AliFemtoKink stuff
41  *
42  * Revision 1.14  2001/05/23 00:19:05  lisa
43  * Add in Smearing classes and methods needed for momentum resolution studies and correction
44  *
45  * Revision 1.13  2001/04/03 21:04:36  kisiel
46  *
47  *
48  *   Changes needed to make the Theoretical code
49  *   work. The main code is the ThCorrFctn directory.
50  *   The most visible change is the addition of the
51  *   HiddenInfo to AliFemtoPair.
52  *
53  * Revision 1.12  2000/10/05 23:09:05  lisa
54  * Added kT-dependent radii to mixed-event simulator AND implemented AverageSeparation Cut and CorrFctn
55  *
56  * Revision 1.11  2000/07/17 20:03:17  lisa
57  * Implemented tools for addressing and assessing trackmerging
58  *
59  * Revision 1.10  2000/07/16 21:38:23  laue
60  * AliFemtoCoulomb.cxx AliFemtoSectoredAnalysis.cxx : updated for standalone version
61  * AliFemtoV0.cc AliFemtoV0.h : some cast to prevent compiling warnings
62  * AliFemtoParticle.cc AliFemtoParticle.h : pointers fTrack,fV0 initialized to 0
63  * AliFemtoIOBinary.cc : some printouts in #ifdef STHBTDEBUG
64  * AliFemtoEvent.cc : B-Field set to 0.25Tesla, we have to think about a better
65  *                 solution
66  *
67  * Revision 1.9  2000/05/03 17:44:43  laue
68  * AliFemtoEvent, AliFemtoTrack & AliFemtoV0 declared friend to AliFemtoIOBinary
69  * AliFemtoParticle updated for V0 pos,neg track Id
70  *
71  * Revision 1.8  2000/04/03 16:21:51  laue
72  * some include files changed
73  * Multi track cut added
74  *
75  * Revision 1.6  2000/02/26 19:04:52  laue
76  * Some unnecessary includes removed.
77  * StThreeVectorD replace by AliFemtoThreeVector.
78  * AliFemtoCoulomb modified to compile without Root (ClassDef embraced into
79  *   #ifdef __ROOT__  ..... #endif)
80  * AliFemtoParticle now returns references (FourMomentum(),Helix(),
81  *   DecayVertexPosiion())
82  *
83  * Revision 1.5  1999/12/11 15:58:29  lisa
84  * Add vertex decay position datum and accessor to AliFemtoParticle to allow pairwise cuts on seperation of V0s
85  *
86  * Revision 1.4  1999/09/17 22:38:02  lisa
87  * first full integration of V0s into AliFemto framework
88  *
89  * Revision 1.3  1999/09/01 19:04:54  lisa
90  * update Particle class AND add parity cf and Randys Coulomb correction
91  *
92  * Revision 1.2  1999/07/06 22:33:23  lisa
93  * Adjusted all to work in pro and new - dev itself is broken
94  *
95  * Revision 1.1.1.1  1999/06/29 16:02:57  lisa
96  * Installation of AliFemtoMaker
97  *
98  **************************************************************************/
99
100 #ifndef AliFemtoParticle_hh
101 #define AliFemtoParticle_hh
102
103 //#include "math.h"
104 #include "Infrastructure/AliFemtoTypes.h"
105 #include "Infrastructure/AliFemtoTrack.h"
106 #include "Infrastructure/AliFemtoV0.h"
107 #include "Infrastructure/AliFemtoKink.h"
108 #include "Infrastructure/AliFemtoXi.h"
109 #include "AliFmPhysicalHelixD.h"
110 // ***
111 class AliFemtoHiddenInfo;
112 // ***
113 class AliFemtoParticle{
114 public:
115   AliFemtoParticle();
116   AliFemtoParticle(const AliFemtoParticle& aParticle);
117   AliFemtoParticle(const AliFemtoTrack* const hbtTrack, const double& mass);
118   AliFemtoParticle(const AliFemtoV0* const hbtV0, const double& mass);
119   AliFemtoParticle(const AliFemtoKink* const hbtKink, const double& mass);
120   AliFemtoParticle(const AliFemtoXi* const hbtXi, const double& mass);
121   ~AliFemtoParticle();
122
123   AliFemtoParticle& operator=(const AliFemtoParticle& aParticle);
124
125   const AliFemtoLorentzVector& FourMomentum() const;
126
127   AliFmPhysicalHelixD& Helix();
128
129   const AliFemtoThreeVector DecayVertexPosition() const;
130   unsigned long TopologyMap(const int word) const;
131   int NumberOfHits() const;
132
133   unsigned long TrackId() const;         // only for particles from tracks 
134   unsigned short   NegTrackId() const;   // only for particles from v0 
135   unsigned short   PosTrackId() const;   // only for particles from v0 
136
137   AliFemtoTrack* Track() const;
138   AliFemtoV0* V0() const;
139   AliFemtoKink* Kink() const;
140
141   const AliFemtoThreeVector& NominalTpcExitPoint() const;     // position track exits TPC assuming start at (0,0,0)
142   const AliFemtoThreeVector& NominalTpcEntrancePoint() const; // position track crosses IFC assuming start at (0,0,0)
143   const AliFemtoThreeVector& TpcV0PosExitPoint() const;  
144   const AliFemtoThreeVector& TpcV0PosEntrancePoint() const;
145   const AliFemtoThreeVector& TpcV0NegExitPoint() const;  
146   const AliFemtoThreeVector& TpcV0NegEntrancePoint() const;
147
148   // the following method is for explicit internal calculation to fill datamembers.
149   // It is invoked automatically if AliFemtoParticle constructed from AliFemtoTrack
150   //void CalculateNominalTpcExitAndEntrancePoints(); // NOTE - this requires the fHelix, so be sure this is filled
151
152
153   AliFemtoThreeVector fNominalPosSample[11];  // I make this public for convenience and speed of AliFemtoPair()
154   float fZ[45];
155   float fU[45];
156   int fSect[45];
157
158   void ResetFourMomentum(const AliFemtoLorentzVector& fourMomentum);
159
160   const AliFemtoHiddenInfo*  HiddenInfo() const;
161   // Fab private
162   AliFemtoHiddenInfo*  getHiddenInfo() const;
163   void SetHiddenInfo(AliFemtoHiddenInfo* aHiddenInfo);
164   void CalculatePurity();
165   double GetPionPurity();
166   double GetKaonPurity();
167   double GetProtonPurity();
168   void CalculateTpcExitAndEntrancePoints( AliFmPhysicalHelixD* tHelix,
169                                           AliFemtoThreeVector* PrimVert,
170                                           AliFemtoThreeVector* SecVert,
171                                           AliFemtoThreeVector* tmpTpcEntrancePoint,
172                                           AliFemtoThreeVector* tmpTpcExitPoint,
173                                           AliFemtoThreeVector* tmpPosSample,
174                                           float* tmpZ,float* tmpU,int* tmpSect);
175
176   // For V0 Neg Daugthers TpcEntrance/ExitPoints
177   AliFemtoThreeVector* fTpcV0NegPosSample;
178   float* fV0NegZ;
179   float* fV0NegU;
180   int* fV0NegSect;
181  
182 private:
183   AliFemtoTrack* fTrack;  // copy of the track the particle was formed of, else Null
184   AliFemtoV0* fV0;        // copy of the v0 the particle was formed of, else Null
185   AliFemtoKink* fKink;        // copy of the v0 the particle was formed of, else Null
186   AliFemtoXi* fXi;
187
188   AliFemtoLorentzVector fFourMomentum;
189   AliFmPhysicalHelixD fHelix;
190   //unsigned long  fMap[2]; 
191   //int fNhits;
192   AliFemtoThreeVector fNominalTpcExitPoint;
193   AliFemtoThreeVector fNominalTpcEntrancePoint;
194   AliFemtoHiddenInfo* fHiddenInfo;  // Fab private
195
196   double fPurity[6];
197
198   static double fPrimPimPar0;
199   static double fPrimPimPar1;
200   static double fPrimPimPar2;
201   static double fPrimPipPar0;
202   static double fPrimPipPar1;
203   static double fPrimPipPar2;
204   static double fPrimPmPar0;
205   static double fPrimPmPar1;
206   static double fPrimPmPar2;
207   static double fPrimPpPar0;
208   static double fPrimPpPar1;
209   static double fPrimPpPar2;
210
211    // For V0 Daugthers TpcEntrance/ExitPoints
212   AliFemtoThreeVector fPrimaryVertex;
213   AliFemtoThreeVector fSecondaryVertex;
214
215   AliFmPhysicalHelixD fHelixV0Pos;
216   AliFemtoThreeVector fTpcV0PosEntrancePoint;
217   AliFemtoThreeVector fTpcV0PosExitPoint;
218
219   AliFmPhysicalHelixD fHelixV0Neg;
220   AliFemtoThreeVector fTpcV0NegEntrancePoint;
221   AliFemtoThreeVector fTpcV0NegExitPoint;
222 };
223
224 inline AliFemtoTrack* AliFemtoParticle::Track() const { return fTrack; }
225 inline unsigned long  AliFemtoParticle::TrackId() const { return fTrack->TrackId(); }; 
226 inline const AliFemtoLorentzVector& AliFemtoParticle::FourMomentum() const {return fFourMomentum;}
227 inline AliFmPhysicalHelixD& AliFemtoParticle::Helix() {return fHelix;}
228 //inline unsigned long AliFemtoParticle::TopologyMap(const int word) const {return fMap[word];}
229 //inline int AliFemtoParticle::NumberOfHits() const {return fNhits;}
230 //by marek chojnacki to could compile 
231
232 inline unsigned long AliFemtoParticle::TopologyMap(const int word) const {return 1;}
233 inline int AliFemtoParticle::NumberOfHits() const {return 1;}
234
235 inline AliFemtoV0* AliFemtoParticle::V0() const { return fV0; }
236 inline unsigned short AliFemtoParticle::NegTrackId() const { return fV0->idNeg(); }
237 inline unsigned short AliFemtoParticle::PosTrackId() const { return fV0->idPos(); }
238 inline const AliFemtoThreeVector AliFemtoParticle::DecayVertexPosition() const {return fV0->decayVertexV0(); }
239 // ***
240 inline AliFemtoHiddenInfo* AliFemtoParticle::getHiddenInfo() const
241 {return fHiddenInfo;}
242 inline const AliFemtoHiddenInfo* AliFemtoParticle::HiddenInfo() const
243 {return fHiddenInfo;}
244 inline void AliFemtoParticle::SetHiddenInfo(AliFemtoHiddenInfo* aHiddenInfo)
245 { fHiddenInfo = aHiddenInfo->clone();}
246 // ***
247
248 inline void AliFemtoParticle::ResetFourMomentum(const AliFemtoLorentzVector& vec){fFourMomentum = vec;}
249
250 inline AliFemtoKink* AliFemtoParticle::Kink() const { return fKink; }
251
252 #endif