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 | |
13 | class TParticle; |
14 | |
15 | class AliHBTParticle : public TObject |
16 | { |
17 | |
18 | public: |
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());} |
637fd167 |
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 | |
102 | protected: |
8089a083 |
103 | Int_t GetPidSlot(Int_t pdg) const;//returns position of the given PID in fPids (and fPidProb) array. |
104 | |
105 | private: |
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 |
ff3d1148 |
109 | Int_t fNPids; // number of non-zero proboble Pids |
110 | Int_t *fPids; // [fNPids] Array with PIDs |
111 | Float_t *fPidProb; // [fNPids] PIDs probabilities |
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 | |
ff3d1148 |
124 | ClassDef(AliHBTParticle,2) // TParticle vertex particle information |
1b446896 |
125 | }; |
126 | |
127 | #endif |