ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AxisAngle.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file AxisAngle.h
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>
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 
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