00001 #ifndef PARTICLE_CLASS_MOMENTUM_H
00002 #define PARTICLE_CLASS_MOMENTUM_H
00003
00004 #include <string>
00005
00006 #include "CLHEP/Vector/LorentzVector.h"
00007 #include "CLHEP/Matrix/Vector.h"
00008 #include "CLHEP/Matrix/SymMatrix.h"
00009 #include "CLHEP/Matrix/Matrix.h"
00010 #include "CLHEP/Geometry/Point3D.h"
00011
00013 class Momentum
00014 {
00015
00016 public:
00018 Momentum();
00019
00021 Momentum(const Momentum &);
00022
00024 Momentum(const HepLorentzVector &,
00025 const HepSymMatrix &error = HepSymMatrix(4,0));
00026
00028 virtual ~Momentum();
00029
00031 virtual std::string className(void) { return std::string("Momentum"); }
00032
00034 virtual void dump(const std::string &keyword = std::string("mass momentum return"),
00035 const std::string &prefix = std::string("")) const;
00036
00038 virtual const HepLorentzVector & p(void) const { return m_momentum; }
00039
00041 virtual const HepSymMatrix dp(void) const { return m_error.sub(1,4); }
00042
00044 virtual const HepPoint3D & x(void) const { return m_position; }
00045
00047 virtual const HepSymMatrix dx(void) const { return m_error.sub(5,7); }
00048
00050 virtual const HepSymMatrix & dpx(void) const { return m_error; }
00051
00053 virtual double mass(void) const { return m_momentum.mag(); }
00054
00056 virtual double dMass(void) const;
00057
00059 virtual double eta(void) const { return m_momentum.vect().pseudoRapidity(); }
00060
00062 virtual double phi(void) const { return m_momentum.phi(); }
00063
00065 virtual double pt(void) const {
00066 if (e() >= 0.) { return m_momentum.vect().perp(); }
00067 else { return -m_momentum.vect().perp(); }
00068 }
00069
00071 virtual double e(void) const { return m_momentum.t(); }
00072
00074 double deltaR(const Momentum *trk) const;
00075
00077 double deltaR(const Momentum &trk) const { return deltaR(&trk); }
00078
00080 virtual const HepPoint3D & vertex(void) const { return m_vertex; }
00081
00083 virtual const HepSymMatrix & dVertex(void) const { return m_vertexError; }
00084
00086 virtual const HepPoint3D & decayVertex(void) const { return m_decayVertex; }
00087
00089 virtual const HepSymMatrix & dDecayVertex(void) const { return m_decayVertexError; }
00090
00092 virtual void momentum(const HepLorentzVector &,
00093 const HepSymMatrix &error = HepSymMatrix(4,0));
00094
00096 virtual void position(const HepPoint3D &,
00097 const HepSymMatrix &error = HepSymMatrix(3,0));
00098
00100 virtual void momentumPosition(const HepLorentzVector &, const HepPoint3D &,
00101 const HepSymMatrix &error = HepSymMatrix(7,0));
00102
00104 virtual HepPoint3D & vertex(const HepPoint3D &,
00105 const HepSymMatrix &error = HepSymMatrix(3,0));
00106
00108 virtual HepPoint3D & decayVertex(const HepPoint3D &,
00109 const HepSymMatrix &error = HepSymMatrix(3,0));
00110
00112 virtual Momentum & operator = (const Momentum &);
00113
00114 protected:
00115 HepLorentzVector m_momentum;
00116 HepPoint3D m_position;
00117 HepSymMatrix m_error;
00118
00119 HepPoint3D m_vertex;
00120 HepSymMatrix m_vertexError;
00121 HepPoint3D m_decayVertex;
00122 HepSymMatrix m_decayVertexError;
00123 };
00124 #endif // PARTICLE_CLASS_MOMENTUM_H