#include "Math/GenVector/EulerAngles.h"
#include <cmath>
#include "Math/GenVector/Cartesian3D.h"
#include "Math/GenVector/DisplacementVector3D.h"
#include "Math/GenVector/EulerAngles.h"
#include "Math/GenVector/Rotation3D.h"
#include "Math/GenVector/Quaternion.h"
#include "Math/GenVector/RotationX.h"
#include "Math/GenVector/RotationY.h"
#include "Math/GenVector/RotationZ.h"
#include "Math/GenVector/AxisAnglefwd.h"
namespace ROOT {
namespace Math {
void EulerAngles::Rectify()
{
   
   if ( fTheta < 0 || fTheta > Pi() ) {
      Scalar t = fTheta - std::floor( fTheta/(2*Pi()) ) * 2*Pi();
      if ( t <= Pi() ) {
         fTheta = t;
      } else {
         fTheta = 2*Pi() - t;
         fPhi =  fPhi + Pi();
         fPsi =  fPsi + Pi();
      }
   }
   
   if ( fPhi <= -Pi()|| fPhi > Pi() ) {
      fPhi = fPhi - std::floor( fPhi/(2*Pi()) +.5 ) * 2*Pi();
   }
   
   if ( fPsi <= -Pi()|| fPsi > Pi() ) {
      fPsi = fPsi - std::floor( fPsi/(2*Pi()) +.5 ) * 2*Pi();
   }
   
} 
EulerAngles EulerAngles::operator * (const Rotation3D  & r) const {
   
   return EulerAngles ( Rotation3D(*this) * r );
}
EulerAngles EulerAngles::operator * (const AxisAngle   & a) const {
   
   return EulerAngles ( Quaternion(*this) * Quaternion(a) );
}
EulerAngles EulerAngles::operator * (const EulerAngles & e) const {
   
   return EulerAngles ( Quaternion(*this) * Quaternion(e) );
}
EulerAngles EulerAngles::operator * (const Quaternion & q) const {
   
   return EulerAngles ( Quaternion(*this) * q );
}
EulerAngles EulerAngles::operator * (const RotationX  & r) const {
   
   return EulerAngles ( Quaternion(*this) * r );
}
EulerAngles EulerAngles::operator * (const RotationY  & r) const {
   
   return EulerAngles ( Quaternion(*this) * r );
}
EulerAngles EulerAngles::operator * (const RotationZ  & r) const {
   
   
   
   Scalar newPhi = fPhi + r.Angle();
   if ( newPhi <= -Pi()|| newPhi > Pi() ) {
      newPhi = newPhi - std::floor( newPhi/(2*Pi()) +.5 ) * 2*Pi();
   }
   return EulerAngles ( newPhi, fTheta, fPsi );
}
EulerAngles operator * ( RotationX const & r, EulerAngles const & e )  {
   return EulerAngles(r) * e;  
}
EulerAngles operator * ( RotationY const & r, EulerAngles const & e )  {
   return EulerAngles(r) * e;  
}
EulerAngles
operator * ( RotationZ const & r, EulerAngles const & e )  {
   return EulerAngles(r) * e;  
}
std::ostream & operator<< (std::ostream & os, const EulerAngles & e) {
   
   
   os << "\n{phi: " << e.Phi() << "   theta: " << e.Theta() 
   << "   psi: " << e.Psi() << "}\n"; 
   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.