EICd
EIC data model
Direction.h
Go to the documentation of this file.
1 // AUTOMATICALLY GENERATED FILE - DO NOT EDIT
2 
3 #ifndef EICD_Direction_H
4 #define EICD_Direction_H
5 
6 #include <cmath>
7 #include <tuple>
8 #include <ostream>
9 
10 namespace eic {
11 
12 
13 class Direction {
14 public:
15  float theta{}; ///< [rad, 0->pi]
16  float phi{}; ///< [rad, -pi->pi]
17 
18  Direction() : theta{0}, phi{0} {}
19  Direction(double th, double ph) : theta{static_cast<float>(th)}, phi{static_cast<float>(ph)} {}
20  Direction(double x, double y, double z)
21  : theta{static_cast<float>(acos(z/std::hypot(x,y,z)))}
22  , phi{static_cast<float>(atan2(y,x))} {}
23  template <class VectorType> Direction(const VectorType& v) : Direction(v.theta(), v.phi()) {}
24  operator std::pair<float, float>() const {return {theta, phi};}
25  float eta() const {return -log(tan(0.5*theta));}
26  Direction add(const Direction& rhs) const {return {theta+rhs.theta, phi+rhs.phi};}
27  Direction subtract(const Direction& rhs) const {return {theta-rhs.theta, phi-rhs.phi};}
28 
29 
30 };
31 
32 inline std::ostream& operator<<(std::ostream& o, const eic::Direction& value) {
33  o << value.theta << " ";
34  o << value.phi << " ";
35 
36  return o;
37 }
38 
39 } // namespace eic
40 
41 
42 
43 #endif
eic::operator<<
std::ostream & operator<<(std::ostream &o, const ConstBasicParticle &value)
Definition: BasicParticle.cc:102
eic::Direction::Direction
Direction(double th, double ph)
Definition: Direction.h:19
eic
Definition: BasicParticle.cc:13
eic::Direction::theta
float theta
[rad, 0->pi]
Definition: Direction.h:15
eic::Direction::Direction
Direction()
Definition: Direction.h:18
eic::Direction::subtract
Direction subtract(const Direction &rhs) const
Definition: Direction.h:27
eic::Direction::eta
float eta() const
Definition: Direction.h:25
eic::Direction::Direction
Direction(double x, double y, double z)
Definition: Direction.h:20
eic::Direction::add
Direction add(const Direction &rhs) const
Definition: Direction.h:26
eic::Direction::phi
float phi
[rad, -pi->pi]
Definition: Direction.h:16
eic::Direction::Direction
Direction(const VectorType &v)
Definition: Direction.h:23
eic::Direction
Definition: Direction.h:13