Geant4  v4-10.4-release
 모두 클래스 네임스페이스들 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 Friends 매크로 그룹들 페이지들
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  // 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,
145  inline bool isNear( const HepBoost & b,
147  bool isNear( const HepRotation & r,
149  bool isNear( const HepLorentzRotation & lt,
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 xx() const
bool isIdentity() const
double yy() const
HepLorentzVector col2() const
HepRep4x4Symmetric rep4x4Symmetric() const
Definition: BoostZ.cc:46
double tt() const
double yt() const
HepLorentzVector col3() const
double tx() const
Hep3Vector boostVector() const
double xz() const
static double setTolerance(double tol)
HepLorentzVector row1() const
double zt() const
HepLorentzVector col4() const
HepLorentzVector row2() const
double beta() const
double yz() const
Hep3Vector getDirection() const
HepBoostZ inverse() const
HepBoostZ & operator=(const HepBoostZ &m)
double beta_
Definition: BoostZ.h:208
bool operator==(const HepBoostZ &b) const
friend HepBoostZ inverseOf(const HepBoostZ &b)
double tz() const
HepLorentzVector vectorMultiplication(const HepLorentzVector &w) const
HepLorentzVector col1() const
bool operator<=(const HepBoostZ &b) const
double xt() const
static double getTolerance()
void decompose(HepRotation &rotation, HepBoost &boost) const
Definition: BoostZ.cc:56
bool isNear(const HepBoostZ &b, double epsilon=Hep4RotationInterface::tolerance) const
HepBoost inverseOf(const HepBoost &lt)
int compare(const HepBoostZ &b) const
HepLorentzVector operator()(const HepLorentzVector &w) const
std::ostream & print(std::ostream &os) const
Definition: BoostZ.cc:156
void rectify()
Definition: BoostZ.cc:121
bool operator!=(const HepBoostZ &b) const
static constexpr double m
double xy() const
double epsilon(double density, double temperature)
bool operator<(const HepBoostZ &b) const
HepLorentzVector operator*(const HepLorentzVector &w) const
HepLorentzRotation matrixMultiplication(const HepRep4x4 &m) const
double zy() const
double ty() const
HepBoostZ & invert()
double gamma_
Definition: BoostZ.h:209
double distance2(const HepBoostZ &b) const
bool operator>(const HepBoostZ &b) const
bool operator>=(const HepBoostZ &b) const
double yx() const
HepRep4x4 rep4x4() const
Definition: BoostZ.cc:38
HepBoostZ & set(double beta)
Definition: BoostZ.cc:22
HepLorentzVector row4() const
HepLorentzVector row3() const
double zz() const
double gamma() const
double howNear(const HepBoostZ &b) const
double norm2() const
double zx() const
static DLL_API double tolerance