]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliMCParticle.h
Bug in calc. of Y() corrected.
[u/mrichter/AliRoot.git] / STEER / AliMCParticle.h
index abe3b4f6ac8449c2f02adf9ee2c35896359b12ba..092b36e966521474056cdaff3e3b9f706777edf8 100644 (file)
@@ -7,48 +7,65 @@
 
 //-------------------------------------------------------------------------
 //     AliVParticle realisation for MC Particles
-//     Author: Markus Oldenburg, CERN
+//     Author: Andreas Morsch, CERN
 //-------------------------------------------------------------------------
 
 #include <Rtypes.h>
-#include <AliVParticle.h>
 #include <TParticle.h>
 #include <TParticlePDG.h>
+#include <TRefArray.h>
 
-class AliMCParticle: public AliVParticle {
+#include "AliTrackReference.h"
+#include "AliVParticle.h"
 
+class AliMCParticle: public AliVParticle {
 public:
     AliMCParticle();
-    AliMCParticle(TParticle* part);
-    virtual ~AliMCParticle() {}
+    AliMCParticle(TParticle* part, TRefArray* rarray = 0, Int_t label=-1);
+    virtual ~AliMCParticle();
     AliMCParticle(const AliMCParticle& mcPart); 
     AliMCParticle& operator=(const AliMCParticle& mcPart);
     
-    // kinematics
+    // Kinematics
     virtual Double_t Px()        const;
     virtual Double_t Py()        const;
     virtual Double_t Pz()        const;
     virtual Double_t Pt()        const;
     virtual Double_t P()         const;
-    
+    virtual Bool_t   PxPyPz(Double_t p[3]) const;
+   
     virtual Double_t OneOverPt() const;
     virtual Double_t Phi()       const;
     virtual Double_t Theta()     const;
     
+    virtual Double_t Xv() const;
+    virtual Double_t Yv() const;
+    virtual Double_t Zv() const;
+    virtual Bool_t   XvYvZv(Double_t x[3]) const;  
+
+    virtual Double_t E()          const;
+    virtual Double_t M()          const;
     
-    virtual Double_t E()         const;
-    virtual Double_t M()         const;
-    
-    virtual Double_t Eta()       const;
-    virtual Double_t Y()         const;
-    
-    virtual Short_t Charge()     const;
+    virtual Double_t Eta()        const;
+    virtual Double_t Y()          const;
     
+    virtual Short_t Charge()      const;
+
+    virtual Int_t      Label()    const;
+    virtual TParticle* Particle() const  {return fParticle;}
+           
     // PID
     virtual const Double_t *PID() const {return 0;} // return PID object (to be defined, still)
-    
+
+    // Track References
+    Int_t              GetNumberOfTrackReferences() {return fNTrackRef;}
+    AliTrackReference* GetTrackReference(Int_t i)
+      {return dynamic_cast<AliTrackReference*>((*fTrackReferences)[i]);}
  private:
-    TParticle *fParticle; // The TParticle
+    TParticle *fParticle;             // The wrapped TParticle
+    TRefArray *fTrackReferences;      // Reference array to track references
+    Int_t      fNTrackRef;            // Number of track references
+    Int_t      fLabel;                // fParticle Label in the Stack
     
   ClassDef(AliMCParticle,0)  // AliVParticle realisation for MCParticles
 };
@@ -59,8 +76,13 @@ inline Double_t AliMCParticle::Pz()        const {return fParticle->Pz();}
 inline Double_t AliMCParticle::Pt()        const {return fParticle->Pt();}
 inline Double_t AliMCParticle::P()         const {return fParticle->P(); }
 inline Double_t AliMCParticle::OneOverPt() const {return 1. / fParticle->Pt();}
+inline Bool_t   AliMCParticle::PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
 inline Double_t AliMCParticle::Phi()       const {return fParticle->Phi();}
 inline Double_t AliMCParticle::Theta()     const {return fParticle->Theta();}
+inline Double_t AliMCParticle::Xv()        const {return fParticle->Vx();}
+inline Double_t AliMCParticle::Yv()        const {return fParticle->Vy();}
+inline Double_t AliMCParticle::Zv()        const {return fParticle->Vz();}
+inline Bool_t   AliMCParticle::XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }
 inline Double_t AliMCParticle::E()         const {return fParticle->Energy();}
 inline Double_t AliMCParticle::Eta()       const {return fParticle->Eta();}
 
@@ -78,8 +100,9 @@ inline Double_t AliMCParticle::M()         const
 inline Double_t AliMCParticle::Y()         const 
 {
     Double_t e  = E();
-    Double_t pz = TMath::Abs(Pz());
-    if (e != pz) { 
+    Double_t pz = Pz();
+    
+    if (e != TMath::Abs(pz)) { 
        return 0.5*TMath::Log((e+pz)/(e-pz));
     } else { 
        return -999.;
@@ -96,4 +119,6 @@ inline Short_t AliMCParticle::Charge()     const
     }
 }
 
+inline Int_t AliMCParticle::Label()       const {return fLabel;}
+
 #endif