#include "Math/GenVector/BoostX.h"
#include "Math/GenVector/LorentzVector.h"
#include "Math/GenVector/PxPyPzE4D.h"
#include "Math/GenVector/DisplacementVector3D.h"
#include "Math/GenVector/Cartesian3D.h"
#include "Math/GenVector/GenVector_exception.h"
#include <cmath>
#include <algorithm>
namespace ROOT {
namespace Math {
BoostX::BoostX() : fBeta(0.0), fGamma(1.0) {}
void BoostX::SetComponents (Scalar bx ) {
Scalar bp2 = bx*bx;
if (bp2 >= 1) {
GenVector_exception e (
"Beta Vector supplied to set BoostX represents speed >= c");
Throw(e);
return;
}
fBeta = bx;
fGamma = 1.0 / std::sqrt(1.0 - bp2);
}
void BoostX::GetComponents (Scalar& bx) const {
bx = fBeta;
}
DisplacementVector3D< Cartesian3D<BoostX::Scalar> >
BoostX::BetaVector() const {
return DisplacementVector3D< Cartesian3D<Scalar> > ( fBeta, 0.0, 0.0 );
}
void BoostX::GetLorentzRotation (Scalar r[]) const {
r[kLXX] = fGamma; r[kLXY] = 0.0; r[kLXZ] = 0.0; r[kLXT] = fGamma*fBeta;
r[kLYX] = 0.0; r[kLYY] = 1.0; r[kLYZ] = 0.0; r[kLYT] = 0.0;
r[kLZX] = 0.0; r[kLZY] = 0.0; r[kLZZ] = 1.0; r[kLZT] = 0.0;
r[kLTX] = fGamma*fBeta; r[kLTY] = 0.0; r[kLTZ] = 0.0; r[kLTT] = fGamma;
}
void BoostX::Rectify() {
if (fGamma <= 0) {
GenVector_exception e (
"Attempt to rectify a boost with non-positive gamma");
Throw(e);
return;
}
Scalar beta = fBeta;
if ( beta >= 1 ) {
beta /= ( beta * ( 1.0 + 1.0e-16 ) );
}
SetComponents ( beta );
}
LorentzVector< PxPyPzE4D<double> >
BoostX::operator() (const LorentzVector< PxPyPzE4D<double> > & v) const {
Scalar x = v.Px();
Scalar t = v.E();
return LorentzVector< PxPyPzE4D<double> >
( fGamma*x + fGamma*fBeta*t
, v.Py()
, v.Pz()
, fGamma*fBeta*x + fGamma*t );
}
void BoostX::Invert() {
fBeta = -fBeta;
}
BoostX BoostX::Inverse() const {
BoostX tmp(*this);
tmp.Invert();
return tmp;
}
std::ostream & operator<< (std::ostream & os, const BoostX & b) {
os << " BoostX( beta: " << b.Beta() << ", gamma: " << b.Gamma() << " ) ";
return os;
}
}
}
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.