ROOT logo
// @(#)root/mathcore:$Id: LorentzRotation.h 32632 2010-03-17 10:30:26Z moneta $
// Authors: W. Brown, M. Fischler, L. Moneta    2005  

 /**********************************************************************
  *                                                                    *
  * Copyright (c) 2005 ROOT MathLib Team                               *
  *                                                                    *
  *                                                                    *
  **********************************************************************/

// Header file for LorentzRotation
// 
// Created by: Mark Fischler  Mon Aug 8  2005
// 
// Last update: $Id: LorentzRotation.h 32632 2010-03-17 10:30:26Z moneta $
// 
#ifndef ROOT_Math_GenVector_LorentzRotation 
#define ROOT_Math_GenVector_LorentzRotation  1

#include "Math/GenVector/LorentzRotationfwd.h"

#include "Math/GenVector/LorentzVector.h"
#include "Math/GenVector/PxPyPzE4D.h"

#include "Math/GenVector/Rotation3Dfwd.h"
#include "Math/GenVector/AxisAnglefwd.h"
#include "Math/GenVector/EulerAnglesfwd.h"
#include "Math/GenVector/Quaternionfwd.h"
#include "Math/GenVector/RotationXfwd.h"
#include "Math/GenVector/RotationYfwd.h"
#include "Math/GenVector/RotationZfwd.h"
#include "Math/GenVector/Boost.h"
#include "Math/GenVector/BoostX.h"
#include "Math/GenVector/BoostY.h"
#include "Math/GenVector/BoostZ.h"

namespace ROOT {

  namespace Math {

//__________________________________________________________________________________________
  /**
     Lorentz transformation class with the (4D) transformation represented by
     a 4x4 orthosymplectic matrix.
     See also Boost, BoostX, BoostY and BoostZ for classes representing
     specialized Lorentz transformations.
     Also, the 3-D rotation classes can be considered to be special Lorentz
     transformations which do not mix space and time components.
     
     @ingroup GenVector
     
  */

class LorentzRotation {

public:

  typedef double Scalar;

  enum ELorentzRotationMatrixIndex {
      kXX =  0, kXY =  1, kXZ =  2, kXT =  3
    , kYX =  4, kYY =  5, kYZ =  6, kYT =  7
    , kZX =  8, kZY =  9, kZZ = 10, kZT = 11
    , kTX = 12, kTY = 13, kTZ = 14, kTT = 15
  };

  // ========== Constructors and Assignment =====================

  /**
      Default constructor (identity transformation)
  */
  LorentzRotation();

  /**
     Construct given a pair of pointers or iterators defining the
     beginning and end of an array of sixteen Scalars
   */
  template<class IT>
  LorentzRotation(IT begin, IT end) { SetComponents(begin,end); }

  // The compiler-generated and dtor are OK but we have implementwd the copy-ctor and 
  // assignment operators since we have a template assignment

  /**
     Copy constructor 
   */
   LorentzRotation( LorentzRotation const & r ) { 
      *this = r; 
   } 

  /**
     Construct from a pure boost 
  */
  explicit LorentzRotation( Boost  const & b  ) {  b.GetLorentzRotation( fM+0 ); } 
  explicit LorentzRotation( BoostX const & bx ) { bx.GetLorentzRotation( fM+0 ); }
  explicit LorentzRotation( BoostY const & by ) { by.GetLorentzRotation( fM+0 ); }
  explicit LorentzRotation( BoostZ const & bz ) { bz.GetLorentzRotation( fM+0 ); }

  /**
     Construct from a 3-D rotation (no space-time mixing)
  */
  explicit LorentzRotation( Rotation3D  const & r ); 
  explicit LorentzRotation( AxisAngle   const & a ); 
  explicit LorentzRotation( EulerAngles const & e ); 
  explicit LorentzRotation( Quaternion  const & q ); 
  explicit LorentzRotation( RotationX   const & r ); 
  explicit LorentzRotation( RotationY   const & r ); 
  explicit LorentzRotation( RotationZ   const & r ); 

  /**
     Construct from a linear algebra matrix of size at least 4x4,
     which must support operator()(i,j) to obtain elements (0,3) thru (3,3).
     Precondition:  The matrix is assumed to be orthosymplectic.  NO checking
     or re-adjusting is performed.
     Note:  (0,0) refers to the XX component; (3,3) refers to the TT component.
  */
  template<class ForeignMatrix>
  explicit LorentzRotation(const ForeignMatrix & m) { SetComponents(m); }

