ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
BoostX.h
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file BoostX.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 HepBoostX class for performing specialized
6
// Lorentz transformations which are pure boosts in the X 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_BOOSTX_H
20
#define HEP_BOOSTX_H
21
22
#ifdef GNUPRAGMA
23
#pragma interface
24
#endif
25
26
#include "
CLHEP/Vector/RotationInterfaces.h
"
27
#include "
CLHEP/Vector/LorentzVector.h
"
28
29
namespace
CLHEP {
30
31
// Declarations of classes and global methods
32
class
HepBoostX;
33
inline
HepBoostX
inverseOf
(
const
HepBoostX &
b
);
34
class
HepBoost;
35
class
HepRotation;
36
41
class
HepBoostX
{
42
43
public
:
44
45
// ---------- Constructors and Assignment:
46
47
inline
HepBoostX
();
48
// Default constructor. Gives a boost of 0.
49
50
inline
HepBoostX
(
const
HepBoostX
&
b
);
51
inline
HepBoostX
(
HepBoostX
&& b) =
default
;
52
// Copy and move constructors.
53
54
inline
HepBoostX
&
operator =
(
const
HepBoostX
&
m
);
55
inline
HepBoostX
&
operator =
(
HepBoostX
&& m) =
default
;
56
// Copy and move assignment operators.
57
58
HepBoostX
&
set
(
double
beta
);
59
inline
HepBoostX
(
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
102
HepRep4x4Symmetric
rep4x4Symmetric
()
const
;
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
HepBoostX
& b )
const
;
118
// Dictionary-order comparison, in order of beta.
119
// Used in operator<, >, <=, >=
120
121
inline
bool
operator ==
(
const
HepBoostX
& b)
const
;
122
inline
bool
operator !=
(
const
HepBoostX
& b)
const
;
123
inline
bool
operator <=
(
const
HepBoostX
& b)
const
;
124
inline
bool
operator >=
(
const
HepBoostX
& b)
const
;
125
inline
bool
operator <
(
const
HepBoostX
& b)
const
;
126
inline
bool
operator >
(
const
HepBoostX
& b)
const
;
127
// Comparisons.
128
129
inline
bool
isIdentity
()
const
;
130
// Returns true if a null boost.
131
132
inline
double
distance2
(
const
HepBoostX
& 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
HepBoostX
& 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
HepBoostX
& b,
146
double
epsilon
=
Hep4RotationInterface::tolerance
)
const
;
147
inline
bool
isNear
(
const
HepBoost
& b,
148
double
epsilon
=
Hep4RotationInterface::tolerance
)
const
;
149
bool
isNear
(
const
HepRotation
& r,
150
double
epsilon
=
Hep4RotationInterface::tolerance
)
const
;
151
bool
isNear
(
const
HepLorentzRotation
& lt,
152
double
epsilon
=
Hep4RotationInterface::tolerance
)
const
;
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
HepBoostX
operator *
(
const
HepBoostX
& b)
const
;
173
HepLorentzRotation
operator *
(
const
HepBoost
& b)
const
;
174
HepLorentzRotation
operator *
(
const
HepRotation
& r)
const
;
175
HepLorentzRotation
operator *
(
const
HepLorentzRotation
& lt)
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
HepBoostX
inverse
()
const
;
181
// Return the inverse.
182
183
inline
friend
HepBoostX
inverseOf
(
const
HepBoostX
& b );
184
// global methods to invert.
185
186
inline
HepBoostX
&
invert
();
187
// Inverts the Boost matrix.
188
189
// ---------- I/O:
190
191
std::ostream &
print
( std::ostream & os )
const
;
192
// Output form is BOOSTX (beta=..., gamma=...);
193
194
// ---------- Tolerance
195
196
static
inline
double
getTolerance
();
197
static
inline
double
setTolerance
(
double
tol);
198
199
protected
:
200
201
inline
HepLorentzVector
vectorMultiplication
202
(
const
HepLorentzVector
& w )
const
;
203
// Multiplication with a Lorentz Vector.
204
205
HepLorentzRotation
matrixMultiplication
(
const
HepRep4x4
& m)
const
;
206
HepLorentzRotation
matrixMultiplication
(
const
HepRep4x4Symmetric
& m)
const
;
207
208
inline
HepBoostX
(
double
beta,
double
gamma);
209
210
double
beta_
;
211
double
gamma_
;
212
213
};
// HepBoostX
214
215
inline
216
std::ostream &
operator
<<
217
( std::ostream & os,
const
HepBoostX
&
b
) {
return
b
.print(os);}
218
219
}
// namespace CLHEP
220
221
#include "CLHEP/Vector/BoostX.icc"
222
223
#endif
/* HEP_BOOSTX_H */
geant4
tree
geant4-10.6-release
source
externals
clhep
include
CLHEP
Vector
BoostX.h
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:14
using
1.8.2 with
ECCE GitHub integration