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 */
8 //-------------------------------------------------------------------------
9 // AliVParticle realisation for MC Particles
10 // Author: Andreas Morsch, CERN
11 //-------------------------------------------------------------------------
14 #include <TParticle.h>
15 #include <TParticlePDG.h>
16 #include <TRefArray.h>
18 #include "AliTrackReference.h"
19 #include "AliVParticle.h"
21 class AliMCParticle: public AliVParticle {
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);
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;
37 virtual Double_t OneOverPt() const;
38 virtual Double_t Phi() const;
39 virtual Double_t Theta() const;
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;
46 virtual Double_t E() const;
47 virtual Double_t M() const;
49 virtual Double_t Eta() const;
50 virtual Double_t Y() const;
52 virtual Short_t Charge() const;
54 virtual Int_t Label() const;
55 virtual Int_t GetLabel() const {return Label();}
56 virtual Int_t PdgCode() const {return fParticle->GetPdgCode();}
57 virtual TParticle* Particle() const {return fParticle;}
60 virtual const Double_t *PID() const {return 0;} // return PID object (to be defined, still)
63 Int_t GetNumberOfTrackReferences() {return fNTrackRef;}
64 AliTrackReference* GetTrackReference(Int_t i)
65 {return dynamic_cast<AliTrackReference*>((*fTrackReferences)[i]);}
67 // "Trackable" criteria
68 Float_t GetTPCTrackLength(Float_t bz, Float_t ptmin, Int_t &counter, Float_t deadWidth);
70 Int_t GetMother() const {return fMother;}
71 Int_t GetFirstDaughter() const {return fFirstDaughter;}
72 Int_t GetLastDaughter() const {return fLastDaughter;}
73 void SetMother(Int_t idx) {fMother = idx;}
74 void SetFirstDaughter(Int_t idx) {fFirstDaughter = idx;}
75 void SetLastDaughter(Int_t idx) {fLastDaughter = idx;}
76 void SetLabel(Int_t label) {fLabel = label;}
79 TParticle *fParticle; // The wrapped TParticle
80 TRefArray *fTrackReferences; // Reference array to track references
81 Int_t fNTrackRef; // Number of track references
82 Int_t fLabel; // fParticle Label in the Stack
83 Int_t fMother; // Mother particles
84 Int_t fFirstDaughter; // First daughter
85 Int_t fLastDaughter; // LastDaughter
87 ClassDef(AliMCParticle,0) // AliVParticle realisation for MCParticles
90 inline Double_t AliMCParticle::Px() const {return fParticle->Px();}
91 inline Double_t AliMCParticle::Py() const {return fParticle->Py();}
92 inline Double_t AliMCParticle::Pz() const {return fParticle->Pz();}
93 inline Double_t AliMCParticle::Pt() const {return fParticle->Pt();}
94 inline Double_t AliMCParticle::P() const {return fParticle->P(); }
95 inline Double_t AliMCParticle::OneOverPt() const {return 1. / fParticle->Pt();}
96 inline Bool_t AliMCParticle::PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
97 inline Double_t AliMCParticle::Phi() const {return fParticle->Phi();}
98 inline Double_t AliMCParticle::Theta() const {return fParticle->Theta();}
99 inline Double_t AliMCParticle::Xv() const {return fParticle->Vx();}
100 inline Double_t AliMCParticle::Yv() const {return fParticle->Vy();}
101 inline Double_t AliMCParticle::Zv() const {return fParticle->Vz();}
102 inline Bool_t AliMCParticle::XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }
103 inline Double_t AliMCParticle::E() const {return fParticle->Energy();}
104 inline Double_t AliMCParticle::Eta() const {return fParticle->Eta();}
107 inline Double_t AliMCParticle::M() const
109 TParticlePDG* pdg = fParticle->GetPDG();
111 return (pdg->Mass());
113 return (fParticle->GetCalcMass());
118 inline Double_t AliMCParticle::Y() const
123 if (e != TMath::Abs(pz)) {
124 return 0.5*TMath::Log((e+pz)/(e-pz));
130 inline Short_t AliMCParticle::Charge() const
132 TParticlePDG* pdg = fParticle->GetPDG();
134 return (Short_t (pdg->Charge()));
140 inline Int_t AliMCParticle::Label() const {return fLabel;}