Track Points Added. Class needed for Anti-Merging cut
[u/mrichter/AliRoot.git] / HBTAN / AliHBTParticle.h
CommitLineData
1b446896 1#ifndef ALIHBTPARTICLE
2#define ALIHBTPARTICLE
bfb09ece 3//___________________________________________________________
4/////////////////////////////////////////////////////////////
5//
6// class AliHBTParticle
7//
8// Ali HBT Particle: simplified class TParticle
9// Simplified in order to minimize the size of object
1b446896 10// - we want to keep a lot of such a objects in memory
bfb09ece 11// Additionaly adjusted for HBT Analysies purposes
12//
13/////////////////////////////////////////////////////////////
1b446896 14
15#include <TObject.h>
16#include <TLorentzVector.h>
17#include <TMath.h>
18#include <TDatabasePDG.h>
19
829f5c7c 20#include "AliConst.h"
21
1b446896 22class TParticle;
f5de2f09 23class AliHBTTrackPoints;
1b446896 24
25class AliHBTParticle : public TObject
26{
27
28public:
29 // ****** constructors and destructor
30 AliHBTParticle();
8089a083 31 AliHBTParticle(const AliHBTParticle& in);
32
33 AliHBTParticle(Int_t pdg, Int_t idx, Double_t px, Double_t py, Double_t pz, Double_t etot,
34 Double_t vx, Double_t vy, Double_t vz, Double_t time);
1b446896 35
8089a083 36 AliHBTParticle(Int_t pdg, Float_t prob, Int_t idx, Double_t px, Double_t py, Double_t pz, Double_t etot,
1b446896 37 Double_t vx, Double_t vy, Double_t vz, Double_t time);
38
8089a083 39 AliHBTParticle(const TParticle& p,Int_t idx);
1b446896 40
bed069a4 41 virtual ~AliHBTParticle();
42
43 AliHBTParticle& operator=(const AliHBTParticle& in);
44
8089a083 45 void SetPIDprobability(Int_t pdg, Float_t prob = 1.0);
46 Float_t GetPIDprobability(Int_t pdg);
47
48 Int_t GetPdgCode () const { return (fPids)?fPids[fPdgIdx]:0;}
49 Int_t GetPid () const { return GetPdgCode();}
50 Float_t GetPidProb () const { return (fPidProb)?fPidProb[fPdgIdx]:0;}
51
52 Int_t GetUID () const { return fIdxInEvent;}
e665964c 53 Int_t GetNumberOfPids () const { return fNPids;}
54 Int_t GetNthPid (Int_t idx) const;
55 Float_t GetNthPidProb (Int_t idx) const;
56
8089a083 57 void SetPdgCode(Int_t pdg, Float_t prob = 1.0);
1b446896 58 Double_t GetCalcMass () const { return fCalcMass; }
8089a083 59 Double_t GetMass () { return (GetPDG())?GetPDG()->Mass():-1.;}
1b446896 60
8089a083 61 TParticlePDG* GetPDG (){return TDatabasePDG::Instance()->GetParticle(GetPdgCode());}
1b446896 62
63 Int_t Beauty () { return GetPDG()->Beauty(); }
64 Int_t Charm () { return GetPDG()->Charm(); }
65 Int_t Strangeness () { return GetPDG()->Strangeness();}
66 void ProductionVertex(TLorentzVector &v) { v.SetXYZT(fVx,fVy,fVz,fVt);}
67
68
69 Double_t Vx () const { return fVx;}
70 Double_t Vy () const { return fVy;}
71 Double_t Vz () const { return fVz;}
72 Double_t T () const { return fVt;}
73
74 Double_t Px () const { return fPx; } //X coordinate of the momentum
75 Double_t Py () const { return fPy; } //Y coordinate of the momentum
76 Double_t Pz () const { return fPz; } //Z coordinate of the momentum
77 Double_t P () const //momentum
78 { return TMath::Sqrt(fPx*fPx+fPy*fPy+fPz*fPz); }
79
80 void Momentum(TLorentzVector &v) { v.SetPxPyPzE(fPx,fPy,fPz,fE);}
81
82 Double_t Pt () const //transverse momentum
83 { return TMath::Sqrt(fPx*fPx+fPy*fPy); }
84 Double_t Energy() const { return fE; }
85
86 //Pseudo Rapidity
87 Double_t Eta () const { if (P() != fPz) return 0.5*TMath::Log((P()+fPz)/(P()-fPz));
88 else return 1.e30;}
89
90 //Rapidity
91 Double_t Y () const { if (fE != fPz) return 0.5*TMath::Log((fE+fPz)/(fE-fPz));
92 else return 1.e30;}
93
7052051b 94 Double_t Phi () const { return TMath::Pi()+TMath::ATan2(-fPy,-fPx); }
1b446896 95
4d9301d5 96 Double_t Theta () const { return (fPz==0)?TMath::PiOver2():TMath::ACos(fPz/P()); }
1b446896 97
4d9301d5 98 // setters
1b446896 99
100 void SetMomentum(Double_t px, Double_t py, Double_t pz, Double_t e)
101 {fPx=px; fPy=py; fPz=pz; fE=e;}
102 void SetMomentum(const TLorentzVector& p)
103 {SetMomentum(p.Px(),p.Py(),p.Pz(),p.Energy());}
104
105 void SetProductionVertex(Double_t vx, Double_t vy, Double_t vz, Double_t t)
106 {fVx=vx; fVy=vy; fVz=vz; fVt=t;}
107 void SetProductionVertex(const TLorentzVector& v)
108 {SetProductionVertex(v.X(),v.Y(),v.Z(),v.T());}
4d1d0fe9 109 void SetCalcMass(Double_t mass) {fCalcMass = mass;}
dd82cadc 110
111 void SetUID(Int_t id){fIdxInEvent = id;}
112
637fd167 113 const Char_t* GetName() const;
8089a083 114 void Print() const;
f5de2f09 115
116 void SetTrackPoints(AliHBTTrackPoints* tpts){fTrackPoints = tpts;}
117 AliHBTTrackPoints* GetTrackPoints() const {return fTrackPoints;}
118
8089a083 119 static void SetDebug(Int_t dbg=1){fgDebug=dbg;}
120 static Int_t GetDebug(){return fgDebug;}
121 static Int_t fgDebug; //debug printout level
1b446896 122
123protected:
8089a083 124 Int_t GetPidSlot(Int_t pdg) const;//returns position of the given PID in fPids (and fPidProb) array.
125
126private:
127 Char_t fPdgIdx; // index of PDG code of the particle in fPids
128 Int_t fIdxInEvent; // index of a particle: the same particle can appear in the event
129 // many times with different pid's. Idx allows to check that they are the same particles
ff3d1148 130 Int_t fNPids; // number of non-zero proboble Pids
131 Int_t *fPids; // [fNPids] Array with PIDs
132 Float_t *fPidProb; // [fNPids] PIDs probabilities
1b446896 133 Double_t fCalcMass; // Calculated mass
134
135 Double_t fPx; // x component of momentum
136 Double_t fPy; // y component of momentum
137 Double_t fPz; // z component of momentum
138 Double_t fE; // Energy
139
140 Double_t fVx; // x of production vertex
141 Double_t fVy; // y of production vertex
142 Double_t fVz; // z of production vertex
143 Double_t fVt; // t of production vertex
144
f5de2f09 145 AliHBTTrackPoints* fTrackPoints; // track positions along trajectory - used by anti-merging cut
146 ClassDef(AliHBTParticle,3) // TParticle vertex particle information
1b446896 147};
148
149#endif