Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/clhep/include/CLHEP/Vector/Boost.h

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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 HepBoost class for performing specialized
  6 // Lorentz transformations which are pure boosts on objects of the
  7 // HepLorentzVector class.
  8 //
  9 // HepBoost is a concrete implementation of Hep4RotationInterface.
 10 //
 11 // .SS See Also
 12 // RotationInterfaces.h
 13 // LorentzVector.h LorentzRotation.h 
 14 //  BoostX.h BoostY.h BoostZ.h 
 15 //
 16 // .SS Author
 17 // Mark Fischler
 18 
 19 #ifndef HEP_BOOST_H
 20 #define HEP_BOOST_H
 21 
 22 #include "CLHEP/Vector/RotationInterfaces.h"
 23 #include "CLHEP/Vector/BoostX.h"
 24 #include "CLHEP/Vector/BoostY.h"
 25 #include "CLHEP/Vector/BoostZ.h"
 26 #include "CLHEP/Vector/LorentzVector.h"
 27 
 28 namespace CLHEP {
 29 
 30 // Declarations of classes and global methods
 31 class HepBoost;
 32 inline HepBoost inverseOf ( const HepBoost & lt );
 33 
 34 /**
 35  * @author
 36  * @ingroup vector
 37  */
 38 class HepBoost {
 39 
 40 public:
 41 
 42   // ----------  Constructors and Assignment:
 43 
 44   inline HepBoost();
 45   // Default constructor. Gives a boost of 0.  
 46 
 47   inline HepBoost(const HepBoost & m);
 48   inline HepBoost(HepBoost && m) = default;
 49   // Copy and move constructors.
 50 
 51   inline HepBoost & operator = (const HepBoost & m);
 52   inline HepBoost & operator = (HepBoost && m) = default;
 53   // Copy and move assignment operators.
 54 
 55          HepBoost & set (double betaX, double betaY, double betaZ);
 56   inline HepBoost       (double betaX, double betaY, double betaZ);
 57   // Constructor from three components of beta vector
 58 
 59          HepBoost & set (const HepRep4x4Symmetric & m);
 60   inline HepBoost       (const HepRep4x4Symmetric & m);
 61   // Constructor from symmetric HepRep4x4
 62 
 63          HepBoost & set (Hep3Vector direction, double beta);
 64   inline HepBoost       (Hep3Vector direction, double beta);
 65   // Constructor from a three vector direction and the magnitude of beta
 66 
 67          HepBoost & set (const Hep3Vector & boost);
 68   inline HepBoost       (const Hep3Vector & boost);
 69   // Constructor from a 3-vector of less than unit length
 70 
 71   inline HepBoost & set (const HepBoostX & boost);
 72   inline HepBoost & set (const HepBoostY & boost);
 73   inline HepBoost & set (const HepBoostZ & boost);
 74   inline HepBoost       (const HepBoostX & boost);
 75   inline HepBoost       (const HepBoostY & boost);
 76   inline HepBoost       (const HepBoostZ & boost);
 77 
 78   // ----------  Accessors:
 79 
 80   inline double  beta()  const;
 81   inline double  gamma() const;
 82   inline Hep3Vector boostVector() const;
 83   inline Hep3Vector getDirection() const;
 84   inline Hep3Vector direction() const;
 85 
 86   inline double xx() const;
 87   inline double xy() const;
 88   inline double xz() const;
 89   inline double xt() const;
 90   inline double yx() const;
 91   inline double yy() const;
 92   inline double yz() const;
 93   inline double yt() const;
 94   inline double zx() const;
 95   inline double zy() const;
 96   inline double zz() const;
 97   inline double zt() const;
 98   inline double tx() const;
 99   inline double ty() const;
100   inline double tz() const;
101   inline double tt() const;
102   // Elements of the matrix.
103 
104   inline HepLorentzVector col1() const;
105   inline HepLorentzVector col2() const;
106   inline HepLorentzVector col3() const;
107   inline HepLorentzVector col4() const;
108   // orthosymplectic column vectors
109 
110   inline HepLorentzVector row1() const;
111   inline HepLorentzVector row2() const;
112   inline HepLorentzVector row3() const;
113   inline HepLorentzVector row4() const;
114   // orthosymplectic row vectors
115 
116   inline HepRep4x4 rep4x4() const;
117   //   4x4 representation.
118 
119   inline HepRep4x4Symmetric rep4x4Symmetric() const;
120   //   Symmetric 4x4 representation.
121 
122   // ----------  Decomposition:
123 
124   void decompose (HepRotation  & rotation, HepBoost   & boost) const;
125   void decompose (HepAxisAngle & rotation, Hep3Vector & boost) const;
126   // Find R and B such that L = R*B -- trivial, since R is identity
127 
128   void decompose (HepBoost   & boost, HepRotation  & rotation) const;
129   void decompose (Hep3Vector & boost, HepAxisAngle & rotation) const;
130   // Find R and B such that L = B*R -- trivial, since R is identity
131 
132   // ----------  Comparisons:
133 
134   inline int compare( const HepBoost & b  ) const;
135   // Dictionary-order comparison, in order tt,zt,zz,yt,yz,yy,xt,xz,xy,xx
136   // Used in operator<, >, <=, >=
137 
138   inline bool operator == (const HepBoost & b) const;
139   inline bool operator != (const HepBoost & b) const;
140   inline bool operator <= (const HepBoost & b) const;
141   inline bool operator >= (const HepBoost & b) const;
142   inline bool operator <  (const HepBoost & b) const;
143   inline bool operator >  (const HepBoost & b) const;
144   // Comparisons.
145 
146   inline bool isIdentity() const;
147   // Returns true if a null boost.
148 
149   inline  double distance2( const HepBoost  & b  ) const;
150   inline  double distance2( const HepBoostX & bx ) const;
151   inline  double distance2( const HepBoostY & by ) const;
152   inline  double distance2( const HepBoostZ & bz ) const;
153   // Defined as the distance2 between the vectors (gamma*betaVector)
154 
155   double distance2( const HepRotation & r  ) const;
156   double distance2( const HepLorentzRotation & lt  ) const;
157   // Distance between this and other sorts of transformations
158 
159   inline double howNear(   const HepBoost & b ) const;
160   inline bool isNear(   const HepBoost & b,
161              double epsilon=Hep4RotationInterface::tolerance) const;
162 
163   double howNear( const HepRotation & r  ) const;
164   double howNear( const HepLorentzRotation & lt  ) const;
165 
166   bool isNear( const HepRotation & r, 
167              double epsilon=Hep4RotationInterface::tolerance) const;
168   bool isNear( const HepLorentzRotation & lt, 
169              double epsilon=Hep4RotationInterface::tolerance) const;
170 
171   // ----------  Properties:
172 
173   double norm2() const;
174   // (beta*gamma)^2
175 
176   void rectify();
177   // set as an exact boost, based on the timelike part of the boost matrix.
178 
179   // ---------- Application:
180 
181   inline HepLorentzVector operator()( const HepLorentzVector & p ) const;
182   // Transform a Lorentz Vector.             
183 
184   inline HepLorentzVector operator* ( const HepLorentzVector & p ) const;
185   // Multiplication with a Lorentz Vector.
186 
187   // ---------- Operations in the group of 4-Rotations
188 
189   HepLorentzRotation operator * (const HepBoost & b) const;
190   HepLorentzRotation operator * (const HepRotation & r) const;
191   HepLorentzRotation operator * (const HepLorentzRotation & lt) const;
192   // Product of two Lorentz Rotations (this) * lt - matrix multiplication  
193   // Notice that the product of two pure boosts is no longer a pure boost
194 
195   inline HepBoost inverse() const;
196   // Return the inverse.
197 
198   inline friend HepBoost inverseOf ( const HepBoost & lt );
199   // global methods to invert.
200 
201   inline HepBoost & invert();
202   // Inverts the Boost matrix.
203 
204   // ---------- I/O:
205 
206   std::ostream & print( std::ostream & os ) const;
207   // Output form is (bx, by, bz) 
208 
209   // ---------- Tolerance              
210 
211   static inline double getTolerance();
212   static inline double setTolerance(double tol);
213 
214 protected:
215 
216   inline HepLorentzVector vectorMultiplication 
217           ( const HepLorentzVector & w ) const;
218   // Multiplication with a Lorentz Vector.
219 
220   HepLorentzRotation matrixMultiplication (const HepRep4x4 & m) const;
221   HepLorentzRotation matrixMultiplication (const HepRep4x4Symmetric & m) const;
222 
223   inline HepBoost
224        (double xx, double xy, double xz, double xt,
225        double yy, double yz, double yt,
226             double zz, double zt,
227            double tt);
228   // Protected constructor.
229   // DOES NOT CHECK FOR VALIDITY AS A LORENTZ BOOST.
230 
231   inline void setBoost(double bx, double by, double bz);
232 
233   HepRep4x4Symmetric rep_;
234 
235 };  // HepBoost
236 
237 inline   
238 std::ostream & operator << 
239   ( std::ostream & os, const HepBoost& b ) {return b.print(os);}
240 
241 }  // namespace CLHEP
242 
243 #include "CLHEP/Vector/Boost.icc"
244 
245 #endif /* HEP_BOOST_H */
246