//-------------------------------------------------------------------------
// 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
};
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();}
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.;
}
}
+inline Int_t AliMCParticle::Label() const {return fLabel;}
+
#endif