17 #ifndef ROOT_Math_GenVector_BoostX
18 #define ROOT_Math_GenVector_BoostX 1
41 typedef double Scalar;
43 enum ELorentzRotationMatrixIndex {
44 kLXX = 0, kLXY = 1, kLXZ = 2, kLXT = 3
45 , kLYX = 4, kLYY = 5, kLYZ = 6, kLYT = 7
46 , kLZX = 8, kLZY = 9, kLZZ = 10, kLZT = 11
47 , kLTX = 12, kLTY = 13, kLTZ = 14, kLTT = 15
50 enum EBoostMatrixIndex {
51 kXX = 0, kXY = 1, kXZ = 2, kXT = 3
52 , kYY = 4, kYZ = 5, kYT = 6
67 explicit BoostX(Scalar beta_x) { SetComponents(beta_x); }
84 SetComponents (Scalar beta_x);
90 GetComponents (Scalar& beta_x)
const;
96 Scalar Beta()
const {
return fBeta; }
101 Scalar Gamma()
const {
return fGamma; }
106 void SetBeta(Scalar beta) { SetComponents(beta); }
111 typedef DisplacementVector3D<Cartesian3D<double>, DefaultCoordinateSystemTag > XYZVector;
112 XYZVector BetaVector()
const;
121 GetLorentzRotation (Scalar r[])
const;
129 LorentzVector< ROOT::Math::PxPyPzE4D<double> >
130 operator() (
const LorentzVector< ROOT::Math::PxPyPzE4D<double> > & v)
const;
136 template <
class CoordSystem>
137 LorentzVector<CoordSystem>
138 operator() (
const LorentzVector<CoordSystem> & v)
const {
139 LorentzVector< PxPyPzE4D<double> > xyzt(v);
140 LorentzVector< PxPyPzE4D<double> > r_xyzt = operator()(xyzt);
141 return LorentzVector<CoordSystem> ( r_xyzt );
149 template <
class Foreign4Vector>
151 operator() (
const Foreign4Vector & v)
const {
152 LorentzVector< PxPyPzE4D<double> > xyzt(v);
153 LorentzVector< PxPyPzE4D<double> > r_xyzt = operator()(xyzt);
154 return Foreign4Vector ( r_xyzt.X(), r_xyzt.Y(), r_xyzt.Z(), r_xyzt.T() );
160 template <
class A4Vector>
162 A4Vector operator* (
const A4Vector & v)
const
164 return operator()(v);
175 BoostX Inverse()
const;
180 bool operator == (
const BoostX & rhs)
const {
181 if( fBeta != rhs.fBeta )
return false;
182 if( fGamma != rhs.fGamma )
return false;
186 bool operator != (
const BoostX & rhs)
const {
187 return ! operator==(rhs);
205 std::ostream & operator<< (std::ostream & os,
const BoostX & b);