Geant4 Cross Reference |
1 // -*- C++ -*- 2 // --------------------------------------------------------------------------- 3 // 4 // This file is a part of the CLHEP - a Class Library for High Energy Physics. 5 // 6 // ---------------------------------------------------------------------- 7 // ---------------------------------------------------------------------- 8 // 9 // AxisAngle.h - provide HepAxisAngle class 10 // 11 // History: 12 // 23-Jan-1998 WEB Initial draft 13 // 15-Jun-1998 WEB Added namespace support 14 // 02-May-2000 WEB No global using 15 // 27-Jul-2000 MF CLHEP version 16 // 17 // ---------------------------------------------------------------------- 18 19 #ifndef HEP_AXISANGLE_H 20 #define HEP_AXISANGLE_H 21 22 #include <iostream> 23 #include "CLHEP/Vector/ThreeVector.h" 24 25 namespace CLHEP { 26 27 // Declarations of classes and global methods 28 class HepAxisAngle; 29 std::ostream & operator<<( std::ostream & os, const HepAxisAngle & aa ); 30 std::istream & operator>>( std::istream & is, HepAxisAngle & aa ); 31 32 /** 33 * @author 34 * @ingroup vector 35 */ 36 class HepAxisAngle { 37 38 public: 39 typedef double Scalar; 40 41 protected: 42 typedef HepAxisAngle AA; // just an abbreviation 43 static Scalar tolerance; // to determine relative nearness 44 45 public: 46 47 // ---------- Constructors: 48 inline HepAxisAngle(); 49 inline HepAxisAngle( const Hep3Vector axis, Scalar delta ); 50 51 // ---------- Destructor, copy constructor, assignment: 52 // use C++ defaults 53 54 // ---------- Accessors: 55 56 public: 57 inline Hep3Vector getAxis() const; 58 inline Hep3Vector axis() const; 59 inline AA & setAxis( const Hep3Vector axis ); 60 61 inline double getDelta() const; 62 inline double delta() const ; 63 inline AA & setDelta( Scalar delta ); 64 65 inline AA & set( const Hep3Vector axis, Scalar delta ); 66 67 // ---------- Operations: 68 69 // comparisons: 70 inline int compare ( const AA & aa ) const; 71 72 inline bool operator==( const AA & aa ) const; 73 inline bool operator!=( const AA & aa ) const; 74 inline bool operator< ( const AA & aa ) const; 75 inline bool operator<=( const AA & aa ) const; 76 inline bool operator> ( const AA & aa ) const; 77 inline bool operator>=( const AA & aa ) const; 78 79 // relative comparison: 80 inline static double getTolerance(); 81 inline static double setTolerance( Scalar tol ); 82 83 protected: 84 double distance( const HepAxisAngle & aa ) const; 85 public: 86 87 bool isNear ( const AA & aa, Scalar epsilon = tolerance ) const; 88 double howNear( const AA & aa ) const; 89 90 // ---------- I/O: 91 92 friend std::ostream & operator<<( std::ostream & os, const AA & aa ); 93 friend std::istream & operator>>( std::istream & is, AA & aa ); 94 95 private: 96 Hep3Vector axis_; // Note: After construction, this is always of mag 1 97 double delta_; 98 99 }; // HepAxisAngle 100 101 102 } // namespace CLHEP 103 104 #include "CLHEP/Vector/AxisAngle.icc" 105 106 #endif // HEP_AXISANGLE_H 107