  /**
     Construct from four orthosymplectic vectors (which must have methods
     x(), y(), z() and t()) which will be used as the columns of the Lorentz
     rotation matrix.  The orthosymplectic conditions will be checked, and 
     values adjusted so that the result will always be a good Lorentz rotation 
     matrix.
  */
  template<class Foreign4Vector>
  LorentzRotation(const Foreign4Vector& v1,
                  const Foreign4Vector& v2,
                  const Foreign4Vector& v3,
                  const Foreign4Vector& v4 ) { SetComponents(v1, v2, v3, v4); }
  

  /**
     Raw constructor from sixteen Scalar components (without any checking)
  */
  LorentzRotation(Scalar  xx, Scalar  xy, Scalar  xz, Scalar xt,
                  Scalar  yx, Scalar  yy, Scalar  yz, Scalar yt,
                  Scalar  zx, Scalar  zy, Scalar  zz, Scalar zt,
                  Scalar  tx, Scalar  ty, Scalar  tz, Scalar tt)
 {
    SetComponents (xx, xy, xz, xt, 
    		   yx, yy, yz, yt, 
                   zx, zy, zz, zt,
		   tx, ty, tz, tt);
 }

  /** 
      Assign from another LorentzRotation
  */
   LorentzRotation & 
  operator=( LorentzRotation  const & rhs ) { 
      SetComponents( rhs.fM[0],  rhs.fM[1],  rhs.fM[2],  rhs.fM[3],  
                     rhs.fM[4],  rhs.fM[5],  rhs.fM[6],  rhs.fM[7],
                     rhs.fM[8],  rhs.fM[9],  rhs.fM[10], rhs.fM[11], 
                     rhs.fM[12], rhs.fM[13], rhs.fM[14], rhs.fM[15] );
      return *this; 
   }

  /**
     Assign from a pure boost 
  */
  LorentzRotation &
  operator=( Boost  const & b ) { return operator=(LorentzRotation(b)); }
  LorentzRotation &
  operator=( BoostX const & b ) { return operator=(LorentzRotation(b)); }
  LorentzRotation &
  operator=( BoostY const & b ) { return operator=(LorentzRotation(b)); }
  LorentzRotation &
  operator=( BoostZ const & b ) { return operator=(LorentzRotation(b)); }

  /**
     Assign from a 3-D rotation 
  */
  LorentzRotation &
  operator=( Rotation3D  const & r ) { return operator=(LorentzRotation(r)); }
  LorentzRotation &
  operator=( AxisAngle   const & a ) { return operator=(LorentzRotation(a)); }
  LorentzRotation &
  operator=( EulerAngles const & e ) { return operator=(LorentzRotation(e)); }
  LorentzRotation &
  operator=( Quaternion  const & q ) { return operator=(LorentzRotation(q)); }
  LorentzRotation &
  operator=( RotationZ   const & r ) { return operator=(LorentzRotation(r)); }
  LorentzRotation &
  operator=( RotationY   const & r ) { return operator=(LorentzRotation(r)); }
  LorentzRotation &
  operator=( RotationX   const & r ) { return operator=(LorentzRotation(r)); }

  /**
     Assign from a linear algebra matrix of size at least 4x4,
     which must support operator()(i,j) to obtain elements (0,3) thru (3,3).
     Precondition:  The matrix is assumed to be orthosymplectic.  NO checking
     or re-adjusting is performed.
  */
  template<class ForeignMatrix>
  LorentzRotation &
  operator=(const ForeignMatrix & m) { 
     SetComponents( m(0,0), m(0,1), m(0,2), m(0,3),
                    m(1,0), m(1,1), m(1,2), m(1,3),
                    m(2,0), m(2,1), m(2,2), m(2,3), 
                    m(3,0), m(3,1), m(3,2), m(3,3) );
     return *this; 
  }

  /**
     Re-adjust components to eliminate small deviations from a perfect
     orthosyplectic matrix.
   */
  void Rectify();

  // ======== Components ==============

  /**
     Set components from four orthosymplectic vectors (which must have methods
     x(), y(), z(), and t()) which will be used as the columns of the 
     Lorentz rotation matrix.  The values will be adjusted
     so that the result will always be a good Lorentz rotation matrix.
  */
  template<class Foreign4Vector>
  void
  SetComponents (const Foreign4Vector& v1,
                 const Foreign4Vector& v2,
                 const Foreign4Vector& v3,
                 const Foreign4Vector& v4 ) {
    fM[kXX]=v1.x();  fM[kXY]=v2.x();  fM[kXZ]=v3.x();  fM[kXT]=v4.x();
    fM[kYX]=v1.y();  fM[kYY]=v2.y();  fM[kYZ]=v3.y();  fM[kYT]=v4.y();
    fM[kZX]=v1.z();  fM[kZY]=v2.z();  fM[kZZ]=v3.z();  fM[kZT]=v4.z();
    fM[kTX]=v1.t();  fM[kTY]=v2.t();  fM[kTZ]=v3.t();  fM[kTT]=v4.t();
    Rectify();
  }

