1 /***************************************************************************
5 * Author: Mike Lisa, Ohio State, lisa@mps.ohio-state.edu
6 ***************************************************************************
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
14 ***************************************************************************
17 * Revision 1.1.1.1 2007/04/25 15:38:41 panos
18 * Importing the HBT code dir
20 * Revision 1.2 2007-04-03 16:00:08 mchojnacki
21 * Changes to iprove memory managing
23 * Revision 1.1.1.1 2007/03/07 10:14:49 mchojnacki
24 * First version on CVS
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.
30 * Revision 1.18 2002/12/12 17:01:50 kisiel
31 * Hidden Information handling and purity calculation
33 * Revision 1.17 2002/11/19 23:35:52 renault
34 * Enable calculation of exit/entrance separation for V0 daughters
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
39 * Revision 1.15 2001/05/25 23:23:59 lisa
40 * Added in AliFemtoKink stuff
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
45 * Revision 1.13 2001/04/03 21:04:36 kisiel
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.
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
56 * Revision 1.11 2000/07/17 20:03:17 lisa
57 * Implemented tools for addressing and assessing trackmerging
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
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
71 * Revision 1.8 2000/04/03 16:21:51 laue
72 * some include files changed
73 * Multi track cut added
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())
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
86 * Revision 1.4 1999/09/17 22:38:02 lisa
87 * first full integration of V0s into AliFemto framework
89 * Revision 1.3 1999/09/01 19:04:54 lisa
90 * update Particle class AND add parity cf and Randys Coulomb correction
92 * Revision 1.2 1999/07/06 22:33:23 lisa
93 * Adjusted all to work in pro and new - dev itself is broken
95 * Revision 1.1.1.1 1999/06/29 16:02:57 lisa
96 * Installation of AliFemtoMaker
98 **************************************************************************/
100 #ifndef AliFemtoParticle_hh
101 #define AliFemtoParticle_hh
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"
111 class AliFemtoHiddenInfo;
113 class 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);
123 AliFemtoParticle& operator=(const AliFemtoParticle& aParticle);
125 const AliFemtoLorentzVector& FourMomentum() const;
127 AliFmPhysicalHelixD& Helix();
129 const AliFemtoThreeVector DecayVertexPosition() const;
130 unsigned long TopologyMap(const int word) const;
131 int NumberOfHits() const;
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
137 AliFemtoTrack* Track() const;
138 AliFemtoV0* V0() const;
139 AliFemtoKink* Kink() const;
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;
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
153 AliFemtoThreeVector fNominalPosSample[11]; // I make this public for convenience and speed of AliFemtoPair()
158 void ResetFourMomentum(const AliFemtoLorentzVector& fourMomentum);
160 const AliFemtoHiddenInfo* HiddenInfo() const;
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);
176 // For V0 Neg Daugthers TpcEntrance/ExitPoints
177 AliFemtoThreeVector* fTpcV0NegPosSample;
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
188 AliFemtoLorentzVector fFourMomentum;
189 AliFmPhysicalHelixD fHelix;
190 //unsigned long fMap[2];
192 AliFemtoThreeVector fNominalTpcExitPoint;
193 AliFemtoThreeVector fNominalTpcEntrancePoint;
194 AliFemtoHiddenInfo* fHiddenInfo; // Fab private
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;
211 // For V0 Daugthers TpcEntrance/ExitPoints
212 AliFemtoThreeVector fPrimaryVertex;
213 AliFemtoThreeVector fSecondaryVertex;
215 AliFmPhysicalHelixD fHelixV0Pos;
216 AliFemtoThreeVector fTpcV0PosEntrancePoint;
217 AliFemtoThreeVector fTpcV0PosExitPoint;
219 AliFmPhysicalHelixD fHelixV0Neg;
220 AliFemtoThreeVector fTpcV0NegEntrancePoint;
221 AliFemtoThreeVector fTpcV0NegExitPoint;
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
232 inline unsigned long AliFemtoParticle::TopologyMap(const int word) const {return 1;}
233 inline int AliFemtoParticle::NumberOfHits() const {return 1;}
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(); }
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();}
248 inline void AliFemtoParticle::ResetFourMomentum(const AliFemtoLorentzVector& vec){fFourMomentum = vec;}
250 inline AliFemtoKink* AliFemtoParticle::Kink() const { return fKink; }