AliRoot Core  3dc7879 (3dc7879)
AliMCParticle.h
Go to the documentation of this file.
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 <TObjArray.h>
17 
18 #include "AliTrackReference.h"
19 #include "AliVParticle.h"
20 #include "AliStack.h"
21 
22 class AliMCParticle: public AliVParticle {
23 public:
24  AliMCParticle();
25  AliMCParticle(TParticle* part, TObjArray* rarray = 0, Int_t label=-1);
26  virtual ~AliMCParticle();
27  AliMCParticle(const AliMCParticle& mcPart);
28  AliMCParticle& operator=(const AliMCParticle& mcPart);
29 
30  // Kinematics
31  virtual Double_t Px() const;
32  virtual Double_t Py() const;
33  virtual Double_t Pz() const;
34  virtual Double_t Pt() const;
35  virtual Double_t P() const;
36  virtual Bool_t PxPyPz(Double_t p[3]) const;
37 
38  virtual void Momentum(TLorentzVector & lv) { fParticle->Momentum(lv) ; }
39 
40  virtual Double_t OneOverPt() const;
41  virtual Double_t Phi() const;
42  virtual Double_t Theta() const;
43 
44  virtual Double_t Xv() const;
45  virtual Double_t Yv() const;
46  virtual Double_t Zv() const;
47  virtual Bool_t XvYvZv(Double_t x[3]) const;
48  virtual Double_t T() const;
49  virtual Double_t Tv() const;
50 
51  virtual Double_t E() const;
52  virtual Double_t M() const;
53 
54  virtual Double_t Eta() const;
55  virtual Double_t Y() const;
56 
57  virtual Short_t Charge() const;
58 
59  virtual Int_t Label() const;
60  virtual Int_t GetLabel() const {return Label();}
61  virtual Int_t PdgCode() const {return fParticle->GetPdgCode();}
62  virtual UInt_t MCStatusCode() const {return fParticle->GetStatusCode();}
63  virtual TParticle* Particle() const {return fParticle;}
64 
65  // PID
66  virtual const Double_t *PID() const {return 0;} // return PID object (to be defined, still)
67 
68  // Track References
69  Int_t GetNumberOfTrackReferences() const {return fNTrackRef;}
71  {return dynamic_cast<AliTrackReference*>((*fTrackReferences)[i]);}
72 
73  // "Trackable" criteria
74  Float_t GetTPCTrackLength(Float_t bz, Float_t ptmin, Int_t &counter, Float_t deadWidth, Float_t zMax=230. );
75  // Navigation
76  virtual Int_t GetMother() const {return fMother;}
77  Int_t GetFirstDaughter() const {return fFirstDaughter;}
78  Int_t GetLastDaughter() const {return fLastDaughter;}
79  Int_t GetDaughterLabel(Int_t i) const {return fParticle->GetDaughter(i) ;}
80  Int_t GetNDaughters() const {return fParticle->GetNDaughters();}
81 
82  void SetMother(Int_t idx) {fMother = idx;}
83  void SetFirstDaughter(Int_t idx) {fFirstDaughter = idx;}
84  void SetLastDaughter(Int_t idx) {fLastDaughter = idx;}
85  void SetLabel(Int_t label) {fLabel = label;}
86  virtual void SetGeneratorIndex(Short_t i) {fGeneratorIndex = i;}
87  virtual Short_t GetGeneratorIndex() const {return fGeneratorIndex;}
88 
89  const AliStack* GetStack() const {return fStack;}
90  void SetStack(AliStack* st) {fStack = st ;}
91  Bool_t IsPhysicalPrimary() const {return fStack->IsPhysicalPrimary(fLabel);}
94 
95  private:
96  TParticle *fParticle; // The wrapped TParticle
97  TObjArray *fTrackReferences; // Array to track references
98  Int_t fNTrackRef; // Number of track references
99  Int_t fLabel; // fParticle Label in the Stack
100  Int_t fMother; // Mother particles
101  Int_t fFirstDaughter; // First daughter
102  Int_t fLastDaughter; // LastDaughter
103  Short_t fGeneratorIndex; // !Generator index in cocktail
105 
106  ClassDef(AliMCParticle,1) // AliVParticle realisation for MCParticles
107 };
108 
109 inline Double_t AliMCParticle::Px() const {return fParticle->Px();}
110 inline Double_t AliMCParticle::Py() const {return fParticle->Py();}
111 inline Double_t AliMCParticle::Pz() const {return fParticle->Pz();}
112 inline Double_t AliMCParticle::Pt() const {return fParticle->Pt();}
113 inline Double_t AliMCParticle::P() const {return fParticle->P(); }
114 inline Double_t AliMCParticle::OneOverPt() const {return 1. / fParticle->Pt();}
115 inline Bool_t AliMCParticle::PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
116 inline Double_t AliMCParticle::Phi() const {return fParticle->Phi();}
117 inline Double_t AliMCParticle::Theta() const {return fParticle->Theta();}
118 inline Double_t AliMCParticle::Xv() const {return fParticle->Vx();}
119 inline Double_t AliMCParticle::Yv() const {return fParticle->Vy();}
120 inline Double_t AliMCParticle::Zv() const {return fParticle->Vz();}
121 inline Bool_t AliMCParticle::XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }
122 inline Double_t AliMCParticle::T() const {return fParticle->T();}
123 inline Double_t AliMCParticle::Tv() const {return fParticle->T();}
124 inline Double_t AliMCParticle::E() const {return fParticle->Energy();}
125 inline Double_t AliMCParticle::Eta() const {return fParticle->Eta();}
126 
127 
128 inline Double_t AliMCParticle::M() const
129 {
130  TParticlePDG* pdg = fParticle->GetPDG();
131  if (pdg) {
132  return (pdg->Mass());
133  } else {
134  return (fParticle->GetCalcMass());
135  }
136 }
137 
138 
139 inline Double_t AliMCParticle::Y() const
140 {
141  Double_t e = E();
142  Double_t pz = Pz();
143 
144  if ( e - TMath::Abs(pz) > FLT_EPSILON ) {
145  return 0.5*TMath::Log((e+pz)/(e-pz));
146  } else {
147  return -999.;
148  }
149 }
150 
151 inline Short_t AliMCParticle::Charge() const
152 {
153  TParticlePDG* pdg = fParticle->GetPDG();
154  if (pdg) {
155  return (Short_t (pdg->Charge()));
156  } else {
157  return -99;
158  }
159 }
160 
161 inline Int_t AliMCParticle::Label() const {return fLabel;}
162 
163 #endif
virtual Double_t M() const
virtual Double_t T() const
Bool_t IsPhysicalPrimary() const
Definition: AliMCParticle.h:91
AliMCParticle & operator=(const AliMCParticle &mcPart)
virtual Double_t Py() const
void SetMother(Int_t idx)
Definition: AliMCParticle.h:82
Int_t fFirstDaughter
virtual Double_t Theta() const
#define TObjArray
virtual Double_t OneOverPt() const
TParticle * fParticle
Definition: AliMCParticle.h:96
virtual Double_t Pt() const
virtual Short_t GetGeneratorIndex() const
Definition: AliMCParticle.h:87
Bool_t IsSecondaryFromWeakDecay(Int_t index, Bool_t useInEmbedding=kFALSE)
Definition: AliStack.cxx:1125
Float_t p[]
Definition: kNNTest.C:133
Float_t GetTPCTrackLength(Float_t bz, Float_t ptmin, Int_t &counter, Float_t deadWidth, Float_t zMax=230.)
virtual Int_t GetMother() const
Definition: AliMCParticle.h:76
Int_t GetFirstDaughter() const
Definition: AliMCParticle.h:77
virtual Double_t Y() const
Bool_t IsSecondaryFromMaterial() const
Definition: AliMCParticle.h:93
AliTrackReference * GetTrackReference(Int_t i)
Definition: AliMCParticle.h:70
virtual Double_t Px() const
virtual Int_t GetLabel() const
Definition: AliMCParticle.h:60
Bool_t IsSecondaryFromWeakDecay() const
Definition: AliMCParticle.h:92
virtual Int_t Label() const
virtual UInt_t MCStatusCode() const
Definition: AliMCParticle.h:62
virtual ~AliMCParticle()
void SetFirstDaughter(Int_t idx)
Definition: AliMCParticle.h:83
Bool_t IsPhysicalPrimary(Int_t i, Bool_t useInEmbedding=kFALSE)
Definition: AliStack.cxx:1047
virtual Double_t Zv() const
virtual Int_t PdgCode() const
Definition: AliMCParticle.h:61
Int_t GetNDaughters() const
Definition: AliMCParticle.h:80
TObjArray * fTrackReferences
Definition: AliMCParticle.h:97
Int_t GetLastDaughter() const
Definition: AliMCParticle.h:78
virtual Double_t Xv() const
virtual const Double_t * PID() const
Definition: AliMCParticle.h:66
Int_t GetNumberOfTrackReferences() const
Definition: AliMCParticle.h:69
virtual Short_t Charge() const
Short_t fGeneratorIndex
Bool_t IsSecondaryFromMaterial(Int_t index, Bool_t useInEmbedding=kFALSE)
Definition: AliStack.cxx:1156
virtual Double_t Pz() const
virtual Double_t Tv() const
virtual TParticle * Particle() const
Definition: AliMCParticle.h:63
AliStack * fStack
Int_t GetDaughterLabel(Int_t i) const
Definition: AliMCParticle.h:79
virtual Double_t Yv() const
virtual Double_t P() const
void SetLabel(Int_t label)
Definition: AliMCParticle.h:85
void SetLastDaughter(Int_t idx)
Definition: AliMCParticle.h:84
virtual void Momentum(TLorentzVector &lv)
Definition: AliMCParticle.h:38
virtual Double_t Phi() const
virtual Double_t Eta() const
virtual Bool_t PxPyPz(Double_t p[3]) const
virtual Double_t E() const
virtual void SetGeneratorIndex(Short_t i)
Definition: AliMCParticle.h:86
virtual Bool_t XvYvZv(Double_t x[3]) const
void SetStack(AliStack *st)
Definition: AliMCParticle.h:90
const AliStack * GetStack() const
Definition: AliMCParticle.h:89