Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/clhep/include/CLHEP/Vector/LorentzRotation.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 ]

Diff markup

Differences between /externals/clhep/include/CLHEP/Vector/LorentzRotation.h (Version 11.3.0) and /externals/clhep/include/CLHEP/Vector/LorentzRotation.h (Version 11.0.p4)


  1 // -*- C++ -*-                                      1 // -*- C++ -*-
  2 // CLASSDOC OFF                                     2 // CLASSDOC OFF
  3 // -------------------------------------------      3 // ---------------------------------------------------------------------------
  4 // CLASSDOC ON                                      4 // CLASSDOC ON
  5 //                                                  5 //
  6 // This file is a part of the CLHEP - a Class       6 // This file is a part of the CLHEP - a Class Library for High Energy Physics.
  7 //                                                  7 //
  8 // This is the definition of the HepLorentzRot      8 // This is the definition of the HepLorentzRotation class for performing 
  9 // Lorentz transformations (rotations and boos      9 // Lorentz transformations (rotations and boosts) on objects of the
 10 // HepLorentzVector class.                         10 // HepLorentzVector class.
 11 //                                                 11 //
 12 // HepLorentzRotation is a concrete implementa     12 // HepLorentzRotation is a concrete implementation of Hep4RotationInterface.
 13 //                                                 13 //
 14 // .SS See Also                                    14 // .SS See Also
 15 // RotationInterfaces.h                            15 // RotationInterfaces.h
 16 // ThreeVector.h, LorentzVector.h                  16 // ThreeVector.h, LorentzVector.h
 17 // Rotation.h, Boost.h                             17 // Rotation.h, Boost.h
 18 //                                                 18 //
 19 // .SS Author                                      19 // .SS Author
 20 // Leif Lonnblad, Mark Fischler                    20 // Leif Lonnblad, Mark Fischler
 21                                                    21 
 22 #ifndef HEP_LORENTZROTATION_H                      22 #ifndef HEP_LORENTZROTATION_H
 23 #define HEP_LORENTZROTATION_H                      23 #define HEP_LORENTZROTATION_H
 24                                                    24 
 25 #include "CLHEP/Vector/RotationInterfaces.h"       25 #include "CLHEP/Vector/RotationInterfaces.h"
 26 #include "CLHEP/Vector/Rotation.h"                 26 #include "CLHEP/Vector/Rotation.h" 
 27 #include "CLHEP/Vector/Boost.h"                    27 #include "CLHEP/Vector/Boost.h" 
 28 #include "CLHEP/Vector/LorentzVector.h"            28 #include "CLHEP/Vector/LorentzVector.h"
 29                                                    29 
 30 namespace CLHEP {                                  30 namespace CLHEP {
 31                                                    31 
 32 // Global methods                                  32 // Global methods
 33                                                    33 
 34 inline HepLorentzRotation inverseOf ( const He     34 inline HepLorentzRotation inverseOf ( const HepLorentzRotation & lt );
 35 HepLorentzRotation operator * (const HepRotati     35 HepLorentzRotation operator * (const HepRotation & r,
 36                                         const      36                                         const HepLorentzRotation & lt);
 37 HepLorentzRotation operator * (const HepRotati     37 HepLorentzRotation operator * (const HepRotationX & r,
 38                                         const      38                                         const HepLorentzRotation & lt);
 39 HepLorentzRotation operator * (const HepRotati     39 HepLorentzRotation operator * (const HepRotationY & r,
 40                                         const      40                                         const HepLorentzRotation & lt);
 41 HepLorentzRotation operator * (const HepRotati     41 HepLorentzRotation operator * (const HepRotationZ & r,
 42                                         const      42                                         const HepLorentzRotation & lt);
 43                                                    43 
 44 /**                                                44 /**
 45  * @author                                         45  * @author
 46  * @ingroup vector                                 46  * @ingroup vector
 47  */                                                47  */
 48 class HepLorentzRotation {                         48 class HepLorentzRotation {
 49                                                    49 
 50 public:                                            50 public:
 51   // ----------  Identity HepLorentzRotation:      51   // ----------  Identity HepLorentzRotation:
 52                                                    52 
 53   DLL_API static const HepLorentzRotation IDEN     53   DLL_API static const HepLorentzRotation IDENTITY;
 54                                                    54 
 55   // ----------  Constructors and Assignment:      55   // ----------  Constructors and Assignment:
 56                                                    56 
 57   inline HepLorentzRotation();                     57   inline HepLorentzRotation();
 58   // Default constructor. Gives a unit matrix.     58   // Default constructor. Gives a unit matrix.
 59                                                    59 
 60   inline  HepLorentzRotation (const HepLorentz     60   inline  HepLorentzRotation (const HepLorentzRotation & r);
 61   inline  HepLorentzRotation (HepLorentzRotati     61   inline  HepLorentzRotation (HepLorentzRotation && r) = default;
 62   // Copy and move constructors.                   62   // Copy and move constructors.
 63                                                    63 
 64   inline           HepLorentzRotation (const H     64   inline           HepLorentzRotation (const HepRotation  & r);
 65   inline  explicit HepLorentzRotation (const H     65   inline  explicit HepLorentzRotation (const HepRotationX & r);
 66   inline  explicit HepLorentzRotation (const H     66   inline  explicit HepLorentzRotation (const HepRotationY & r);
 67   inline  explicit HepLorentzRotation (const H     67   inline  explicit HepLorentzRotation (const HepRotationZ & r);
 68   inline           HepLorentzRotation (const H     68   inline           HepLorentzRotation (const HepBoost  &    b);
 69   inline  explicit HepLorentzRotation (const H     69   inline  explicit HepLorentzRotation (const HepBoostX &    b);
 70   inline  explicit HepLorentzRotation (const H     70   inline  explicit HepLorentzRotation (const HepBoostY &    b);
 71   inline  explicit HepLorentzRotation (const H     71   inline  explicit HepLorentzRotation (const HepBoostZ &    b);
 72   // Constructors from special cases.              72   // Constructors from special cases.  
 73                                                    73 
 74   inline HepLorentzRotation & operator = (HepL     74   inline HepLorentzRotation & operator = (HepLorentzRotation && m) = default;
 75   inline HepLorentzRotation & operator = (cons     75   inline HepLorentzRotation & operator = (const HepLorentzRotation & m);
 76   inline HepLorentzRotation & operator = (cons     76   inline HepLorentzRotation & operator = (const HepRotation        & m);
 77   inline HepLorentzRotation & operator = (cons     77   inline HepLorentzRotation & operator = (const HepBoost           & m);
 78   // Assignment.                                   78   // Assignment.
 79                                                    79 
 80          HepLorentzRotation & set (double bx,      80          HepLorentzRotation & set (double bx, double by, double bz);
 81   inline HepLorentzRotation & set (const Hep3V     81   inline HepLorentzRotation & set (const Hep3Vector & p);
 82   inline HepLorentzRotation & set (const HepRo     82   inline HepLorentzRotation & set (const HepRotation  & r);
 83   inline HepLorentzRotation & set (const HepRo     83   inline HepLorentzRotation & set (const HepRotationX & r);
 84   inline HepLorentzRotation & set (const HepRo     84   inline HepLorentzRotation & set (const HepRotationY & r);
 85   inline HepLorentzRotation & set (const HepRo     85   inline HepLorentzRotation & set (const HepRotationZ & r);
 86   inline HepLorentzRotation & set (const HepBo     86   inline HepLorentzRotation & set (const HepBoost & boost);
 87   inline HepLorentzRotation & set (const HepBo     87   inline HepLorentzRotation & set (const HepBoostX & boost);
 88   inline HepLorentzRotation & set (const HepBo     88   inline HepLorentzRotation & set (const HepBoostY & boost);
 89   inline HepLorentzRotation & set (const HepBo     89   inline HepLorentzRotation & set (const HepBoostZ & boost);
 90   inline HepLorentzRotation (double bx, double     90   inline HepLorentzRotation (double bx, double by, double bz);
 91   inline HepLorentzRotation (const Hep3Vector      91   inline HepLorentzRotation (const Hep3Vector & p);
 92   // Other Constructors giving a Lorentz-boost     92   // Other Constructors giving a Lorentz-boost.
 93                                                    93 
 94          HepLorentzRotation & set( const HepBo     94          HepLorentzRotation & set( const HepBoost & B, const HepRotation & R );
 95   inline HepLorentzRotation (      const HepBo     95   inline HepLorentzRotation (      const HepBoost & B, const HepRotation & R );
 96   //   supply B and R:  T = B R:                   96   //   supply B and R:  T = B R:
 97                                                    97 
 98          HepLorentzRotation & set( const HepRo     98          HepLorentzRotation & set( const HepRotation & R, const HepBoost & B );
 99   inline HepLorentzRotation (      const HepRo     99   inline HepLorentzRotation (      const HepRotation & R, const HepBoost & B );
100   //   supply R and B:  T = R B:                  100   //   supply R and B:  T = R B:
101                                                   101 
102   HepLorentzRotation ( const HepLorentzVector     102   HepLorentzRotation ( const HepLorentzVector & col1,
103            const HepLorentzVector & col2,         103            const HepLorentzVector & col2,
104            const HepLorentzVector & col3,         104            const HepLorentzVector & col3,
105            const HepLorentzVector & col4 );       105            const HepLorentzVector & col4 );
106   // Construct from four *orthosymplectic* Lor    106   // Construct from four *orthosymplectic* LorentzVectors for the columns:
107   // NOTE:                                        107   // NOTE:
108         //      This constructor, and the two     108         //      This constructor, and the two set methods below,
109         //      will check that the columns (o    109         //      will check that the columns (or rows) form an orthosymplectic
110         //      matrix, and will adjust values    110         //      matrix, and will adjust values so that this relation is
111         //      as exact as possible.             111         //      as exact as possible.
112   //  Orthosymplectic means the dot product US    112   //  Orthosymplectic means the dot product USING THE METRIC
113   //  of two different coumns will be 0, and o    113   //  of two different coumns will be 0, and of a column with
114   //  itself will be one.                         114   //  itself will be one. 
115                                                   115 
116   HepLorentzRotation & set( const HepLorentzVe    116   HepLorentzRotation & set( const HepLorentzVector & col1,
117                             const HepLorentzVe    117                             const HepLorentzVector & col2,
118                             const HepLorentzVe    118                             const HepLorentzVector & col3,
119                             const HepLorentzVe    119                             const HepLorentzVector & col4 );
120   //   supply four *orthosymplectic* HepLorent    120   //   supply four *orthosymplectic* HepLorentzVectors for the columns
121                                                   121 
122   HepLorentzRotation & setRows( const HepLoren    122   HepLorentzRotation & setRows( const HepLorentzVector & row1,
123                                 const HepLoren    123                                 const HepLorentzVector & row2,
124                                 const HepLoren    124                                 const HepLorentzVector & row3,
125                                 const HepLoren    125                                 const HepLorentzVector & row4 );
126   //   supply four *orthosymplectic* HepLorent    126   //   supply four *orthosymplectic* HepLorentzVectors for the columns
127                                                   127 
128   inline HepLorentzRotation & set( const HepRe    128   inline HepLorentzRotation & set( const HepRep4x4 & rep );
129   inline HepLorentzRotation      ( const HepRe    129   inline HepLorentzRotation      ( const HepRep4x4 & rep );
130   //   supply a HepRep4x4 structure (16 number    130   //   supply a HepRep4x4 structure (16 numbers)
131   // WARNING:                                     131   // WARNING:
132   //            This constructor and set metho    132   //            This constructor and set method will assume the
133   //            HepRep4x4 supplied is in fact     133   //            HepRep4x4 supplied is in fact an orthosymplectic matrix.
134   //            No checking or correction is d    134   //            No checking or correction is done.  If you are
135   //            not certain the matrix is orth    135   //            not certain the matrix is orthosymplectic, break it
136   //            into four HepLorentzVector col    136   //            into four HepLorentzVector columns and use the form
137   //            HepLorentzRotation (col1, col2    137   //            HepLorentzRotation (col1, col2, col3, col4)
138                                                   138 
139   // ----------  Accessors:                       139   // ----------  Accessors:
140                                                   140 
141   inline double xx() const;                       141   inline double xx() const;
142   inline double xy() const;                       142   inline double xy() const;
143   inline double xz() const;                       143   inline double xz() const;
144   inline double xt() const;                       144   inline double xt() const;
145   inline double yx() const;                       145   inline double yx() const;
146   inline double yy() const;                       146   inline double yy() const;
147   inline double yz() const;                       147   inline double yz() const;
148   inline double yt() const;                       148   inline double yt() const;
149   inline double zx() const;                       149   inline double zx() const;
150   inline double zy() const;                       150   inline double zy() const;
151   inline double zz() const;                       151   inline double zz() const;
152   inline double zt() const;                       152   inline double zt() const;
153   inline double tx() const;                       153   inline double tx() const;
154   inline double ty() const;                       154   inline double ty() const;
155   inline double tz() const;                       155   inline double tz() const;
156   inline double tt() const;                       156   inline double tt() const;
157   // Elements of the matrix.                      157   // Elements of the matrix.
158                                                   158 
159   inline HepLorentzVector col1() const;           159   inline HepLorentzVector col1() const;
160   inline HepLorentzVector col2() const;           160   inline HepLorentzVector col2() const;
161   inline HepLorentzVector col3() const;           161   inline HepLorentzVector col3() const;
162   inline HepLorentzVector col4() const;           162   inline HepLorentzVector col4() const;
163   // orthosymplectic column vectors               163   // orthosymplectic column vectors
164                                                   164 
165   inline HepLorentzVector row1() const;           165   inline HepLorentzVector row1() const;
166   inline HepLorentzVector row2() const;           166   inline HepLorentzVector row2() const;
167   inline HepLorentzVector row3() const;           167   inline HepLorentzVector row3() const;
168   inline HepLorentzVector row4() const;           168   inline HepLorentzVector row4() const;
169   // orthosymplectic row vectors                  169   // orthosymplectic row vectors
170                                                   170 
171   inline HepRep4x4 rep4x4() const;                171   inline HepRep4x4 rep4x4() const;
172   //   4x4 representation:                        172   //   4x4 representation:
173                                                   173 
174   // ------------  Subscripting:                  174   // ------------  Subscripting:
175                                                   175 
176   class HepLorentzRotation_row {                  176   class HepLorentzRotation_row {
177   public:                                         177   public:
178     inline HepLorentzRotation_row(const HepLor    178     inline HepLorentzRotation_row(const HepLorentzRotation &, int);
179     inline double operator [] (int) const;        179     inline double operator [] (int) const;
180   private:                                        180   private:
181     const HepLorentzRotation & rr;                181     const HepLorentzRotation & rr;
182     int ii;                                       182     int ii;
183   };                                              183   };
184   // Helper class for implemention of C-style     184   // Helper class for implemention of C-style subscripting r[i][j] 
185                                                   185 
186   inline const HepLorentzRotation_row operator    186   inline const HepLorentzRotation_row operator [] (int) const; 
187   // Returns object of the helper class for C-    187   // Returns object of the helper class for C-style subscripting r[i][j]
188                                                   188 
189   double operator () (int, int) const;            189   double operator () (int, int) const;
190   // Fortran-style subscripting: returns (i,j)    190   // Fortran-style subscripting: returns (i,j) element of the matrix.
191                                                   191 
192   // ----------  Decomposition:                   192   // ----------  Decomposition:
193                                                   193 
194   void decompose (Hep3Vector & boost, HepAxisA    194   void decompose (Hep3Vector & boost, HepAxisAngle & rotation) const;
195   void decompose (HepBoost   & boost, HepRotat    195   void decompose (HepBoost   & boost, HepRotation  & rotation) const;
196   // Find B and R such that L = B*R               196   // Find B and R such that L = B*R
197                                                   197 
198   void decompose (HepAxisAngle & rotation, Hep    198   void decompose (HepAxisAngle & rotation, Hep3Vector & boost) const;
199   void decompose (HepRotation  & rotation, Hep    199   void decompose (HepRotation  & rotation, HepBoost   & boost) const;
200   // Find R and B such that L = R*B               200   // Find R and B such that L = R*B 
201                                                   201 
202   // ----------  Comparisons:                     202   // ----------  Comparisons:
203                                                   203 
204   int compare( const HepLorentzRotation & m  )    204   int compare( const HepLorentzRotation & m  ) const;
205   // Dictionary-order comparison, in order tt,    205   // Dictionary-order comparison, in order tt,tz,...zt,zz,zy,zx,yt,yz,...,xx
206   // Used in operator<, >, <=, >=                 206   // Used in operator<, >, <=, >=
207                                                   207 
208   inline bool operator == (const HepLorentzRot    208   inline bool operator == (const HepLorentzRotation &) const;
209   inline bool operator != (const HepLorentzRot    209   inline bool operator != (const HepLorentzRotation &) const;
210   inline bool operator <= (const HepLorentzRot    210   inline bool operator <= (const HepLorentzRotation &) const;
211   inline bool operator >= (const HepLorentzRot    211   inline bool operator >= (const HepLorentzRotation &) const;
212   inline bool operator <  (const HepLorentzRot    212   inline bool operator <  (const HepLorentzRotation &) const;
213   inline bool operator >  (const HepLorentzRot    213   inline bool operator >  (const HepLorentzRotation &) const;
214                                                   214 
215   inline bool isIdentity() const;                 215   inline bool isIdentity() const;
216   // Returns true if the Identity matrix.         216   // Returns true if the Identity matrix.
217                                                   217 
218   double distance2( const HepBoost & b  ) cons    218   double distance2( const HepBoost & b  ) const;
219   double distance2( const HepRotation & r  ) c    219   double distance2( const HepRotation & r  ) const;
220   double distance2( const HepLorentzRotation &    220   double distance2( const HepLorentzRotation & lt  ) const;
221   // Decomposes L = B*R, returns the sum of di    221   // Decomposes L = B*R, returns the sum of distance2 for B and R.
222                                                   222 
223   double howNear(   const HepBoost & b ) const    223   double howNear(   const HepBoost & b ) const;
224   double howNear(   const HepRotation & r) con    224   double howNear(   const HepRotation & r) const;
225   double howNear(   const HepLorentzRotation &    225   double howNear(   const HepLorentzRotation & lt ) const;
226                                                   226 
227   bool isNear(const HepBoost & b,                 227   bool isNear(const HepBoost & b,
228              double epsilon=Hep4RotationInterf    228              double epsilon=Hep4RotationInterface::tolerance) const;
229   bool isNear(const HepRotation & r,              229   bool isNear(const HepRotation & r,
230              double epsilon=Hep4RotationInterf    230              double epsilon=Hep4RotationInterface::tolerance) const;
231   bool isNear(const HepLorentzRotation & lt,      231   bool isNear(const HepLorentzRotation & lt,
232              double epsilon=Hep4RotationInterf    232              double epsilon=Hep4RotationInterface::tolerance) const;
233                                                   233 
234   // ----------  Properties:                      234   // ----------  Properties:
235                                                   235 
236   double norm2() const;                           236   double norm2() const;
237   // distance2 (IDENTITY), which involves deco    237   // distance2 (IDENTITY), which involves decomposing into B and R and summing 
238   // norm2 for the individual B and R parts.      238   // norm2 for the individual B and R parts. 
239                                                   239 
240   void rectify();                                 240   void rectify();
241   // non-const but logically moot correction f    241   // non-const but logically moot correction for accumulated roundoff errors
242         // rectify averages the matrix with th    242         // rectify averages the matrix with the orthotranspose of its actual
243         // inverse (absent accumulated roundof    243         // inverse (absent accumulated roundoff errors, the orthotranspose IS
244         // the inverse)); this removes to firs    244         // the inverse)); this removes to first order those errors.
245         // Then it formally decomposes that, e    245         // Then it formally decomposes that, extracts axis and delta for its
246   // Rotation part, forms a LorentzRotation fr    246   // Rotation part, forms a LorentzRotation from a true HepRotation 
247   // with those values of axis and delta, time    247   // with those values of axis and delta, times the true Boost
248   // with that boost vector.                      248   // with that boost vector.
249                                                   249 
250   // ---------- Application:                      250   // ---------- Application:
251                                                   251 
252   inline HepLorentzVector vectorMultiplication    252   inline HepLorentzVector vectorMultiplication(const HepLorentzVector&) const;
253   inline HepLorentzVector operator()( const He    253   inline HepLorentzVector operator()( const HepLorentzVector & w ) const;
254   inline HepLorentzVector operator* ( const He    254   inline HepLorentzVector operator* ( const HepLorentzVector & p ) const;
255   // Multiplication with a Lorentz Vector.        255   // Multiplication with a Lorentz Vector.
256                                                   256 
257   // ---------- Operations in the group of 4-R    257   // ---------- Operations in the group of 4-Rotations
258                                                   258 
259   HepLorentzRotation matrixMultiplication(cons    259   HepLorentzRotation matrixMultiplication(const HepRep4x4 & m) const;
260                                                   260 
261   inline HepLorentzRotation operator * (const     261   inline HepLorentzRotation operator * (const HepBoost & b) const;
262   inline HepLorentzRotation operator * (const     262   inline HepLorentzRotation operator * (const HepRotation & r) const;
263   inline HepLorentzRotation operator * (const     263   inline HepLorentzRotation operator * (const HepLorentzRotation & lt) const;
264   // Product of two Lorentz Rotations (this) *    264   // Product of two Lorentz Rotations (this) * lt - matrix multiplication  
265                                                   265 
266   inline  HepLorentzRotation & operator *= (co    266   inline  HepLorentzRotation & operator *= (const HepBoost & b);
267   inline  HepLorentzRotation & operator *= (co    267   inline  HepLorentzRotation & operator *= (const HepRotation & r);
268   inline  HepLorentzRotation & operator *= (co    268   inline  HepLorentzRotation & operator *= (const HepLorentzRotation & lt);
269   inline  HepLorentzRotation & transform   (co    269   inline  HepLorentzRotation & transform   (const HepBoost & b);
270   inline  HepLorentzRotation & transform   (co    270   inline  HepLorentzRotation & transform   (const HepRotation & r);
271   inline  HepLorentzRotation & transform   (co    271   inline  HepLorentzRotation & transform   (const HepLorentzRotation & lt);
272   // Matrix multiplication.                       272   // Matrix multiplication.
273   // Note a *= b; <=> a = a * b; while a.trans    273   // Note a *= b; <=> a = a * b; while a.transform(b); <=> a = b * a;
274                                                   274 
275   // Here there is an opportunity for speedup     275   // Here there is an opportunity for speedup by providing specialized forms
276   // of lt * r and lt * b where r is a Rotatio    276   // of lt * r and lt * b where r is a RotationX Y or Z or b is a BoostX Y or Z
277   // These are, in fact, provided below for th    277   // These are, in fact, provided below for the transform() methods.
278                                                   278 
279   HepLorentzRotation & rotateX(double delta);     279   HepLorentzRotation & rotateX(double delta);
280   // Rotation around the x-axis; equivalent to    280   // Rotation around the x-axis; equivalent to LT = RotationX(delta) * LT
281                                                   281 
282   HepLorentzRotation & rotateY(double delta);     282   HepLorentzRotation & rotateY(double delta);
283   // Rotation around the y-axis; equivalent to    283   // Rotation around the y-axis; equivalent to LT = RotationY(delta) * LT
284                                                   284 
285   HepLorentzRotation & rotateZ(double delta);     285   HepLorentzRotation & rotateZ(double delta);
286   // Rotation around the z-axis; equivalent to    286   // Rotation around the z-axis; equivalent to LT = RotationZ(delta) * LT
287                                                   287 
288   inline HepLorentzRotation & rotate(double de    288   inline HepLorentzRotation & rotate(double delta, const Hep3Vector& axis);
289   inline HepLorentzRotation & rotate(double de    289   inline HepLorentzRotation & rotate(double delta, const Hep3Vector *axis);
290   // Rotation around specified vector - LT = R    290   // Rotation around specified vector - LT = Rotation(delta,axis)*LT
291                                                   291 
292   HepLorentzRotation & boostX(double beta);       292   HepLorentzRotation & boostX(double beta);
293   // Pure boost along the x-axis; equivalent t    293   // Pure boost along the x-axis; equivalent to LT = BoostX(beta) * LT
294                                                   294 
295   HepLorentzRotation & boostY(double beta);       295   HepLorentzRotation & boostY(double beta);
296   // Pure boost along the y-axis; equivalent t    296   // Pure boost along the y-axis; equivalent to LT = BoostX(beta) * LT
297                                                   297 
298   HepLorentzRotation & boostZ(double beta);       298   HepLorentzRotation & boostZ(double beta);
299   // Pure boost along the z-axis; equivalent t    299   // Pure boost along the z-axis; equivalent to LT = BoostX(beta) * LT
300                                                   300 
301   inline HepLorentzRotation & boost(double, do    301   inline HepLorentzRotation & boost(double, double, double);
302   inline HepLorentzRotation & boost(const Hep3    302   inline HepLorentzRotation & boost(const Hep3Vector &);
303   // Lorenz boost.                                303   // Lorenz boost.
304                                                   304 
305   inline HepLorentzRotation inverse() const;      305   inline HepLorentzRotation inverse() const;
306   // Return the inverse.                          306   // Return the inverse.
307                                                   307 
308   inline HepLorentzRotation & invert();           308   inline HepLorentzRotation & invert();
309   // Inverts the LorentzRotation matrix.          309   // Inverts the LorentzRotation matrix.
310                                                   310 
311   // ---------- I/O:                              311   // ---------- I/O:
312                                                   312 
313   std::ostream & print( std::ostream & os ) co    313   std::ostream & print( std::ostream & os ) const;
314   // Aligned six-digit-accurate output of the     314   // Aligned six-digit-accurate output of the transformation matrix. 
315                                                   315 
316   // ---------- Tolerance                         316   // ---------- Tolerance
317                                                   317 
318   static inline double getTolerance();            318   static inline double getTolerance();
319   static inline double setTolerance(double tol    319   static inline double setTolerance(double tol); 
320                                                   320 
321   friend HepLorentzRotation inverseOf ( const     321   friend HepLorentzRotation inverseOf ( const HepLorentzRotation & lt );
322                                                   322 
323 protected:                                        323 protected:
324                                                   324 
325   inline HepLorentzRotation                       325   inline HepLorentzRotation
326        (double mxx, double mxy, double mxz, do    326        (double mxx, double mxy, double mxz, double mxt,
327   double myx, double myy, double myz, double m    327   double myx, double myy, double myz, double myt,
328   double mzx, double mzy, double mzz, double m    328   double mzx, double mzy, double mzz, double mzt,
329   double mtx, double mty, double mtz, double m    329   double mtx, double mty, double mtz, double mtt);
330   // Protected constructor.                       330   // Protected constructor.
331   // DOES NOT CHECK FOR VALIDITY AS A LORENTZ     331   // DOES NOT CHECK FOR VALIDITY AS A LORENTZ TRANSFORMATION.
332                                                   332 
333   inline void setBoost(double, double, double)    333   inline void setBoost(double, double, double);
334   // Set elements according to a boost vector.    334   // Set elements according to a boost vector.
335                                                   335 
336   double mxx, mxy, mxz, mxt,                      336   double mxx, mxy, mxz, mxt,
337             myx, myy, myz, myt,                   337             myx, myy, myz, myt,
338             mzx, mzy, mzz, mzt,                   338             mzx, mzy, mzz, mzt,
339             mtx, mty, mtz, mtt;                   339             mtx, mty, mtz, mtt;
340   // The matrix elements.                         340   // The matrix elements.
341                                                   341 
342 };  // HepLorentzRotation                         342 };  // HepLorentzRotation
343                                                   343 
344 inline std::ostream & operator<<                  344 inline std::ostream & operator<<
345     ( std::ostream & os, const  HepLorentzRota    345     ( std::ostream & os, const  HepLorentzRotation& lt ) 
346   {return lt.print(os);}                          346   {return lt.print(os);}
347                                                   347 
348 inline bool operator==(const HepRotation &r, c    348 inline bool operator==(const HepRotation &r, const HepLorentzRotation & lt)
349   { return lt==HepLorentzRotation(r); }           349   { return lt==HepLorentzRotation(r); }
350 inline bool operator!=(const HepRotation &r, c    350 inline bool operator!=(const HepRotation &r, const HepLorentzRotation & lt)
351   { return lt!=HepLorentzRotation(r); }           351   { return lt!=HepLorentzRotation(r); }
352 inline bool operator<=(const HepRotation &r, c    352 inline bool operator<=(const HepRotation &r, const HepLorentzRotation & lt)
353   { return lt<=r; }                               353   { return lt<=r; }
354 inline bool operator>=(const HepRotation &r, c    354 inline bool operator>=(const HepRotation &r, const HepLorentzRotation & lt)
355   { return lt>=r; }                               355   { return lt>=r; }
356 inline bool operator<(const HepRotation &r, co    356 inline bool operator<(const HepRotation &r, const HepLorentzRotation & lt)
357   { return lt<r; }                                357   { return lt<r; }
358 inline bool operator>(const HepRotation &r, co    358 inline bool operator>(const HepRotation &r, const HepLorentzRotation & lt)
359   { return lt>r; }                                359   { return lt>r; }
360                                                   360 
361 inline bool operator==(const HepBoost &b, cons    361 inline bool operator==(const HepBoost &b, const HepLorentzRotation & lt)
362   { return lt==HepLorentzRotation(b); }           362   { return lt==HepLorentzRotation(b); }
363 inline bool operator!=(const HepBoost &b, cons    363 inline bool operator!=(const HepBoost &b, const HepLorentzRotation & lt)
364   { return lt!=HepLorentzRotation(b); }           364   { return lt!=HepLorentzRotation(b); }
365 inline bool operator<=(const HepBoost &b, cons    365 inline bool operator<=(const HepBoost &b, const HepLorentzRotation & lt)
366   { return lt<=b; }                               366   { return lt<=b; }
367 inline bool operator>=(const HepBoost &b, cons    367 inline bool operator>=(const HepBoost &b, const HepLorentzRotation & lt)
368   { return lt>=b; }                               368   { return lt>=b; }
369 inline bool operator<(const HepBoost &b, const    369 inline bool operator<(const HepBoost &b, const HepLorentzRotation & lt)
370   { return lt<b; }                                370   { return lt<b; }
371 inline bool operator>(const HepBoost &b, const    371 inline bool operator>(const HepBoost &b, const HepLorentzRotation & lt)
372   { return lt>b; }                                372   { return lt>b; }
373                                                   373 
374 }  // namespace CLHEP                             374 }  // namespace CLHEP
375                                                   375 
376 #include "CLHEP/Vector/LorentzRotation.icc"       376 #include "CLHEP/Vector/LorentzRotation.icc"
377                                                   377 
378 #endif /* HEP_LORENTZROTATION_H */                378 #endif /* HEP_LORENTZROTATION_H */
379                                                   379 
380                                                   380