28 #ifndef __THREEVECTOR_H
29 #define __THREEVECTOR_H
39 namespace OrcaKinFit {
45 inline ThreeVector(
double px_,
double py_,
double pz_);
48 inline double getPx()
const;
49 inline double getPy()
const;
50 inline double getPz()
const;
51 inline double getX()
const;
52 inline double getY()
const;
53 inline double getZ()
const;
55 inline double getP2()
const;
56 inline double getP()
const;
57 inline double getMag()
const;
58 inline double getPt2()
const;
59 inline double getPt()
const;
60 inline double getR()
const;
62 inline double getPhi()
const;
63 inline double getTheta()
const;
64 inline double getEta()
const;
66 inline double getComponent(
int i)
const;
68 inline ThreeVector& setValues(
double px_,
double py_,
double pz_);
78 ThreeVector::ThreeVector()
82 ThreeVector::ThreeVector(
double px_,
double py_,
double pz_)
83 : px(px_), py(py_), pz(pz_)
86 double ThreeVector::getPx()
const {
return px; }
87 double ThreeVector::getPy()
const {
return py; }
88 double ThreeVector::getPz()
const {
return pz; }
89 double ThreeVector::getX()
const {
return px; }
90 double ThreeVector::getY()
const {
return py; }
91 double ThreeVector::getZ()
const {
return pz; }
93 double ThreeVector::getPt2()
const {
return px * px + py * py; }
94 double ThreeVector::getPt()
const {
return std::sqrt(getPt2()); }
95 double ThreeVector::getR()
const {
return std::sqrt(getPt2()); }
97 double ThreeVector::getP2()
const {
return px * px + py * py + pz * pz; }
98 double ThreeVector::getP()
const {
return std::sqrt(getP2()); }
99 double ThreeVector::getMag()
const {
return std::sqrt(getP2()); }
101 double ThreeVector::getPhi()
const {
return std::atan2(py, px); }
102 double ThreeVector::getTheta()
const {
return std::atan2(getPt(), pz); }
103 double ThreeVector::getEta()
const {
return -std::log(std::tan(0.5 * getTheta())); }
105 double ThreeVector::getComponent(
int i)
const
108 case 0:
return getPx();
109 case 1:
return getPy();
110 case 2:
return getPz();
115 ThreeVector& ThreeVector::setValues(
double px_,
double py_,
double pz_)
124 ThreeVector& ThreeVector::operator+= (
const ThreeVector& rhs)
132 ThreeVector& ThreeVector::operator-= (
const ThreeVector& rhs)
140 ThreeVector& ThreeVector::operator*= (
double rhs)
148 inline ThreeVector
operator+ (
const ThreeVector& lhs,
const ThreeVector& rhs)
150 return ThreeVector(lhs.getPx() + rhs.getPx(), lhs.getPy() + rhs.getPy(), lhs.getPz() + rhs.getPz());
153 inline ThreeVector
operator- (
const ThreeVector& lhs,
const ThreeVector& rhs)
155 return ThreeVector(lhs.getPx() - rhs.getPx(), lhs.getPy() - rhs.getPy(), lhs.getPz() - rhs.getPz());
158 inline ThreeVector
operator- (
const ThreeVector& rhs)
160 return ThreeVector(-rhs.getPx(), -rhs.getPy(), -rhs.getPz());
163 inline double operator* (
const ThreeVector& lhs,
const ThreeVector& rhs)
165 return lhs.getPx() * rhs.getPx() + lhs.getPy() * rhs.getPy() + lhs.getPz() * rhs.getPz();
168 inline ThreeVector
operator* (
double lhs,
const ThreeVector& rhs)
170 return ThreeVector(lhs * rhs.getPx(), lhs * rhs.getPy(), lhs * rhs.getPz());
173 inline std::ostream&
operator<< (std::ostream& out,
const ThreeVector& v)
175 out <<
"(" << v.getPx() <<
", " << v.getPy() <<
", " << v.getPz() <<
")";
185 #endif // __THREEVECTOR_H