]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HBTAN/AliHBTParticle.h
Cleaning up.
[u/mrichter/AliRoot.git] / HBTAN / AliHBTParticle.h
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
13 class TParticle;
14
15 class AliHBTParticle : public TObject
16 {
17
18 public:
19                                 // ****** constructors and destructor
20   AliHBTParticle();
21
22   AliHBTParticle(Int_t pdg, Double_t px, Double_t py, Double_t pz, Double_t etot,
23                  Double_t vx, Double_t vy, Double_t vz, Double_t time);
24
25   AliHBTParticle(const TParticle& p);
26
27   virtual ~AliHBTParticle(){};
28
29
30   Int_t          GetPdgCode      () const { return fPdgCode; }
31   Double_t       GetCalcMass     () const { return fCalcMass; }
32   Double_t       GetMass         ()       { return GetPDG()->Mass();}
33
34   TParticlePDG*  GetPDG          (){return TDatabasePDG::Instance()->GetParticle(fPdgCode);}
35
36   Int_t          Beauty          ()  { return GetPDG()->Beauty(); }
37   Int_t          Charm           ()  { return GetPDG()->Charm(); }
38   Int_t          Strangeness     ()  { return GetPDG()->Strangeness();}
39   void ProductionVertex(TLorentzVector &v) { v.SetXYZT(fVx,fVy,fVz,fVt);}
40
41
42   Double_t         Vx    () const { return fVx;}
43   Double_t         Vy    () const { return fVy;}
44   Double_t         Vz    () const { return fVz;}
45   Double_t         T     () const { return fVt;}
46
47   Double_t         Px    () const { return fPx; } //X coordinate of the momentum
48   Double_t         Py    () const { return fPy; } //Y coordinate of the momentum
49   Double_t         Pz    () const { return fPz; } //Z coordinate of the momentum
50   Double_t         P     () const                 //momentum
51     { return TMath::Sqrt(fPx*fPx+fPy*fPy+fPz*fPz); }
52   
53   void Momentum(TLorentzVector &v) { v.SetPxPyPzE(fPx,fPy,fPz,fE);}
54     
55   Double_t         Pt    () const  //transverse momentum
56     { return TMath::Sqrt(fPx*fPx+fPy*fPy); }
57   Double_t         Energy() const { return fE; }
58   
59                                    //Pseudo Rapidity
60   Double_t         Eta   () const { if (P() != fPz) return 0.5*TMath::Log((P()+fPz)/(P()-fPz)); 
61                                     else return 1.e30;}
62
63                                    //Rapidity
64   Double_t         Y     () const { if (fE  != fPz) return 0.5*TMath::Log((fE+fPz)/(fE-fPz));
65                                     else return 1.e30;}
66
67   Double_t         Phi   () const { return kPI+TMath::ATan2(-fPy,-fPx); }
68
69   Double_t         Theta () const { return (fPz==0)?kPI/2:TMath::ACos(fPz/P()); }
70
71                                 // setters
72
73
74   void           SetMomentum(Double_t px, Double_t py, Double_t pz, Double_t e)
75                              {fPx=px; fPy=py; fPz=pz; fE=e;}
76   void           SetMomentum(const TLorentzVector& p)
77                              {SetMomentum(p.Px(),p.Py(),p.Pz(),p.Energy());}
78
79   void           SetProductionVertex(Double_t vx, Double_t vy, Double_t vz, Double_t t)
80                              {fVx=vx; fVy=vy; fVz=vz; fVt=t;}
81   void           SetProductionVertex(const TLorentzVector& v)
82                              {SetProductionVertex(v.X(),v.Y(),v.Z(),v.T());}
83   const Char_t*  GetName() const;
84   
85 protected:
86
87   Int_t          fPdgCode;              // PDG code of the particle
88   Double_t       fCalcMass;             // Calculated mass
89
90   Double_t       fPx;                   // x component of momentum
91   Double_t       fPy;                   // y component of momentum
92   Double_t       fPz;                   // z component of momentum
93   Double_t       fE;                    // Energy
94
95   Double_t       fVx;                   // x of production vertex
96   Double_t       fVy;                   // y of production vertex
97   Double_t       fVz;                   // z of production vertex
98   Double_t       fVt;                   // t of production vertex
99
100 public:
101   ClassDef(AliHBTParticle,1)  // TParticle vertex particle information
102 };
103
104 #endif