Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/clhep/include/CLHEP/Vector/Rotation.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/Rotation.h (Version 11.3.0) and /externals/clhep/include/CLHEP/Vector/Rotation.h (Version 8.1.p2)


  1 // -*- C++ -*-                                      1 
  2 // CLASSDOC OFF                                   
  3 // -------------------------------------------    
  4 // CLASSDOC ON                                    
  5 //                                                
  6 // This file is a part of the CLHEP - a Class     
  7 //                                                
  8 // This is the definition of the HepRotation c    
  9 // on objects of the Hep3Vector (and HepLorent    
 10 //                                                
 11 // HepRotation is a concrete implementation of    
 12 //                                                
 13 // .SS See Also                                   
 14 // RotationInterfaces.h                           
 15 // ThreeVector.h, LorentzVector.h, LorentzRota    
 16 //                                                
 17 // .SS Author                                     
 18 // Leif Lonnblad, Mark Fischler                   
 19                                                   
 20 #ifndef HEP_ROTATION_H                            
 21 #define HEP_ROTATION_H                            
 22                                                   
 23 #include "CLHEP/Vector/RotationInterfaces.h"      
 24 #include "CLHEP/Vector/RotationX.h"               
 25 #include "CLHEP/Vector/RotationY.h"               
 26 #include "CLHEP/Vector/RotationZ.h"               
 27 #include "CLHEP/Vector/LorentzVector.h"           
 28                                                   
 29 namespace CLHEP {                                 
 30                                                   
 31 // Declarations of classes and global methods     
 32 class HepRotation;                                
 33 inline HepRotation inverseOf ( const HepRotati    
 34 inline HepRotation operator * (const HepRotati    
 35 inline HepRotation operator * (const HepRotati    
 36 inline HepRotation operator * (const HepRotati    
 37                                                   
 38 /**                                               
 39  * @author                                        
 40  * @ingroup vector                                
 41  */                                               
 42 class HepRotation {                               
 43                                                   
 44 public:                                           
 45                                                   
 46   // ----------  Constructors and Assignment:     
 47                                                   
 48   inline HepRotation();                           
 49   // Default constructor. Gives a unit matrix.    
 50                                                   
 51   inline HepRotation(const HepRotation & m);      
 52   inline HepRotation(HepRotation && m) = defau    
 53   // Copy and move constructors.                  
 54                                                   
 55   inline HepRotation(const HepRotationX & m);     
 56   inline HepRotation(const HepRotationY & m);     
 57   inline HepRotation(const HepRotationZ & m);     
 58   // Construct from specialized rotation.         
 59                                                   
 60   HepRotation & set( const Hep3Vector & axis,     
 61   HepRotation      ( const Hep3Vector & axis,     
 62   // Construct from axis and angle.               
 63                                                   
 64   HepRotation & set( const HepAxisAngle & ax )    
 65   HepRotation      ( const HepAxisAngle & ax )    
 66   // Construct from AxisAngle structure.          
 67                                                   
 68   HepRotation & set( double phi, double theta,    
 69   HepRotation      ( double phi, double theta,    
 70   // Construct from three Euler angles (in rad    
 71                                                   
 72   HepRotation & set( const HepEulerAngles & e     
 73   HepRotation      ( const HepEulerAngles & e     
 74   // Construct from EulerAngles structure.        
 75                                                   
 76   HepRotation ( const Hep3Vector & colX,          
 77                 const Hep3Vector & colY,          
 78                 const Hep3Vector & colZ );        
 79   // Construct from three *orthogonal* unit ve    
 80     // NOTE:                                      
 81     //       This constructor, and the two set    
 82   //   will check that the columns (or rows) f    
 83   //   matrix, and will adjust values so that     
 84   //   as exact as possible.                      
 85                                                   
 86   HepRotation & set( const Hep3Vector & colX,     
 87                              const Hep3Vector     
 88                              const Hep3Vector     
 89   //   supply three *orthogonal* unit vectors     
 90                                                   
 91   HepRotation & setRows( const Hep3Vector & ro    
 92                                  const Hep3Vec    
 93                                  const Hep3Vec    
 94   //   supply three *orthogonal* unit vectors     
 95                                                   
 96   inline HepRotation & set(const HepRotationX     
 97   inline HepRotation & set(const HepRotationY     
 98   inline HepRotation & set(const HepRotationZ     
 99   // set from specialized rotation.               
100                                                   
101   inline  HepRotation & operator = (const HepR    
102   inline  HepRotation & operator = (HepRotatio    
103   // Copy and move assignment operators.          
104                                                   
105   inline  HepRotation & operator = (const HepR    
106   inline  HepRotation & operator = (const HepR    
107   inline  HepRotation & operator = (const HepR    
108   // Assignment from specialized rotation.        
109                                                   
110   inline HepRotation &set( const HepRep3x3 & m    
111   inline HepRotation     ( const HepRep3x3 & m    
112   // WARNING - NO CHECKING IS DONE!               
113   // Constructon directly from from a 3x3 repr    
114   // which is required to be an orthogonal mat    
115                                                   
116   inline ~HepRotation();                          
117   // Trivial destructor.                          
118                                                   
119   // ----------  Accessors:                       
120                                                   
121   inline Hep3Vector colX() const;                 
122   inline Hep3Vector colY() const;                 
123   inline Hep3Vector colZ() const;                 
124   // orthogonal unit-length column vectors        
125                                                   
126   inline Hep3Vector rowX() const;                 
127   inline Hep3Vector rowY() const;                 
128   inline Hep3Vector rowZ() const;                 
129   // orthogonal unit-length row vectors           
130                                                   
131   inline double xx() const;                       
132   inline double xy() const;                       
133   inline double xz() const;                       
134   inline double yx() const;                       
135   inline double yy() const;                       
136   inline double yz() const;                       
137   inline double zx() const;                       
138   inline double zy() const;                       
139   inline double zz() const;                       
140   // Elements of the rotation matrix (Geant4).    
141                                                   
142   inline HepRep3x3 rep3x3() const;                
143   //   3x3 representation:                        
144                                                   
145   // ------------  Subscripting:                  
146                                                   
147   class HepRotation_row {                         
148   public:                                         
149     inline HepRotation_row(const HepRotation &    
150     inline double operator [] (int) const;        
151   private:                                        
152     const HepRotation & rr;                       
153     int ii;                                       
154   };                                              
155   // Helper class for implemention of C-style     
156                                                   
157   inline const HepRotation_row operator [] (in    
158   // Returns object of the helper class for C-    
159   // i and j range from 0 to 2.                   
160                                                   
161   double operator () (int, int) const;            
162   // Fortran-style subscripting: returns (i,j)    
163   // Note:  i and j still range from 0 to 2.      
164                                                   
165   // ------------  Euler angles:                  
166   inline  double getPhi  () const;                
167   inline  double getTheta() const;                
168   inline  double getPsi  () const;                
169   double    phi  () const;                        
170   double    theta() const;                        
171   double    psi  () const;                        
172   HepEulerAngles eulerAngles() const;             
173                                                   
174   // ------------  axis & angle of rotation:      
175   inline  double  getDelta() const;               
176   inline  Hep3Vector getAxis () const;            
177   double     delta() const;                       
178   Hep3Vector    axis () const;                    
179   HepAxisAngle  axisAngle() const;                
180   void getAngleAxis(double & delta, Hep3Vector    
181   // Returns the rotation angle and rotation a    
182                                                   
183   // ------------- Angles of rotated axes         
184   double phiX() const;                            
185   double phiY() const;                            
186   double phiZ() const;                            
187   double thetaX() const;                          
188   double thetaY() const;                          
189   double thetaZ() const;                          
190   // Return angles (RADS) made by rotated axes    
191   //                [Rotation.cc]                 
192                                                   
193   // ----------  Other accessors treating pure    
194                                                   
195   inline HepLorentzVector col1() const;           
196   inline HepLorentzVector col2() const;           
197   inline HepLorentzVector col3() const;           
198   //  orthosymplectic 4-vector columns - T com    
199                                                   
200   inline HepLorentzVector col4() const;           
201   // Will be (0,0,0,1) for this pure Rotation.    
202                                                   
203   inline HepLorentzVector row1() const;           
204   inline HepLorentzVector row2() const;           
205   inline HepLorentzVector row3() const;           
206   //  orthosymplectic 4-vector rows - T compon    
207                                                   
208   inline HepLorentzVector row4() const;           
209   // Will be (0,0,0,1) for this pure Rotation.    
210                                                   
211   inline double xt() const;                       
212   inline double yt() const;                       
213   inline double zt() const;                       
214   inline double tx() const;                       
215   inline double ty() const;                       
216   inline double tz() const;                       
217   // Will be zero for this pure Rotation          
218                                                   
219   inline double tt() const;                       
220   // Will be one for this pure Rotation           
221                                                   
222   inline HepRep4x4 rep4x4() const;                
223   //   4x4 representation.                        
224                                                   
225   // ---------   Mutators                         
226                                                   
227   void setPhi (double phi);                       
228   // change Euler angle phi, leaving theta and    
229                                                   
230   void setTheta (double theta);                   
231   // change Euler angle theta, leaving phi and    
232                                                   
233   void setPsi (double psi);                       
234   // change Euler angle psi, leaving theta and    
235                                                   
236   void setAxis (const Hep3Vector & axis);         
237   // change rotation axis, leaving delta uncha    
238                                                   
239   void setDelta (double delta);                   
240   // change angle of rotation, leaving rotatio    
241                                                   
242   // ----------  Decomposition:                   
243                                                   
244   void decompose (HepAxisAngle & rotation, Hep    
245   void decompose (Hep3Vector & boost, HepAxisA    
246   // These are trivial, as the boost vector is    
247                                                   
248   // ----------  Comparisons:                     
249                                                   
250   bool isIdentity() const;                        
251   // Returns true if the identity matrix (Gean    
252                                                   
253   int compare( const HepRotation & r  ) const;    
254   // Dictionary-order comparison, in order zz,    
255   // Used in operator<, >, <=, >=                 
256                                                   
257   inline bool operator== ( const HepRotation &    
258   inline bool operator!= ( const HepRotation &    
259   inline bool operator<  ( const HepRotation &    
260   inline bool operator>  ( const HepRotation &    
261   inline bool operator<= ( const HepRotation &    
262   inline bool operator>= ( const HepRotation &    
263                                                   
264   double distance2( const HepRotation &  r  )     
265   // 3 - Tr ( this/r ) -- This works with Rota    
266                                                   
267   double howNear( const HepRotation & r ) cons    
268   bool isNear( const HepRotation & r,             
269              double epsilon=Hep4RotationInterf    
270                                                   
271   double distance2( const HepBoost           &    
272   // 3 - Tr ( this ) + |b|^2 / (1-|b|^2)          
273   double distance2( const HepLorentzRotation &    
274   // 3 - Tr ( this/r ) + |b|^2 / (1-|b|^2) whe    
275                                                   
276   double howNear( const HepBoost           & l    
277   double howNear( const HepLorentzRotation & l    
278   bool isNear( const HepBoost           & lt,     
279              double epsilon=Hep4RotationInterf    
280   bool isNear( const HepLorentzRotation & lt,     
281              double epsilon=Hep4RotationInterf    
282                                                   
283   // ----------  Properties:                      
284                                                   
285   double norm2() const;                           
286   // distance2 (IDENTITY), which is 3 - Tr ( *    
287                                                   
288   void rectify();                                 
289   // non-const but logically moot correction f    
290   // rectify averages the matrix with the tran    
291   // inverse (absent accumulated roundoff erro    
292   // the inverse)); this removes to first orde    
293   // Then it formally extracts axis and delta,    
294   // HepRotation with those values of axis and    
295                                                   
296   // ---------- Application:                      
297                                                   
298   inline Hep3Vector operator() (const Hep3Vect    
299   // Rotate a Hep3Vector.                         
300                                                   
301   inline  Hep3Vector operator * (const Hep3Vec    
302   // Multiplication with a Hep3Vector.            
303                                                   
304   inline HepLorentzVector operator()( const He    
305   // Rotate (the space part of) a HepLorentzVe    
306                                                   
307   inline  HepLorentzVector operator* ( const H    
308   // Multiplication with a HepLorentzVector.      
309                                                   
310   // ---------- Operations in the group of Rot    
311                                                   
312   inline HepRotation operator * (const HepRota    
313   // Product of two rotations (this) * r - mat    
314                                                   
315   inline HepRotation operator * (const HepRota    
316   inline HepRotation operator * (const HepRota    
317   inline HepRotation operator * (const HepRota    
318   // Product of two rotations (this) * r - fas    
319                                                   
320   inline  HepRotation & operator *= (const Hep    
321   inline  HepRotation & transform   (const Hep    
322   // Matrix multiplication.                       
323   // Note a *= b; <=> a = a * b; while a.trans    
324                                                   
325   inline  HepRotation & operator *= (const Hep    
326   inline  HepRotation & operator *= (const Hep    
327   inline  HepRotation & operator *= (const Hep    
328   inline  HepRotation & transform   (const Hep    
329   inline  HepRotation & transform   (const Hep    
330   inline  HepRotation & transform   (const Hep    
331   // Matrix multiplication by specialized matr    
332                                                   
333   HepRotation & rotateX(double delta);            
334   // Rotation around the x-axis; equivalent to    
335                                                   
336   HepRotation & rotateY(double delta);            
337   // Rotation around the y-axis; equivalent to    
338                                                   
339   HepRotation & rotateZ(double delta);            
340   // Rotation around the z-axis; equivalent to    
341                                                   
342          HepRotation & rotate(double delta, co    
343   inline HepRotation & rotate(double delta, co    
344   // Rotation around a specified vector.          
345   // r.rotate(d,a) is equivalent to r = Rotati    
346                                                   
347   HepRotation & rotateAxes(const Hep3Vector &     
348                            const Hep3Vector &     
349                            const Hep3Vector &     
350   // Rotation of local axes defined by 3 ortho    
351   // Equivalent to r = Rotation (newX, newY, n    
352                                                   
353   inline HepRotation inverse() const;             
354   // Returns the inverse.                         
355                                                   
356   inline HepRotation & invert();                  
357   // Inverts the Rotation matrix.                 
358                                                   
359   // ---------- I/O:                              
360                                                   
361   std::ostream & print( std::ostream & os ) co    
362   // Aligned six-digit-accurate output of the     
363                                                   
364   // ---------- Identity Rotation:                
365                                                   
366   DLL_API static const HepRotation IDENTITY;      
367                                                   
368   // ---------- Tolerance                         
369                                                   
370   static inline double getTolerance();            
371   static inline double setTolerance(double tol    
372                                                   
373 protected:                                        
374                                                   
375   inline HepRotation(double mxx, double mxy, d    
376          double myx, double myy, double myz,      
377          double mzx, double mzy, double mzz);     
378   // Protected constructor.                       
379   // DOES NOT CHECK FOR VALIDITY AS A ROTATION    
380                                                   
381   friend HepRotation operator* (const HepRotat    
382   friend HepRotation operator* (const HepRotat    
383   friend HepRotation operator* (const HepRotat    
384                                                   
385   double rxx, rxy, rxz,                           
386       ryx, ryy, ryz,                              
387       rzx, rzy, rzz;                              
388   // The matrix elements.                         
389                                                   
390 private:                                          
391   bool                                            
392        setCols ( const Hep3Vector & u1, // Vec    
393                  const Hep3Vector & u2,           
394                  const Hep3Vector & u3,           
395                  double u1u2,                     
396                  Hep3Vector & v1,   // Returne    
397                  Hep3Vector & v2,                 
398                  Hep3Vector & v3 ) const;         
399   void setArbitrarily (const Hep3Vector & colX    
400                       Hep3Vector & v1,            
401                       Hep3Vector & v2,            
402                       Hep3Vector & v3) const;     
403 };  // HepRotation                                
404                                                   
405 inline                                            
406 std::ostream & operator <<                        
407   ( std::ostream & os, const HepRotation & r )    
408                                                   
409 }  // namespace CLHEP                             
410                                                   
411 #include "CLHEP/Vector/Rotation.icc"              
412                                                   
413 #endif /* HEP_ROTATION_H */                       
414                                                   
415