| 1 | #ifndef HEP_EULERANGLES_H | 
|---|
| 2 | #define HEP_EULERANGLES_H | 
|---|
| 3 |  | 
|---|
| 4 | // ---------------------------------------------------------------------- | 
|---|
| 5 | // | 
|---|
| 6 | //  EulerAngles.h       EulerAngles class -- | 
|---|
| 7 | //                      Support class for PhysicsVectors classes | 
|---|
| 8 | // | 
|---|
| 9 | // History: | 
|---|
| 10 | //   09-Jan-1998  WEB  FixedTypes is now found in ZMutility | 
|---|
| 11 | //   12-Jan-1998  WEB  PI is now found in ZMutility | 
|---|
| 12 | //   15-Jun-1998  WEB  Added namespace support | 
|---|
| 13 | //   02-May-2000  WEB  No global using | 
|---|
| 14 | //   26-Jul-2000  MF   CLHEP version | 
|---|
| 15 | // | 
|---|
| 16 | // ---------------------------------------------------------------------- | 
|---|
| 17 |  | 
|---|
| 18 | #include <iostream> | 
|---|
| 19 | #include "CLHEP/Vector/defs.h" | 
|---|
| 20 |  | 
|---|
| 21 | namespace CLHEP { | 
|---|
| 22 |  | 
|---|
| 23 | // Declarations of classes and global methods | 
|---|
| 24 | class HepEulerAngles; | 
|---|
| 25 | std::ostream & operator<<(std::ostream & os, const HepEulerAngles & aa); | 
|---|
| 26 | std::istream & operator>>(std::istream & is,       HepEulerAngles & aa); | 
|---|
| 27 |  | 
|---|
| 28 | /** | 
|---|
| 29 | * @author | 
|---|
| 30 | * @ingroup vector | 
|---|
| 31 | */ | 
|---|
| 32 | class HepEulerAngles { | 
|---|
| 33 |  | 
|---|
| 34 | protected: | 
|---|
| 35 | typedef HepEulerAngles EA;       // just an abbreviation | 
|---|
| 36 | static double tolerance;      // to determine relative nearness | 
|---|
| 37 |  | 
|---|
| 38 | public: | 
|---|
| 39 |  | 
|---|
| 40 | // ----------  Constructors: | 
|---|
| 41 | inline HepEulerAngles(); | 
|---|
| 42 | inline HepEulerAngles( double phi, double theta, double psi ); | 
|---|
| 43 |  | 
|---|
| 44 | // ----------  Destructor, copy constructor, assignment: | 
|---|
| 45 | // use C++ defaults | 
|---|
| 46 |  | 
|---|
| 47 | // ----------  Accessors: | 
|---|
| 48 |  | 
|---|
| 49 | public: | 
|---|
| 50 | inline  double  getPhi() const; | 
|---|
| 51 | inline  double  phi()    const; | 
|---|
| 52 | inline  EA &       setPhi( double phi ); | 
|---|
| 53 |  | 
|---|
| 54 | inline  double  getTheta() const; | 
|---|
| 55 | inline  double  theta()    const; | 
|---|
| 56 | inline  EA &       setTheta( double theta ); | 
|---|
| 57 |  | 
|---|
| 58 | inline  double  getPsi() const; | 
|---|
| 59 | inline  double  psi()    const; | 
|---|
| 60 | inline  EA &       setPsi( double psi ); | 
|---|
| 61 |  | 
|---|
| 62 | inline EA & set( double phi, double theta, double psi ); | 
|---|
| 63 |  | 
|---|
| 64 | // ----------  Operations: | 
|---|
| 65 |  | 
|---|
| 66 | //   comparisons: | 
|---|
| 67 | inline int  compare   ( const EA & ea ) const; | 
|---|
| 68 |  | 
|---|
| 69 | inline bool operator==( const EA & ea ) const; | 
|---|
| 70 | inline bool operator!=( const EA & ea ) const; | 
|---|
| 71 | inline bool operator< ( const EA & ea ) const; | 
|---|
| 72 | inline bool operator<=( const EA & ea ) const; | 
|---|
| 73 | inline bool operator> ( const EA & ea ) const; | 
|---|
| 74 | inline bool operator>=( const EA & ea ) const; | 
|---|
| 75 |  | 
|---|
| 76 | //   relative comparison: | 
|---|
| 77 | inline static double getTolerance(); | 
|---|
| 78 | inline static double setTolerance( double tol ); | 
|---|
| 79 |  | 
|---|
| 80 | bool isNear ( const EA & ea, double epsilon = tolerance ) const; | 
|---|
| 81 | double  howNear( const EA & ea ) const; | 
|---|
| 82 |  | 
|---|
| 83 | // ----------  I/O: | 
|---|
| 84 |  | 
|---|
| 85 | friend std::ostream & operator<<( std::ostream & os, const EA & ea ); | 
|---|
| 86 | friend std::istream & operator>>( std::istream & is,       EA & ea ); | 
|---|
| 87 |  | 
|---|
| 88 | // ---------- Helper methods: | 
|---|
| 89 |  | 
|---|
| 90 | protected: | 
|---|
| 91 | double distance( const HepEulerAngles & ex ) const; | 
|---|
| 92 |  | 
|---|
| 93 | // ----------  Data members: | 
|---|
| 94 | protected: | 
|---|
| 95 | double phi_; | 
|---|
| 96 | double theta_; | 
|---|
| 97 | double psi_; | 
|---|
| 98 |  | 
|---|
| 99 | };  // HepEulerAngles | 
|---|
| 100 |  | 
|---|
| 101 | }  // namespace CLHEP | 
|---|
| 102 |  | 
|---|
| 103 |  | 
|---|
| 104 | namespace zmpv { | 
|---|
| 105 |  | 
|---|
| 106 | typedef CLHEP::HepEulerAngles EulerAngles; | 
|---|
| 107 |  | 
|---|
| 108 | }  // end of namespace zmpv | 
|---|
| 109 |  | 
|---|
| 110 | #define EULERANGLES_ICC | 
|---|
| 111 | #include "CLHEP/Vector/EulerAngles.icc" | 
|---|
| 112 | #undef EULERANGLES_ICC | 
|---|
| 113 |  | 
|---|
| 114 | #ifdef ENABLE_BACKWARDS_COMPATIBILITY | 
|---|
| 115 | //  backwards compatibility will be enabled ONLY in CLHEP 1.9 | 
|---|
| 116 | using namespace CLHEP; | 
|---|
| 117 | #endif | 
|---|
| 118 |  | 
|---|
| 119 |  | 
|---|
| 120 | #endif // EULERANGLES_H | 
|---|