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