OPALX (Object Oriented Parallel Accelerator Library for Exascale) MINIorX
OPALX
CoordinateSystemTrafo.h
Go to the documentation of this file.
1#ifndef COORDINATESYSTEMTRAFO
2#define COORDINATESYSTEMTRAFO
3
5
7public:
9
11
12 CoordinateSystemTrafo(const ippl::Vector<double, 3>& origin, const Quaternion& orientation);
13
16
19
20 void invert();
22
25 void operator*=(const CoordinateSystemTrafo& right);
26
28 Quaternion getRotation() const;
29
31
32 void print(std::ostream&) const;
33
34private:
38};
39
40inline std::ostream& operator<<(std::ostream& os, const CoordinateSystemTrafo& trafo) {
41 trafo.print(os);
42 return os;
43}
44
45inline Inform& operator<<(Inform& os, const CoordinateSystemTrafo& trafo) {
46 trafo.print(os.getStream());
47 return os;
48}
49
50inline void CoordinateSystemTrafo::print(std::ostream& os) const {
51 os << "Origin: " << origin_m << "\n"
52 << "z-axis: " << orientation_m.conjugate().rotate(ippl::Vector<double, 3>(0, 0, 1)) << "\n"
53 << "x-axis: " << orientation_m.conjugate().rotate(ippl::Vector<double, 3>(1, 0, 0));
54}
55
57 return origin_m;
58}
59
61 return orientation_m;
62}
63
64
66 return rotationMatrix_m;
67}
68
70 CoordinateSystemTrafo result(*this);
71 result.invert();
72
73 return result;
74}
75
77 const ippl::Vector<double, 3>& r) const {
78 const ippl::Vector<double, 3> delta = r - origin_m;
80}
81
83 const ippl::Vector<double, 3>& r) const {
84 return rotateFrom(r) + origin_m;
85}
86
88 const ippl::Vector<double, 3>& r) const {
90}
91
93 const ippl::Vector<double, 3>& r) const {
94 return prod_boost_vector(boost::numeric::ublas::trans(rotationMatrix_m), r);
95}
96
97#endif
std::ostream & operator<<(std::ostream &os, const CoordinateSystemTrafo &trafo)
boost::numeric::ublas::matrix< double > matrix_t
Definition: BoostMatrix.h:23
T prod_boost_vector(boost::numeric::ublas::matrix< double > rotation, const T &vect)
Definition: BoostMatrix.h:26
ippl::Vector< double, 3 > getOrigin() const
ippl::Vector< double, 3 > transformFrom(const ippl::Vector< double, 3 > &r) const
ippl::Vector< double, 3 > rotateFrom(const ippl::Vector< double, 3 > &r) const
ippl::Vector< double, 3 > rotateTo(const ippl::Vector< double, 3 > &r) const
void operator*=(const CoordinateSystemTrafo &right)
matrix_t getRotationMatrix() const
CoordinateSystemTrafo & operator=(const CoordinateSystemTrafo &right)=default
ippl::Vector< double, 3 > transformTo(const ippl::Vector< double, 3 > &r) const
void print(std::ostream &) const
CoordinateSystemTrafo inverted() const
ippl::Vector< double, 3 > origin_m
CoordinateSystemTrafo operator*(const CoordinateSystemTrafo &right) const
Quaternion getRotation() const
Quaternion conjugate() const
Definition: Quaternion.hpp:88
ippl::Vector< double, 3 > rotate(const ippl::Vector< double, 3 > &) const
Definition: Quaternion.cpp:122
Definition: Inform.h:40
std::ostream & getStream()
Definition: Inform.h:89