  /**
     Get components into four 4-vectors which will be the (orthosymplectic) 
     columns of the rotation matrix.  (The 4-vector class must have a 
     constructor from 4 Scalars used as x, y, z, t) 
  */
  template<class Foreign4Vector>
  void
  GetComponents ( Foreign4Vector& v1,
                  Foreign4Vector& v2,
                  Foreign4Vector& v3,
                  Foreign4Vector& v4 ) const {
    v1 = Foreign4Vector ( fM[kXX], fM[kYX], fM[kZX], fM[kTX] );
    v2 = Foreign4Vector ( fM[kXY], fM[kYY], fM[kZY], fM[kTY] );
    v3 = Foreign4Vector ( fM[kXZ], fM[kYZ], fM[kZZ], fM[kTZ] );
    v4 = Foreign4Vector ( fM[kXT], fM[kYT], fM[kZT], fM[kTT] );
  }

  /**
     Set the 16 matrix components given an iterator to the start of
     the desired data, and another to the end (16 past start).
   */
  template<class IT>
  void SetComponents(IT begin, IT end) {
     for (int i = 0; i <16; ++i) { 
        fM[i] = *begin;
        ++begin; 
     }
     assert (end==begin);
  }

  /**
     Get the 16 matrix components into data specified by an iterator begin
     and another to the end of the desired data (16 past start).
   */
  template<class IT>
  void GetComponents(IT begin, IT end) const {
     for (int i = 0; i <16; ++i) { 
        *begin = fM[i];
        ++begin;  
     }
     assert (end==begin);
  }

  /**
     Get the 16 matrix components into data specified by an iterator begin
   */
  template<class IT>
  void GetComponents(IT begin) const {
    std::copy ( fM+0, fM+16, begin );
  }

  /**
     Set components from a linear algebra matrix of size at least 4x4,
     which must support operator()(i,j) to obtain elements (0,0) thru (3,3).
     Precondition:  The matrix is assumed to be orthosymplectic.  NO checking
     or re-adjusting is performed.
  */
  template<class ForeignMatrix>
  void
  SetRotationMatrix (const ForeignMatrix & m) {
    fM[kXX]=m(0,0);  fM[kXY]=m(0,1);  fM[kXZ]=m(0,2);  fM[kXT]=m(0,3);
    fM[kYX]=m(1,0);  fM[kYY]=m(1,1);  fM[kYZ]=m(1,2);  fM[kYT]=m(1,3);
    fM[kZX]=m(2,0);  fM[kZY]=m(2,1);  fM[kZZ]=m(2,2);  fM[kZT]=m(2,3);
    fM[kTX]=m(3,0);  fM[kTY]=m(3,1);  fM[kTZ]=m(3,2);  fM[kTT]=m(3,3);
  }

  /**
     Get components into a linear algebra matrix of size at least 4x4,
     which must support operator()(i,j) for write access to elements
     (0,0) thru (3,3).
  */
  template<class ForeignMatrix>
  void
  GetRotationMatrix (ForeignMatrix & m) const {
    m(0,0)=fM[kXX];  m(0,1)=fM[kXY];  m(0,2)=fM[kXZ]; m(0,3)=fM[kXT];
    m(1,0)=fM[kYX];  m(1,1)=fM[kYY];  m(1,2)=fM[kYZ]; m(1,3)=fM[kYT];
    m(2,0)=fM[kZX];  m(2,1)=fM[kZY];  m(2,2)=fM[kZZ]; m(2,3)=fM[kZT];
    m(3,0)=fM[kTX];  m(3,1)=fM[kTY];  m(3,2)=fM[kTZ]; m(3,3)=fM[kTT];
  }

