ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BoostZ.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file BoostZ.h
1 // -*- C++ -*-
2 //
3 // This file is a part of the CLHEP - a Class Library for High Energy Physics.
4 //
5 // This is the definition of the HepBoostZ class for performing specialized
6 // Lorentz transformations which are pure boosts in the Z direction, on
7 // objects of the HepLorentzVector class.
8 //
9 // HepLorentzRotation is a concrete implementation of Hep4RotationInterface.
10 //
11 // .SS See Also
12 // RotationInterfaces.h
13 // LorentzVector.h LorentzRotation.h
14 // Boost.h
15 //
16 // .SS Author
17 // Mark Fischler
18 
19 #ifndef HEP_BOOSTZ_H
20 #define HEP_BOOSTZ_H
21 
22 #ifdef GNUPRAGMA
23 #pragma interface
24 #endif
25 
28 
29 namespace CLHEP {
30 
31 // Declarations of classes and global methods
32 class HepBoostZ;
33 inline HepBoostZ inverseOf ( const HepBoostZ & b );
34 class HepBoost;
35 class HepRotation;
36 
41 class HepBoostZ {
42 
43 public:
44 
45  // ---------- Constructors and Assignment:
46 
47  inline HepBoostZ();
48  // Default constructor. Gives a boost of 0.
49 
50  inline HepBoostZ(const HepBoostZ & b);
51  inline HepBoostZ(HepBoostZ && b) = default;
52  // Copy and move constructors.
53 
54  inline HepBoostZ & operator = (const HepBoostZ & m);
55  inline HepBoostZ & operator = (HepBoostZ && m) = default;
56  // Copy and move assignment operators.
57 
58  HepBoostZ & set (double beta);
59  inline HepBoostZ (double beta);
60  // Constructor from beta
61 
62  // ---------- Accessors:
63 
64  inline double beta() const;
65  inline double gamma() const;
66  inline Hep3Vector boostVector() const;
67  inline Hep3Vector getDirection() const;
68 
69  inline double xx() const;
70  inline double xy() const;
71  inline double xz() const;
72  inline double xt() const;
73  inline double yx() const;
74  inline double yy() const;
75  inline double yz() const;
76  inline double yt() const;
77  inline double zx() const;
78  inline double zy() const;
79  inline double zz() const;
80  inline double zt() const;
81  inline double tx() const;
82  inline double ty() const;
83  inline double tz() const;
84  inline double tt() const;
85  // Elements of the matrix.
86 
87  inline HepLorentzVector col1() const;
88  inline HepLorentzVector col2() const;
89  inline HepLorentzVector col3() const;
90  inline HepLorentzVector col4() const;
91  // orthosymplectic column vectors
92 
93  inline HepLorentzVector row1() const;
94  inline HepLorentzVector row2() const;
95  inline HepLorentzVector row3() const;
96  inline HepLorentzVector row4() const;
97  // orthosymplectic row vectors
98 
99  HepRep4x4 rep4x4() const;
100  // 4x4 representation:
101 
103  // Symmetric 4x4 representation.
104 
105  // ---------- Decomposition:
106 
107  void decompose (HepRotation & rotation, HepBoost & boost) const;
108  void decompose (HepAxisAngle & rotation, Hep3Vector & boost) const;
109  // Find R and B such that L = R*B -- trivial, since R is identity
110 
111  void decompose (HepBoost & boost, HepRotation & rotation) const;
112  void decompose (Hep3Vector & boost, HepAxisAngle & rotation) const;
113  // Find R and B such that L = B*R -- trivial, since R is identity
114 
115  // ---------- Comparisons:
116 
117  inline int compare( const HepBoostZ & b ) const;
118  // Dictionary-order comparison, in order of beta.
119  // Used in operator<, >, <=, >=
120 
121  inline bool operator == (const HepBoostZ & b) const;
122  inline bool operator != (const HepBoostZ & b) const;
123  inline bool operator <= (const HepBoostZ & b) const;
124  inline bool operator >= (const HepBoostZ & b) const;
125  inline bool operator < (const HepBoostZ & b) const;
126  inline bool operator > (const HepBoostZ & b) const;
127  // Comparisons.
128 
129  inline bool isIdentity() const;
130  // Returns true if a null boost.
131 
132  inline double distance2( const HepBoostZ & b ) const;
133  double distance2( const HepBoost & b ) const;
134  // Defined as the distance2 between the vectors (gamma*betaVector)
135 
136  double distance2( const HepRotation & r ) const;
137  double distance2( const HepLorentzRotation & lt ) const;
138  // Decompose lt = B*R; add norm2 to distance2 to between boosts.
139 
140  inline double howNear( const HepBoostZ & b ) const;
141  inline double howNear( const HepBoost & b ) const;
142  inline double howNear( const HepRotation & r ) const;
143  inline double howNear( const HepLorentzRotation & lt ) const;
144 
145  inline bool isNear( const HepBoostZ & b,
147  inline bool isNear( const HepBoost & b,
149  bool isNear( const HepRotation & r,
151  bool isNear( const HepLorentzRotation & lt,
153 
154  // ---------- Properties:
155 
156  inline double norm2() const;
157  // distance2 (IDENTITY), which is beta^2 * gamma^2
158 
159  void rectify();
160  // sets according to the stored beta
161 
162  // ---------- Application:
163 
164  inline HepLorentzVector operator()( const HepLorentzVector & w ) const;
165  // Transform a Lorentz Vector.
166 
167  inline HepLorentzVector operator* ( const HepLorentzVector & w ) const;
168  // Multiplication with a Lorentz Vector.
169 
170  // ---------- Operations in the group of 4-Rotations
171 
172  HepBoostZ operator * (const HepBoostZ & b) const;
173  HepLorentzRotation operator * (const HepBoost & b) const;
174  HepLorentzRotation operator * (const HepRotation & r) const;
176  // Product of two Lorentz Rotations (this) * lt - matrix multiplication
177  // Notice that the product of two pure boosts in different directions
178  // is no longer a pure boost.
179 
180  inline HepBoostZ inverse() const;
181  // Return the inverse.
182 
183  inline friend HepBoostZ inverseOf ( const HepBoostZ & b );
184  // global methods to invert.
185 
186  inline HepBoostZ & invert();
187  // Inverts the Boost matrix.
188 
189  // ---------- I/O:
190 
191  std::ostream & print( std::ostream & os ) const;
192  // Output form is BOOSTZ (beta=..., gamma=...);
193 
194  // ---------- Tolerance
195 
196  static inline double getTolerance();
197  static inline double setTolerance(double tol);
198 
199 protected:
200 
202  ( const HepLorentzVector & w ) const;
203  // Multiplication with a Lorentz Vector.
204 
207 
208  inline HepBoostZ (double beta, double gamma);
209 
210  double beta_;
211  double gamma_;
212 
213 }; // HepBoostZ
214 
215 inline
216 std::ostream & operator <<
217  ( std::ostream & os, const HepBoostZ& b ) {return b.print(os);}
218 
219 } // namespace CLHEP
220 
221 #include "CLHEP/Vector/BoostZ.icc"
222 
223 #endif /* HEP_BOOSTZ_H */