17 #ifndef ROOT_Math_GenVector_Boost
18 #define ROOT_Math_GenVector_Boost 1
50 typedef double Scalar;
52 enum ELorentzRotationMatrixIndex {
53 kLXX = 0, kLXY = 1, kLXZ = 2, kLXT = 3
54 , kLYX = 4, kLYY = 5, kLYZ = 6, kLYT = 7
55 , kLZX = 8, kLZY = 9, kLZZ = 10, kLZT = 11
56 , kLTX = 12, kLTY = 13, kLTZ = 14, kLTT = 15
59 enum EBoostMatrixIndex {
60 kXX = 0, kXY = 1, kXZ = 2, kXT = 3
61 , kYY = 4, kYZ = 5, kYT = 6
71 Boost() { SetIdentity(); }
76 Boost(Scalar beta_x, Scalar beta_y, Scalar beta_z)
77 { SetComponents(beta_x, beta_y, beta_z); }
82 template <
class Avector>
84 Boost(
const Avector & beta) { SetComponents(beta); }
91 Boost(IT begin, IT end) { SetComponents(begin,end); }
96 Boost(Boost
const & b) {
104 explicit Boost( BoostX
const & bx ) {SetComponents(bx.BetaVector());}
105 explicit Boost( BoostY
const & by ) {SetComponents(by.BetaVector());}
106 explicit Boost( BoostZ
const & bz ) {SetComponents(bz.BetaVector());}
114 operator=(Boost
const & rhs ) {
115 for (
unsigned int i=0; i < 10; ++i) {
125 operator=( BoostX
const & bx ) {
return operator=(Boost(bx)); }
127 operator=( BoostY
const & by ) {
return operator=(Boost(by)); }
129 operator=( BoostZ
const & bz ) {
return operator=(Boost(bz)); }
143 SetComponents (Scalar beta_x, Scalar beta_y, Scalar beta_z);
149 GetComponents (Scalar& beta_x, Scalar& beta_y, Scalar& beta_z)
const;
154 template <
class Avector>
156 SetComponents (
const Avector & beta)
157 { SetComponents(beta.x(), beta.y(), beta.z()); }
165 void SetComponents(IT begin, IT end) {
167 void SetComponents(IT begin, IT ) {
169 IT a = begin; IT b = ++begin; IT c = ++begin;
170 assert (++begin==end);
171 SetComponents (*a, *b, *c);
180 void GetComponents(IT begin, IT end)
const {
182 void GetComponents(IT begin, IT )
const {
184 IT a = begin; IT b = ++begin; IT c = ++begin;
185 assert (++begin==end);
186 GetComponents (*a, *b, *c);
194 void GetComponents(IT begin )
const {
196 GetComponents (bx,by,bz);
205 typedef DisplacementVector3D<Cartesian3D<double>, DefaultCoordinateSystemTag > XYZVector;
206 XYZVector BetaVector()
const;
215 GetLorentzRotation (Scalar r[])
const;
223 LorentzVector< ROOT::Math::PxPyPzE4D<double> >
224 operator() (
const LorentzVector< ROOT::Math::PxPyPzE4D<double> > & v)
const;
230 template <
class CoordSystem>
231 LorentzVector<CoordSystem>
232 operator() (
const LorentzVector<CoordSystem> & v)
const {
233 LorentzVector< PxPyPzE4D<double> > xyzt(v);
234 LorentzVector< PxPyPzE4D<double> > r_xyzt = operator()(xyzt);
235 return LorentzVector<CoordSystem> ( r_xyzt );
243 template <
class Foreign4Vector>
245 operator() (
const Foreign4Vector & v)
const {
246 LorentzVector< PxPyPzE4D<double> > xyzt(v);
247 LorentzVector< PxPyPzE4D<double> > r_xyzt = operator()(xyzt);
248 return Foreign4Vector ( r_xyzt.X(), r_xyzt.Y(), r_xyzt.Z(), r_xyzt.T() );
254 template <
class A4Vector>
256 A4Vector operator* (
const A4Vector & v)
const
258 return operator()(v);
269 Boost Inverse()
const;
274 bool operator == (
const Boost & rhs)
const {
275 for (
unsigned int i=0; i < 10; ++i) {
276 if( fM[i] != rhs.fM[i] )
return false;
280 bool operator != (
const Boost & rhs)
const {
281 return ! operator==(rhs);
301 std::ostream & operator<< (std::ostream & os,
const Boost & b);