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 10.6.p3)


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