00001 #ifndef _MANTREE_MPARTICLE_H__
00002 #define _MANTREE_MPARTICLE_H__
00003
00004 #include <iosfwd>
00005 #include <string>
00006
00007 #include "TLorentzVector.h"
00008
00009 #ifdef _ATHENA_CLASSES__
00010 #include "EventKernel/I4Momentum.h"
00011 #include "FourMom/P4IPtCotThPhiMBase.h"
00012 #endif
00013
00014 namespace manchester {
00015
00024 class MParticle : public TLorentzVector {
00025 public:
00027 MParticle();
00028
00030 MParticle(const TLorentzVector& p);
00031
00033 MParticle(const MParticle& p);
00034
00036 MParticle(Double_t px, Double_t py, Double_t pz, Double_t e);
00037
00038 #ifdef _ATHENA_CLASSES__
00040 MParticle(const I4Momentum& vec);
00041
00043 MParticle(const P4IPtCotThPhiMBase& vec);
00044 #endif
00045
00047 virtual ~MParticle();
00048
00050 Int_t Charge() const;
00051
00053 void SetCharge(Int_t c);
00054
00056 virtual std::string Type() const;
00057
00059 virtual std::ostream& PrintContent(std::ostream& o) const;
00060
00062 bool operator<(const MParticle& p) const;
00063
00065 bool operator>(const MParticle& p) const;
00066
00068 MParticle& operator+=(const MParticle& p);
00069
00071 MParticle& operator=(const MParticle& p);
00072
00073 protected:
00075 virtual void Reset();
00076
00077 private:
00079 Int_t m_charge;
00080
00081 ClassDef(MParticle, 3);
00082
00083 };
00084
00085 }
00086
00087 std::ostream& operator<< (std::ostream& os, const manchester::MParticle& o);
00088
00089 const manchester::MParticle operator+ (const manchester::MParticle& lhs,
00090 const manchester::MParticle& rhs);
00091
00092 #endif