  /**
     Set the components from sixteen scalars -- UNCHECKED for orthosymplectic
   */
  void
  SetComponents (Scalar  xx, Scalar  xy, Scalar  xz, Scalar  xt,
                 Scalar  yx, Scalar  yy, Scalar  yz, Scalar  yt,
                 Scalar  zx, Scalar  zy, Scalar  zz, Scalar  zt,
                 Scalar  tx, Scalar  ty, Scalar  tz, Scalar  tt) {
                 fM[kXX]=xx;  fM[kXY]=xy;  fM[kXZ]=xz;  fM[kXT]=xt;
                 fM[kYX]=yx;  fM[kYY]=yy;  fM[kYZ]=yz;  fM[kYT]=yt;
                 fM[kZX]=zx;  fM[kZY]=zy;  fM[kZZ]=zz;  fM[kZT]=zt;
                 fM[kTX]=tx;  fM[kTY]=ty;  fM[kTZ]=tz;  fM[kTT]=tt;
  }

  /**
     Get the sixteen components into sixteen scalars
   */
  void
  GetComponents (Scalar &xx, Scalar &xy, Scalar &xz, Scalar &xt,
                 Scalar &yx, Scalar &yy, Scalar &yz, Scalar &yt,
                 Scalar &zx, Scalar &zy, Scalar &zz, Scalar &zt,
                 Scalar &tx, Scalar &ty, Scalar &tz, Scalar &tt) const {
                 xx=fM[kXX];  xy=fM[kXY];  xz=fM[kXZ];  xt=fM[kXT];
                 yx=fM[kYX];  yy=fM[kYY];  yz=fM[kYZ];  yt=fM[kYT];
                 zx=fM[kZX];  zy=fM[kZY];  zz=fM[kZZ];  zt=fM[kZT];
                 tx=fM[kTX];  ty=fM[kTY];  tz=fM[kTZ];  tt=fM[kTT];
  }

  // =========== operations ==============

  /**
     Lorentz transformation operation on a Minkowski ('Cartesian') 
     LorentzVector
  */
  LorentzVector< ROOT::Math::PxPyPzE4D<double> >
  operator() (const LorentzVector< ROOT::Math::PxPyPzE4D<double> > & v) const { 
        Scalar x = v.Px();
        Scalar y = v.Py();
        Scalar z = v.Pz();
        Scalar t = v.E();
        return LorentzVector< PxPyPzE4D<double> > 
           ( fM[kXX]*x + fM[kXY]*y + fM[kXZ]*z + fM[kXT]*t 
             , fM[kYX]*x + fM[kYY]*y + fM[kYZ]*z + fM[kYT]*t
             , fM[kZX]*x + fM[kZY]*y + fM[kZZ]*z + fM[kZT]*t
             , fM[kTX]*x + fM[kTY]*y + fM[kTZ]*z + fM[kTT]*t );        
  }
  
  /**
     Lorentz transformation operation on a LorentzVector in any 
     coordinate system
   */
  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 );
  }

  /**
     Lorentz transformation operation on an arbitrary 4-vector v.
     Preconditions:  v must implement methods x(), y(), z(), and t()
     and the arbitrary vector type must have a constructor taking (x,y,z,t)
   */
  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() );
  }

  /**
     Overload operator * for rotation on a vector
   */
  template <class A4Vector>
  inline
  A4Vector operator* (const A4Vector & v) const
  {
    return operator()(v);
  }

  /**
      Invert a Lorentz rotation in place
   */
  void Invert();

  /**
      Return inverse of  a rotation
   */
  LorentzRotation Inverse() const;

  // ========= Multi-Rotation Operations ===============

  /**
     Multiply (combine) this Lorentz rotation by another LorentzRotation
   */
  LorentzRotation operator * (const LorentzRotation & r) const;

  //#ifdef TODO_LATER
  /**
     Multiply (combine) this Lorentz rotation by a pure Lorentz boost
   */
  //TODO: implement directly in a more efficient way. Now are implemented 
  // going through another LorentzRotation
  LorentzRotation operator * (const Boost  & b) const  { LorentzRotation tmp(b); return (*this)*tmp; }
  LorentzRotation operator * (const BoostX & b) const  { LorentzRotation tmp(b); return (*this)*tmp; } 
  LorentzRotation operator * (const BoostY & b) const  { LorentzRotation tmp(b); return (*this)*tmp; }
  LorentzRotation operator * (const BoostZ & b) const  { LorentzRotation tmp(b); return (*this)*tmp; }

  /**
     Multiply (combine) this Lorentz rotation by a 3-D Rotation
   */
  LorentzRotation operator * (const Rotation3D  & r) const { LorentzRotation tmp(r); return (*this)*tmp; }
  LorentzRotation operator * (const AxisAngle   & a) const { LorentzRotation tmp(a); return (*this)*tmp; }
  LorentzRotation operator * (const EulerAngles & e) const { LorentzRotation tmp(e); return (*this)*tmp; }
  LorentzRotation operator * (const Quaternion  & q) const { LorentzRotation tmp(q); return (*this)*tmp; }
  LorentzRotation operator * (const RotationX  & rx) const { LorentzRotation tmp(rx); return (*this)*tmp; }
  LorentzRotation operator * (const RotationY  & ry) const { LorentzRotation tmp(ry); return (*this)*tmp; }
  LorentzRotation operator * (const RotationZ  & rz) const { LorentzRotation tmp(rz); return (*this)*tmp; }
  //#endif

  /**
     Post-Multiply (on right) by another LorentzRotation, Boost, or 
     rotation :  T = T*R
   */
  template <class R>
  LorentzRotation & operator *= (const R & r) { return *this = (*this)*r; }

  /**
     Equality/inequality operators
   */
  bool operator == (const LorentzRotation & rhs) const {
    for (unsigned int i=0; i < 16; ++i) {
      if( fM[i] != rhs.fM[i] )  return false;
    }
    return true;
  }
  bool operator != (const LorentzRotation & rhs) const {
    return ! operator==(rhs);
  }

