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