]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliMCParticle.h
Swapped the names AliMagFCheb and AliMagWrapCheb. The former should be used
[u/mrichter/AliRoot.git] / STEER / AliMCParticle.h
1 #ifndef AliMCParticle_H
2 #define AliMCParticle_H
3 /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 //-------------------------------------------------------------------------
9 //     AliVParticle realisation for MC Particles
10 //     Author: Andreas Morsch, CERN
11 //-------------------------------------------------------------------------
12
13 #include <Rtypes.h>
14 #include <TParticle.h>
15 #include <TParticlePDG.h>
16 #include <TRefArray.h>
17
18 #include "AliTrackReference.h"
19 #include "AliVParticle.h"
20
21 class AliMCParticle: public AliVParticle {
22 public:
23     AliMCParticle();
24     AliMCParticle(TParticle* part, TRefArray* rarray = 0, Int_t label=-1);
25     virtual ~AliMCParticle();
26     AliMCParticle(const AliMCParticle& mcPart); 
27     AliMCParticle& operator=(const AliMCParticle& mcPart);
28     
29     // Kinematics
30     virtual Double_t Px()        const;
31     virtual Double_t Py()        const;
32     virtual Double_t Pz()        const;
33     virtual Double_t Pt()        const;
34     virtual Double_t P()         const;
35     virtual Bool_t   PxPyPz(Double_t p[3]) const;
36    
37     virtual Double_t OneOverPt() const;
38     virtual Double_t Phi()       const;
39     virtual Double_t Theta()     const;
40     
41     virtual Double_t Xv() const;
42     virtual Double_t Yv() const;
43     virtual Double_t Zv() const;
44     virtual Bool_t   XvYvZv(Double_t x[3]) const;  
45
46     virtual Double_t E()          const;
47     virtual Double_t M()          const;
48     
49     virtual Double_t Eta()        const;
50     virtual Double_t Y()          const;
51     
52     virtual Short_t Charge()      const;
53
54     virtual Int_t      Label()       const;
55     virtual Int_t      GetLabel() const {return Label();} 
56     virtual TParticle* Particle() const  {return fParticle;}
57             
58     // PID
59     virtual const Double_t *PID() const {return 0;} // return PID object (to be defined, still)
60
61     // Track References
62     Int_t              GetNumberOfTrackReferences() {return fNTrackRef;}
63     AliTrackReference* GetTrackReference(Int_t i)
64       {return dynamic_cast<AliTrackReference*>((*fTrackReferences)[i]);}
65  private:
66     TParticle *fParticle;             // The wrapped TParticle
67     TRefArray *fTrackReferences;      // Reference array to track references
68     Int_t      fNTrackRef;            // Number of track references
69     Int_t      fLabel;                // fParticle Label in the Stack
70     
71   ClassDef(AliMCParticle,0)  // AliVParticle realisation for MCParticles
72 };
73
74 inline Double_t AliMCParticle::Px()        const {return fParticle->Px();}
75 inline Double_t AliMCParticle::Py()        const {return fParticle->Py();}
76 inline Double_t AliMCParticle::Pz()        const {return fParticle->Pz();}
77 inline Double_t AliMCParticle::Pt()        const {return fParticle->Pt();}
78 inline Double_t AliMCParticle::P()         const {return fParticle->P(); }
79 inline Double_t AliMCParticle::OneOverPt() const {return 1. / fParticle->Pt();}
80 inline Bool_t   AliMCParticle::PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
81 inline Double_t AliMCParticle::Phi()       const {return fParticle->Phi();}
82 inline Double_t AliMCParticle::Theta()     const {return fParticle->Theta();}
83 inline Double_t AliMCParticle::Xv()        const {return fParticle->Vx();}
84 inline Double_t AliMCParticle::Yv()        const {return fParticle->Vy();}
85 inline Double_t AliMCParticle::Zv()        const {return fParticle->Vz();}
86 inline Bool_t   AliMCParticle::XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }
87 inline Double_t AliMCParticle::E()         const {return fParticle->Energy();}
88 inline Double_t AliMCParticle::Eta()       const {return fParticle->Eta();}
89
90 inline Double_t AliMCParticle::M()         const
91 {
92     TParticlePDG* pdg = fParticle->GetPDG();
93     if (pdg) {
94         return (pdg->Mass());
95     } else {
96         return (fParticle->GetCalcMass());
97     }
98 }
99
100
101 inline Double_t AliMCParticle::Y()         const 
102 {
103     Double_t e  = E();
104     Double_t pz = Pz();
105     
106     if (e != TMath::Abs(pz)) { 
107         return 0.5*TMath::Log((e+pz)/(e-pz));
108     } else { 
109         return -999.;
110     }
111 }
112
113 inline Short_t AliMCParticle::Charge()     const
114 {
115     TParticlePDG* pdg = fParticle->GetPDG();
116     if (pdg) {
117         return (Short_t (pdg->Charge()));
118     } else {
119         return -99;
120     }
121 }
122
123 inline Int_t AliMCParticle::Label()       const {return fLabel;}
124
125 #endif