Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BoostZ.h
Go to the documentation of this file.
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 
37 /**
38  * @author
39  * @ingroup vector
40  */
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  // Copy constructor.
52 
53  inline HepBoostZ & operator = (const HepBoostZ & m);
54  // Assignment.
55 
56  HepBoostZ & set (double beta);
57  inline HepBoostZ (double beta);
58  // Constructor from beta
59 
60  // ---------- Accessors:
61 
62  inline double beta() const;
63  inline double gamma() const;
64  inline Hep3Vector boostVector() const;
65  inline Hep3Vector getDirection() const;
66 
67  inline double xx() const;
68  inline double xy() const;
69  inline double xz() const;
70  inline double xt() const;
71  inline double yx() const;
72  inline double yy() const;
73  inline double yz() const;
74  inline double yt() const;
75  inline double zx() const;
76  inline double zy() const;
77  inline double zz() const;
78  inline double zt() const;
79  inline double tx() const;
80  inline double ty() const;
81  inline double tz() const;
82  inline double tt() const;
83  // Elements of the matrix.
84 
85  inline HepLorentzVector col1() const;
86  inline HepLorentzVector col2() const;
87  inline HepLorentzVector col3() const;
88  inline HepLorentzVector col4() const;
89  // orthosymplectic column vectors
90 
91  inline HepLorentzVector row1() const;
92  inline HepLorentzVector row2() const;
93  inline HepLorentzVector row3() const;
94  inline HepLorentzVector row4() const;
95  // orthosymplectic row vectors
96 
97  HepRep4x4 rep4x4() const;
98  // 4x4 representation:
99 
101  // Symmetric 4x4 representation.
102 
103  // ---------- Decomposition:
104 
105  void decompose (HepRotation & rotation, HepBoost & boost) const;
106  void decompose (HepAxisAngle & rotation, Hep3Vector & boost) const;
107  // Find R and B such that L = R*B -- trivial, since R is identity
108 
109  void decompose (HepBoost & boost, HepRotation & rotation) const;
110  void decompose (Hep3Vector & boost, HepAxisAngle & rotation) const;
111  // Find R and B such that L = B*R -- trivial, since R is identity
112 
113  // ---------- Comparisons:
114 
115  inline int compare( const HepBoostZ & b ) const;
116  // Dictionary-order comparison, in order of beta.
117  // Used in operator<, >, <=, >=
118 
119  inline bool operator == (const HepBoostZ & b) const;
120  inline bool operator != (const HepBoostZ & b) const;
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  // Comparisons.
126 
127  inline bool isIdentity() const;
128  // Returns true if a null boost.
129 
130  inline double distance2( const HepBoostZ & b ) const;
131  double distance2( const HepBoost & b ) const;
132  // Defined as the distance2 between the vectors (gamma*betaVector)
133 
134  double distance2( const HepRotation & r ) const;
135  double distance2( const HepLorentzRotation & lt ) const;
136  // Decompose lt = B*R; add norm2 to distance2 to between boosts.
137 
138  inline double howNear( const HepBoostZ & b ) const;
139  inline double howNear( const HepBoost & b ) const;
140  inline double howNear( const HepRotation & r ) const;
141  inline double howNear( const HepLorentzRotation & lt ) const;
142 
143  inline bool isNear( const HepBoostZ & b,
144  double epsilon=Hep4RotationInterface::tolerance) const;
145  inline bool isNear( const HepBoost & b,
146  double epsilon=Hep4RotationInterface::tolerance) const;
147  bool isNear( const HepRotation & r,
148  double epsilon=Hep4RotationInterface::tolerance) const;
149  bool isNear( const HepLorentzRotation & lt,
150  double epsilon=Hep4RotationInterface::tolerance) const;
151 
152  // ---------- Properties:
153 
154  inline double norm2() const;
155  // distance2 (IDENTITY), which is beta^2 * gamma^2
156 
157  void rectify();
158  // sets according to the stored beta
159 
160  // ---------- Application:
161 
162  inline HepLorentzVector operator()( const HepLorentzVector & w ) const;
163  // Transform a Lorentz Vector.
164 
165  inline HepLorentzVector operator* ( const HepLorentzVector & w ) const;
166  // Multiplication with a Lorentz Vector.
167 
168  // ---------- Operations in the group of 4-Rotations
169 
170  HepBoostZ operator * (const HepBoostZ & b) const;
171  HepLorentzRotation operator * (const HepBoost & b) const;
172  HepLorentzRotation operator * (const HepRotation & r) const;
174  // Product of two Lorentz Rotations (this) * lt - matrix multiplication
175  // Notice that the product of two pure boosts in different directions
176  // is no longer a pure boost.
177 
178  inline HepBoostZ inverse() const;
179  // Return the inverse.
180 
181  inline friend HepBoostZ inverseOf ( const HepBoostZ & b );
182  // global methods to invert.
183 
184  inline HepBoostZ & invert();
185  // Inverts the Boost matrix.
186 
187  // ---------- I/O:
188 
189  std::ostream & print( std::ostream & os ) const;
190  // Output form is BOOSTZ (beta=..., gamma=...);
191 
192  // ---------- Tolerance
193 
194  static inline double getTolerance();
195  static inline double setTolerance(double tol);
196 
197 protected:
198 
200  ( const HepLorentzVector & w ) const;
201  // Multiplication with a Lorentz Vector.
202 
205 
206  inline HepBoostZ (double beta, double gamma);
207 
208  double beta_;
209  double gamma_;
210 
211 }; // HepBoostZ
212 
213 inline
214 std::ostream & operator <<
215  ( std::ostream & os, const HepBoostZ& b ) {return b.print(os);}
216 
217 } // namespace CLHEP
218 
219 #include "CLHEP/Vector/BoostZ.icc"
220 
221 #endif /* HEP_BOOSTZ_H */
double tt() const
double norm2() const
void rectify()
Definition: BoostZ.cc:121
double xt() const
int compare(const HepBoostZ &b) const
HepRep4x4 rep4x4() const
Definition: BoostZ.cc:38
bool operator>(const HepBoostZ &b) const
bool operator!=(const HepBoostZ &b) const
HepBoostZ & invert()
double distance2(const HepBoostZ &b) const
static DLL_API double tolerance
double ty() const
HepLorentzVector operator*(const HepLorentzVector &w) const
double beta_
Definition: BoostZ.h:208
Hep3Vector getDirection() const
double yz() const
HepLorentzVector vectorMultiplication(const HepLorentzVector &w) const
HepLorentzRotation matrixMultiplication(const HepRep4x4 &m) const
bool operator==(const HepBoostZ &b) const
double xy() const
double howNear(const HepBoostZ &b) const
bool isNear(const HepBoostZ &b, double epsilon=Hep4RotationInterface::tolerance) const
double beta() const
double tx() const
HepLorentzVector col2() const
HepLorentzVector col3() const
Hep3Vector boostVector() const
std::ostream & print(std::ostream &os) const
Definition: BoostZ.cc:156
static double setTolerance(double tol)
HepBoostZ inverse() const
HepBoost inverseOf(const HepBoost &lt)
double yt() const
HepLorentzVector operator()(const HepLorentzVector &w) const
double xx() const
double zz() const
HepLorentzVector row2() const
HepLorentzVector row4() const
friend HepBoostZ inverseOf(const HepBoostZ &b)
bool operator<(const HepBoostZ &b) const
bool operator>=(const HepBoostZ &b) const
void decompose(HepRotation &rotation, HepBoost &boost) const
Definition: BoostZ.cc:56
double yy() const
double gamma() const
HepLorentzVector row1() const
double yx() const
HepLorentzVector col1() const
double gamma_
Definition: BoostZ.h:209
bool operator<=(const HepBoostZ &b) const
HepRep4x4Symmetric rep4x4Symmetric() const
Definition: BoostZ.cc:46
HepLorentzVector col4() const
static double getTolerance()
double xz() const
HepBoostZ & operator=(const HepBoostZ &m)
double zt() const
double zy() const
bool isIdentity() const
double zx() const
HepBoostZ & set(double beta)
Definition: BoostZ.cc:22
HepLorentzVector row3() const
double tz() const