67 void Boost::SetIdentity() {
69 fM[kXX] = 1.0; fM[kXY] = 0.0; fM[kXZ] = 0.0; fM[kXT] = 0.0;
70 fM[kYY] = 1.0; fM[kYZ] = 0.0; fM[kYT] = 0.0;
71 fM[kZZ] = 1.0; fM[kZT] = 0.0;
76 void Boost::SetComponents (Scalar bx, Scalar by, Scalar bz) {
78 Scalar bp2 = bx*bx + by*by + bz*bz;
81 "Beta Vector supplied to set Boost represents speed >= c");
85 Scalar gamma = 1.0 / std::sqrt(1.0 - bp2);
86 Scalar bgamma = gamma * gamma / (1.0 + gamma);
87 fM[kXX] = 1.0 + bgamma * bx * bx;
88 fM[kYY] = 1.0 + bgamma * by * by;
89 fM[kZZ] = 1.0 + bgamma * bz * bz;
90 fM[kXY] = bgamma * bx * by;
91 fM[kXZ] = bgamma * bx * bz;
92 fM[kYZ] = bgamma * by * bz;
99 void Boost::GetComponents (Scalar& bx, Scalar& by, Scalar& bz)
const {
101 Scalar gaminv = 1.0/fM[kTT];
107 DisplacementVector3D< Cartesian3D<Boost::Scalar> >
108 Boost::BetaVector()
const {
110 Scalar gaminv = 1.0/fM[kTT];
111 return DisplacementVector3D< Cartesian3D<Scalar> >
112 ( fM[kXT]*gaminv, fM[kYT]*gaminv, fM[kZT]*gaminv );
115 void Boost::GetLorentzRotation (Scalar r[])
const {
117 r[kLXX] = fM[kXX]; r[kLXY] = fM[kXY]; r[kLXZ] = fM[kXZ]; r[kLXT] = fM[kXT];
118 r[kLYX] = fM[kXY]; r[kLYY] = fM[kYY]; r[kLYZ] = fM[kYZ]; r[kLYT] = fM[kYT];
119 r[kLZX] = fM[kXZ]; r[kLZY] = fM[kYZ]; r[kLZZ] = fM[kZZ]; r[kLZT] = fM[kZT];
120 r[kLTX] = fM[kXT]; r[kLTY] = fM[kYT]; r[kLTZ] = fM[kZT]; r[kLTT] = fM[kTT];
123 void Boost::Rectify() {
131 "Attempt to rectify a boost with non-positive gamma");
134 DisplacementVector3D< Cartesian3D<Scalar> > beta ( fM[kXT], fM[kYT], fM[kZT] );
136 if ( beta.mag2() >= 1 ) {
137 beta /= ( beta.R() * ( 1.0 + 1.0e-16 ) );
139 SetComponents ( beta );
142 LorentzVector< PxPyPzE4D<double> >
143 Boost::operator() (
const LorentzVector< PxPyPzE4D<double> > & v)
const {
149 return LorentzVector< PxPyPzE4D<double> >
150 ( fM[kXX]*x + fM[kXY]*y + fM[kXZ]*z + fM[kXT]*t
151 , fM[kXY]*x + fM[kYY]*y + fM[kYZ]*z + fM[kYT]*t
152 , fM[kXZ]*x + fM[kYZ]*y + fM[kZZ]*z + fM[kZT]*t
153 , fM[kXT]*x + fM[kYT]*y + fM[kZT]*z + fM[kTT]*t );
156 void Boost::Invert() {
163 Boost Boost::Inverse()
const {
173 std::ostream & operator<< (std::ostream & os,
const Boost & b) {
177 b.GetLorentzRotation(m);
178 os <<
"\n" << m[0] <<
" " << m[1] <<
" " << m[2] <<
" " << m[3];
179 os <<
"\n" <<
"\t" <<
" " << m[5] <<
" " << m[6] <<
" " << m[7];
180 os <<
"\n" <<
"\t" <<
" " <<
"\t" <<
" " << m[10] <<
" " << m[11];
181 os <<
"\n" <<
"\t" <<
" " <<
"\t" <<
" " <<
"\t" <<
" " << m[15] <<
"\n";