// -*- C++ -*-
// ---------------------------------------------------------------------------
//
// This file is a part of the CLHEP - a Class Library for High Energy Physics.
// 
// ----------------------------------------------------------------------
//
// EulerAngles.icc - Inline methods for EulerAngles class.
//
// History:
//    9-Apr-1997  MF	Split off from original angles.hh.  Content-free.
//   26-Jan-1998  WEB	Fleshed out.
//   12-Mar-1998  WEB   Gave default constructor proper default values
//   13-Mar-1998  WEB   Simplified compare()
//   17-Jun-1998  WEB	Added namespace support
//   27-Jul-2000  MF	CLHEP version
//
// ----------------------------------------------------------------------

namespace CLHEP  {

inline HepEulerAngles::HepEulerAngles()
: phi_( 0.0 ), theta_( 0.0 ), psi_( 0.0 )
{}  // HepEulerAngles::HepEulerAngles()

inline HepEulerAngles::HepEulerAngles ( 
				double phi1, double ttheta, double psi1 )
				: phi_( phi1 ), theta_( ttheta ), psi_( psi1 )
{}  // HepEulerAngles::HepEulerAngles()

inline double HepEulerAngles::getPhi() const {
  return  phi_;
}  // HepEulerAngles::getPhi()

inline double HepEulerAngles::phi() const {
  return  phi_;
}  // HepEulerAngles::phi()

inline HepEulerAngles & HepEulerAngles::setPhi( double phi1 ) {
  phi_ = phi1;
  return  *this;
}  // HepEulerAngles::setPhi()

inline double HepEulerAngles::getTheta() const {
  return  theta_;
}  // HepEulerAngles::getTheta()

inline double HepEulerAngles::theta() const {
  return  theta_;
}  // HepEulerAngles::theta()

inline HepEulerAngles & HepEulerAngles::setTheta( double ttheta ) {
  theta_ = ttheta;
  return  *this;
}  // HepEulerAngles::setTheta()

inline double HepEulerAngles::getPsi() const {
  return  psi_;
}  // HepEulerAngles::getPsi()

inline double HepEulerAngles::psi() const {
  return  psi_;
}  // HepEulerAngles::psi()

inline HepEulerAngles & HepEulerAngles::setPsi( double psi1 ) {
  psi_ = psi1;
  return  *this;
}  // HepEulerAngles::setPsi()

inline HepEulerAngles & 
	HepEulerAngles::set( double phi1, double ttheta, double psi1 ) {
  phi_ = phi1, theta_ = ttheta, psi_ = psi1;
  return *this;
}  // HepEulerAngles::set()


inline int HepEulerAngles::compare( const HepEulerAngles & ea ) const {

  return  phi_   < ea.phi_    ?  -1
       :  phi_   > ea.phi_    ?  +1
       :  theta_ < ea.theta_  ?  -1
       :  theta_ > ea.theta_  ?  +1
       :  psi_   < ea.psi_    ?  -1
       :  psi_   > ea.psi_    ?  +1
       :                          0;

}  // HepEulerAngles::compare()


inline bool HepEulerAngles::operator==( const HepEulerAngles & ea ) const {
  return  ( compare( ea ) == 0 );
}  // HepEulerAngles::operator==()

inline bool HepEulerAngles::operator!=( const HepEulerAngles & ea ) const {
  return  ( compare( ea ) != 0 );
}  // HepEulerAngles::operator!=()

inline bool HepEulerAngles::operator<( const HepEulerAngles & ea ) const {
  return  ( compare( ea ) < 0 );
}  // HepEulerAngles::operator<()

inline bool HepEulerAngles::operator<=( const HepEulerAngles & ea ) const {
  return  ( compare( ea ) <= 0 );
}  // HepEulerAngles::operator<=()

inline bool HepEulerAngles::operator>( const HepEulerAngles & ea ) const {
  return  ( compare( ea ) > 0 );
}  // HepEulerAngles::operator>()

inline bool HepEulerAngles::operator>=( const HepEulerAngles & ea ) const {
  return  ( compare( ea ) >= 0 );
}  // HepEulerAngles::operator>=()

inline double HepEulerAngles::getTolerance() {
  return  tolerance;
}  // HepEulerAngles::getTolerance()

inline double HepEulerAngles::setTolerance( double tol ) {
  double oldTolerance( tolerance );
  tolerance = tol;
  return  oldTolerance;
}  // HepEulerAngles::setTolerance()

}  // namespace CLHEP
