#ifndef ROOT_Math_GenVector_BoostX
#define ROOT_Math_GenVector_BoostX 1
#include "Math/GenVector/LorentzVector.h"
#include "Math/GenVector/PxPyPzE4D.h"
#include "Math/GenVector/DisplacementVector3D.h"
#include "Math/GenVector/Cartesian3D.h"
namespace ROOT {
  namespace Math {
  
class BoostX {
public:
  typedef double Scalar;
  enum ELorentzRotationMatrixIndex {
      kLXX =  0, kLXY =  1, kLXZ =  2, kLXT =  3
    , kLYX =  4, kLYY =  5, kLYZ =  6, kLYT =  7
    , kLZX =  8, kLZY =  9, kLZZ = 10, kLZT = 11
    , kLTX = 12, kLTY = 13, kLTZ = 14, kLTT = 15
  };
  enum EBoostMatrixIndex {
      kXX =  0, kXY =  1, kXZ =  2, kXT =  3
    	      , kYY =  4, kYZ =  5, kYT =  6
    		        , kZZ =  7, kZT =  8
    			          , kTT =  9
  };
  
  
  BoostX();
  
  explicit BoostX(Scalar beta_x) { SetComponents(beta_x); }
  
  
  void Rectify();
  
  
  void
  SetComponents (Scalar beta_x);
  
  void
  GetComponents (Scalar& beta_x) const;
   
  Scalar Beta() const { return fBeta; }
   
  Scalar Gamma() const { return fGamma; }
   
  void  SetBeta(Scalar beta) { SetComponents(beta); }
   
  
  typedef  DisplacementVector3D<Cartesian3D<double>, DefaultCoordinateSystemTag > XYZVector; 
  XYZVector BetaVector() const;
  
  void 
  GetLorentzRotation (Scalar r[]) const; 
  
  
  
  LorentzVector< ROOT::Math::PxPyPzE4D<double> >
  operator() (const LorentzVector< ROOT::Math::PxPyPzE4D<double> > & v) const;
  
  
  template <class CoordSystem>
  LorentzVector<CoordSystem>
  operator() (const LorentzVector<CoordSystem> & v) const {
    LorentzVector< PxPyPzE4D<double> > xyzt(v);
    LorentzVector< PxPyPzE4D<double> > r_xyzt = operator()(xyzt);
    return LorentzVector<CoordSystem> ( r_xyzt );
  }
  
  template <class Foreign4Vector>
  Foreign4Vector
  operator() (const Foreign4Vector & v) const {
    LorentzVector< PxPyPzE4D<double> > xyzt(v);
    LorentzVector< PxPyPzE4D<double> > r_xyzt = operator()(xyzt);
    return Foreign4Vector ( r_xyzt.X(), r_xyzt.Y(), r_xyzt.Z(), r_xyzt.T() );
  }
  
  template <class A4Vector>
  inline
  A4Vector operator* (const A4Vector & v) const
  {
    return operator()(v);
  }
  
  void Invert();
  
  BoostX Inverse() const;
  
  bool operator == (const BoostX & rhs) const {
    if( fBeta  != rhs.fBeta  )  return false;
    if( fGamma != rhs.fGamma )  return false;
    return true;
  }
  bool operator != (const BoostX & rhs) const {
    return ! operator==(rhs);
  }
private:
  Scalar fBeta;
  Scalar fGamma;
};  
  
std::ostream & operator<< (std::ostream & os, const BoostX & b);
} 
} 
#endif /* ROOT_Math_GenVector_BoostX  */
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.