private:

  Scalar fM[16];

};  // LorentzRotation

// ============ Class LorentzRotation ends here ============


/**
   Stream Output and Input
 */
  // TODO - I/O should be put in the manipulator form 

std::ostream & operator<< (std::ostream & os, const LorentzRotation & r);

// ============================================ vetted to here  ============

#ifdef NOTYET
/**
   Distance between two Lorentz rotations
 */
template <class R>
inline
typename Rotation3D::Scalar
Distance ( const Rotation3D& r1, const R & r2) {return gv_detail::dist(r1,r2);}
#endif

} //namespace Math
} //namespace ROOT







#endif /* ROOT_Math_GenVector_LorentzRotation  */
 LorentzRotation.h:1
 LorentzRotation.h:2
 LorentzRotation.h:3
 LorentzRotation.h:4
 LorentzRotation.h:5
 LorentzRotation.h:6
 LorentzRotation.h:7
 LorentzRotation.h:8
 LorentzRotation.h:9
 LorentzRotation.h:10
 LorentzRotation.h:11
 LorentzRotation.h:12
 LorentzRotation.h:13
 LorentzRotation.h:14
 LorentzRotation.h:15
 LorentzRotation.h:16
 LorentzRotation.h:17
 LorentzRotation.h:18
 LorentzRotation.h:19
 LorentzRotation.h:20
 LorentzRotation.h:21
 LorentzRotation.h:22
 LorentzRotation.h:23
 LorentzRotation.h:24
 LorentzRotation.h:25
 LorentzRotation.h:26
 LorentzRotation.h:27
 LorentzRotation.h:28
 LorentzRotation.h:29
 LorentzRotation.h:30
 LorentzRotation.h:31
 LorentzRotation.h:32
 LorentzRotation.h:33
 LorentzRotation.h:34
 LorentzRotation.h:35
 LorentzRotation.h:36
 LorentzRotation.h:37
 LorentzRotation.h:38
 LorentzRotation.h:39
 LorentzRotation.h:40
 LorentzRotation.h:41
 LorentzRotation.h:42
 LorentzRotation.h:43
 LorentzRotation.h:44
 LorentzRotation.h:45
 LorentzRotation.h:46
 LorentzRotation.h:47
 LorentzRotation.h:48
 LorentzRotation.h:49
 LorentzRotation.h:50
 LorentzRotation.h:51
 LorentzRotation.h:52
 LorentzRotation.h:53
 LorentzRotation.h:54
 LorentzRotation.h:55
 LorentzRotation.h:56
 LorentzRotation.h:57
 LorentzRotation.h:58
 LorentzRotation.h:59
 LorentzRotation.h:60
 LorentzRotation.h:61
 LorentzRotation.h:62
 LorentzRotation.h:63
 LorentzRotation.h:64
 LorentzRotation.h:65
 LorentzRotation.h:66
 LorentzRotation.h:67
 LorentzRotation.h:68
 LorentzRotation.h:69
 LorentzRotation.h:70
 LorentzRotation.h:71
 LorentzRotation.h:72
 LorentzRotation.h:73
 LorentzRotation.h:74
 LorentzRotation.h:75
 LorentzRotation.h:76
 LorentzRotation.h:77
 LorentzRotation.h:78
 LorentzRotation.h:79
 LorentzRotation.h:80
 LorentzRotation.h:81
 LorentzRotation.h:82
 LorentzRotation.h:83
 LorentzRotation.h:84
 LorentzRotation.h:85
 LorentzRotation.h:86
 LorentzRotation.h:87
 LorentzRotation.h:88
 LorentzRotation.h:89
 LorentzRotation.h:90
 LorentzRotation.h:91
 LorentzRotation.h:92
 LorentzRotation.h:93
 LorentzRotation.h:94
 LorentzRotation.h:95
 LorentzRotation.h:96
 LorentzRotation.h:97
 LorentzRotation.h:98
 LorentzRotation.h:99
 LorentzRotation.h:100
 LorentzRotation.h:101
 LorentzRotation.h:102
 LorentzRotation.h:103
 LorentzRotation.h:104
 LorentzRotation.h:105
 LorentzRotation.h:106
 LorentzRotation.h:107
 LorentzRotation.h:108
 LorentzRotation.h:109
 LorentzRotation.h:110
 LorentzRotation.h:111
 LorentzRotation.h:112
 LorentzRotation.h:113
 LorentzRotation.h:114
 LorentzRotation.h:115
 LorentzRotation.h:116
 LorentzRotation.h:117
 LorentzRotation.h:118
 LorentzRotation.h:119
 LorentzRotation.h:120
 LorentzRotation.h:121
 LorentzRotation.h:122
 LorentzRotation.h:123
 LorentzRotation.h:124
 LorentzRotation.h:125
 LorentzRotation.h:126
 LorentzRotation.h:127
 LorentzRotation.h:128
 LorentzRotation.h:129
 LorentzRotation.h:130
 LorentzRotation.h:131
 LorentzRotation.h:132
 LorentzRotation.h:133
 LorentzRotation.h:134
 LorentzRotation.h:135
 LorentzRotation.h:136
 LorentzRotation.h:137
 LorentzRotation.h:138
 LorentzRotation.h:139
 LorentzRotation.h:140
 LorentzRotation.h:141
 LorentzRotation.h:142
 LorentzRotation.h:143
 LorentzRotation.h:144
 LorentzRotation.h:145
 LorentzRotation.h:146
 LorentzRotation.h:147
 LorentzRotation.h:148
 LorentzRotation.h:149
 LorentzRotation.h:150
 LorentzRotation.h:151
 LorentzRotation.h:152
 LorentzRotation.h:153
 LorentzRotation.h:154
 LorentzRotation.h:155
 LorentzRotation.h:156
 LorentzRotation.h:157
 LorentzRotation.h:158
 LorentzRotation.h:159
 LorentzRotation.h:160
 LorentzRotation.h:161
 LorentzRotation.h:162
 LorentzRotation.h:163
 LorentzRotation.h:164
 LorentzRotation.h:165
 LorentzRotation.h:166
 LorentzRotation.h:167
 LorentzRotation.h:168
 LorentzRotation.h:169
 LorentzRotation.h:170
 LorentzRotation.h:171
 LorentzRotation.h:172
 LorentzRotation.h:173
 LorentzRotation.h:174
 LorentzRotation.h:175
 LorentzRotation.h:176
 LorentzRotation.h:177
 LorentzRotation.h:178
 LorentzRotation.h:179
 LorentzRotation.h:180
 LorentzRotation.h:181
 LorentzRotation.h:182
 LorentzRotation.h:183
 LorentzRotation.h:184
 LorentzRotation.h:185
 LorentzRotation.h:186
 LorentzRotation.h:187
 LorentzRotation.h:188
 LorentzRotation.h:189
 LorentzRotation.h:190
 LorentzRotation.h:191
 LorentzRotation.h:192
 LorentzRotation.h:193
 LorentzRotation.h:194
 LorentzRotation.h:195
 LorentzRotation.h:196
 LorentzRotation.h:197
 LorentzRotation.h:198
 LorentzRotation.h:199
 LorentzRotation.h:200
 LorentzRotation.h:201
 LorentzRotation.h:202
 LorentzRotation.h:203
 LorentzRotation.h:204
 LorentzRotation.h:205
 LorentzRotation.h:206
 LorentzRotation.h:207
 LorentzRotation.h:208
 LorentzRotation.h:209
 LorentzRotation.h:210
 LorentzRotation.h:211
 LorentzRotation.h:212
 LorentzRotation.h:213
 LorentzRotation.h:214
 LorentzRotation.h:215
 LorentzRotation.h:216
 LorentzRotation.h:217
 LorentzRotation.h:218
 LorentzRotation.h:219
 LorentzRotation.h:220
 LorentzRotation.h:221
 LorentzRotation.h:222
 LorentzRotation.h:223
 LorentzRotation.h:224
 LorentzRotation.h:225
 LorentzRotation.h:226
 LorentzRotation.h:227
 LorentzRotation.h:228
 LorentzRotation.h:229
 LorentzRotation.h:230
 LorentzRotation.h:231
 LorentzRotation.h:232
 LorentzRotation.h:233
 LorentzRotation.h:234
 LorentzRotation.h:235
 LorentzRotation.h:236
 LorentzRotation.h:237
 LorentzRotation.h:238
 LorentzRotation.h:239
 LorentzRotation.h:240
 LorentzRotation.h:241
 LorentzRotation.h:242
 LorentzRotation.h:243
 LorentzRotation.h:244
 LorentzRotation.h:245
 LorentzRotation.h:246
 LorentzRotation.h:247
 LorentzRotation.h:248
 LorentzRotation.h:249
 LorentzRotation.h:250
 LorentzRotation.h:251
 LorentzRotation.h:252
 LorentzRotation.h:253
 LorentzRotation.h:254
 LorentzRotation.h:255
 LorentzRotation.h:256
 LorentzRotation.h:257
 LorentzRotation.h:258
 LorentzRotation.h:259
 LorentzRotation.h:260
 LorentzRotation.h:261
 LorentzRotation.h:262
 LorentzRotation.h:263
 LorentzRotation.h:264
 LorentzRotation.h:265
 LorentzRotation.h:266
 LorentzRotation.h:267
 LorentzRotation.h:268
 LorentzRotation.h:269
 LorentzRotation.h:270
 LorentzRotation.h:271
 LorentzRotation.h:272
 LorentzRotation.h:273
 LorentzRotation.h:274
 LorentzRotation.h:275
 LorentzRotation.h:276
 LorentzRotation.h:277
 LorentzRotation.h:278
 LorentzRotation.h:279
 LorentzRotation.h:280
 LorentzRotation.h:281
 LorentzRotation.h:282
 LorentzRotation.h:283
 LorentzRotation.h:284
 LorentzRotation.h:285
 LorentzRotation.h:286
 LorentzRotation.h:287
 LorentzRotation.h:288
 LorentzRotation.h:289
 LorentzRotation.h:290
 LorentzRotation.h:291
 LorentzRotation.h:292
 LorentzRotation.h:293
 LorentzRotation.h:294
 LorentzRotation.h:295
 LorentzRotation.h:296
 LorentzRotation.h:297
 LorentzRotation.h:298
 LorentzRotation.h:299
 LorentzRotation.h:300
 LorentzRotation.h:301
 LorentzRotation.h:302
 LorentzRotation.h:303
 LorentzRotation.h:304
 LorentzRotation.h:305
 LorentzRotation.h:306
 LorentzRotation.h:307
 LorentzRotation.h:308
 LorentzRotation.h:309
 LorentzRotation.h:310
 LorentzRotation.h:311
 LorentzRotation.h:312
 LorentzRotation.h:313
 LorentzRotation.h:314
 LorentzRotation.h:315
 LorentzRotation.h:316
 LorentzRotation.h:317
 LorentzRotation.h:318
 LorentzRotation.h:319
 LorentzRotation.h:320
 LorentzRotation.h:321
 LorentzRotation.h:322
 LorentzRotation.h:323
 LorentzRotation.h:324
 LorentzRotation.h:325
 LorentzRotation.h:326
 LorentzRotation.h:327
 LorentzRotation.h:328
 LorentzRotation.h:329
 LorentzRotation.h:330
 LorentzRotation.h:331
 LorentzRotation.h:332
 LorentzRotation.h:333
 LorentzRotation.h:334
 LorentzRotation.h:335
 LorentzRotation.h:336
 LorentzRotation.h:337
 LorentzRotation.h:338
 LorentzRotation.h:339
 LorentzRotation.h:340
 LorentzRotation.h:341
 LorentzRotation.h:342
 LorentzRotation.h:343
 LorentzRotation.h:344
 LorentzRotation.h:345
 LorentzRotation.h:346
 LorentzRotation.h:347
 LorentzRotation.h:348
 LorentzRotation.h:349
 LorentzRotation.h:350
 LorentzRotation.h:351
 LorentzRotation.h:352
 LorentzRotation.h:353
 LorentzRotation.h:354
 LorentzRotation.h:355
 LorentzRotation.h:356
 LorentzRotation.h:357
 LorentzRotation.h:358
 LorentzRotation.h:359
 LorentzRotation.h:360
 LorentzRotation.h:361
 LorentzRotation.h:362
 LorentzRotation.h:363
 LorentzRotation.h:364
 LorentzRotation.h:365
 LorentzRotation.h:366
 LorentzRotation.h:367
 LorentzRotation.h:368
 LorentzRotation.h:369
 LorentzRotation.h:370
 LorentzRotation.h:371
 LorentzRotation.h:372
 LorentzRotation.h:373
 LorentzRotation.h:374
 LorentzRotation.h:375
 LorentzRotation.h:376
 LorentzRotation.h:377
 LorentzRotation.h:378
 LorentzRotation.h:379
 LorentzRotation.h:380
 LorentzRotation.h:381
 LorentzRotation.h:382
 LorentzRotation.h:383
 LorentzRotation.h:384
 LorentzRotation.h:385
 LorentzRotation.h:386
 LorentzRotation.h:387
 LorentzRotation.h:388
 LorentzRotation.h:389
 LorentzRotation.h:390
 LorentzRotation.h:391
 LorentzRotation.h:392
 LorentzRotation.h:393
 LorentzRotation.h:394
 LorentzRotation.h:395
 LorentzRotation.h:396
 LorentzRotation.h:397
 LorentzRotation.h:398
 LorentzRotation.h:399
 LorentzRotation.h:400
 LorentzRotation.h:401
 LorentzRotation.h:402
 LorentzRotation.h:403
 LorentzRotation.h:404
 LorentzRotation.h:405
 LorentzRotation.h:406
 LorentzRotation.h:407
 LorentzRotation.h:408
 LorentzRotation.h:409
 LorentzRotation.h:410
 LorentzRotation.h:411
 LorentzRotation.h:412
 LorentzRotation.h:413
 LorentzRotation.h:414
 LorentzRotation.h:415
 LorentzRotation.h:416
 LorentzRotation.h:417
 LorentzRotation.h:418
 LorentzRotation.h:419
 LorentzRotation.h:420
 LorentzRotation.h:421
 LorentzRotation.h:422
 LorentzRotation.h:423
 LorentzRotation.h:424
 LorentzRotation.h:425
 LorentzRotation.h:426
 LorentzRotation.h:427
 LorentzRotation.h:428
 LorentzRotation.h:429
 LorentzRotation.h:430
 LorentzRotation.h:431
 LorentzRotation.h:432
 LorentzRotation.h:433
 LorentzRotation.h:434
 LorentzRotation.h:435
 LorentzRotation.h:436
 LorentzRotation.h:437
 LorentzRotation.h:438
 LorentzRotation.h:439
 LorentzRotation.h:440
 LorentzRotation.h:441
 LorentzRotation.h:442
 LorentzRotation.h:443
 LorentzRotation.h:444
 LorentzRotation.h:445
 LorentzRotation.h:446
 LorentzRotation.h:447
 LorentzRotation.h:448
 LorentzRotation.h:449
 LorentzRotation.h:450
 LorentzRotation.h:451
 LorentzRotation.h:452
 LorentzRotation.h:453
 LorentzRotation.h:454
 LorentzRotation.h:455
 LorentzRotation.h:456
 LorentzRotation.h:457
 LorentzRotation.h:458
 LorentzRotation.h:459
 LorentzRotation.h:460
 LorentzRotation.h:461
 LorentzRotation.h:462
 LorentzRotation.h:463
 LorentzRotation.h:464
 LorentzRotation.h:465
 LorentzRotation.h:466
 LorentzRotation.h:467
 LorentzRotation.h:468
 LorentzRotation.h:469
 LorentzRotation.h:470
 LorentzRotation.h:471
 LorentzRotation.h:472
 LorentzRotation.h:473
 LorentzRotation.h:474
 LorentzRotation.h:475
 LorentzRotation.h:476
 LorentzRotation.h:477
 LorentzRotation.h:478
 LorentzRotation.h:479
 LorentzRotation.h:480
 LorentzRotation.h:481
 LorentzRotation.h:482
 LorentzRotation.h:483
 LorentzRotation.h:484
 LorentzRotation.h:485
 LorentzRotation.h:486
 LorentzRotation.h:487
 LorentzRotation.h:488
 LorentzRotation.h:489
 LorentzRotation.h:490
 LorentzRotation.h:491
 LorentzRotation.h:492