00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef HEP_ROTATIONY_H
00021 #define HEP_ROTATIONY_H
00022
00023 #ifdef GNUPRAGMA
00024 #pragma interface
00025 #endif
00026
00027 #include "CLHEP/Vector/RotationInterfaces.h"
00028
00029 #ifdef HEP_NO_INLINE_IN_DECLARATION
00030 #define inline
00031 #endif
00032
00033 class HepRotationY;
00034 class HepRotation;
00035 class HepBoost;
00036
00037 inline HepRotationY inverseOf(const HepRotationY & r);
00038
00039
00044 class HepRotationY {
00045
00046 public:
00047
00048
00049
00050 inline HepRotationY();
00051
00052
00053 HepRotationY(double delta);
00054
00055
00056 inline HepRotationY(const HepRotationY & orig);
00057
00058
00059 inline HepRotationY & operator = (const HepRotationY & r);
00060
00061
00062 HepRotationY & set ( double delta );
00063
00064
00065 inline ~HepRotationY();
00066
00067
00068
00069
00070 inline Hep3Vector colX() const;
00071 inline Hep3Vector colY() const;
00072 inline Hep3Vector colZ() const;
00073
00074
00075 inline Hep3Vector rowX() const;
00076 inline Hep3Vector rowY() const;
00077 inline Hep3Vector rowZ() const;
00078
00079
00080 inline double xx() const;
00081 inline double xy() const;
00082 inline double xz() const;
00083 inline double yx() const;
00084 inline double yy() const;
00085 inline double yz() const;
00086 inline double zx() const;
00087 inline double zy() const;
00088 inline double zz() const;
00089
00090
00091 inline HepRep3x3 rep3x3() const;
00092
00093
00094
00095 inline double getPhi () const;
00096 inline double getTheta() const;
00097 inline double getPsi () const;
00098 double phi () const;
00099 double theta() const;
00100 double psi () const;
00101 HepEulerAngles eulerAngles() const;
00102
00103
00104 inline double getDelta() const;
00105 inline Hep3Vector getAxis () const;
00106 inline double delta() const;
00107 inline Hep3Vector axis () const;
00108 inline HepAxisAngle axisAngle() const;
00109 inline void getAngleAxis(double & delta, Hep3Vector & axis) const;
00110
00111
00112
00113 double phiX() const;
00114 double phiY() const;
00115 double phiZ() const;
00116 double thetaX() const;
00117 double thetaY() const;
00118 double thetaZ() const;
00119
00120
00121
00122
00123 inline HepLorentzVector col1() const;
00124 inline HepLorentzVector col2() const;
00125 inline HepLorentzVector col3() const;
00126
00127
00128 inline HepLorentzVector col4() const;
00129
00130
00131 inline HepLorentzVector row1() const;
00132 inline HepLorentzVector row2() const;
00133 inline HepLorentzVector row3() const;
00134
00135
00136 inline HepLorentzVector row4() const;
00137
00138
00139 inline double xt() const;
00140 inline double yt() const;
00141 inline double zt() const;
00142 inline double tx() const;
00143 inline double ty() const;
00144 inline double tz() const;
00145
00146
00147 inline double tt() const;
00148
00149
00150 inline HepRep4x4 rep4x4() const;
00151
00152
00153
00154
00155 void setDelta (double delta);
00156
00157
00158
00159
00160 void decompose (HepAxisAngle & rotation, Hep3Vector & boost) const;
00161 void decompose (Hep3Vector & boost, HepAxisAngle & rotation) const;
00162 void decompose (HepRotation & rotation, HepBoost & boost) const;
00163 void decompose (HepBoost & boost, HepRotation & rotation) const;
00164
00165
00166
00167
00168 inline bool isIdentity() const;
00169
00170
00171 inline int compare( const HepRotationY & r ) const;
00172
00173
00174
00175 inline bool operator== ( const HepRotationY & r ) const;
00176 inline bool operator!= ( const HepRotationY & r ) const;
00177 inline bool operator< ( const HepRotationY & r ) const;
00178 inline bool operator> ( const HepRotationY & r ) const;
00179 inline bool operator<= ( const HepRotationY & r ) const;
00180 inline bool operator>= ( const HepRotationY & r ) const;
00181
00182 double distance2( const HepRotationY & r ) const;
00183
00184
00185 double distance2( const HepRotation & r ) const;
00186
00187
00188 double howNear( const HepRotationY & r ) const;
00189 double howNear( const HepRotation & r ) const;
00190 bool isNear( const HepRotationY & r,
00191 double epsilon=Hep4RotationInterface::tolerance) const;
00192 bool isNear( const HepRotation & r,
00193 double epsilon=Hep4RotationInterface::tolerance) const;
00194
00195 double distance2( const HepBoost & lt ) const;
00196
00197 double distance2( const HepLorentzRotation & lt ) const;
00198
00199
00200 double howNear( const HepBoost & lt ) const;
00201 double howNear( const HepLorentzRotation & lt ) const;
00202 bool isNear( const HepBoost & lt,
00203 double epsilon=Hep4RotationInterface::tolerance) const;
00204 bool isNear( const HepLorentzRotation & lt,
00205 double epsilon=Hep4RotationInterface::tolerance) const;
00206
00207
00208
00209 double norm2() const;
00210
00211
00212 inline void rectify();
00213
00214
00215
00216
00217 inline Hep3Vector operator() (const Hep3Vector & p) const;
00218
00219
00220 inline Hep3Vector operator * (const Hep3Vector & p) const;
00221
00222
00223 inline HepLorentzVector operator()( const HepLorentzVector & w ) const;
00224
00225
00226 inline HepLorentzVector operator* ( const HepLorentzVector & w ) const;
00227
00228
00229
00230
00231 inline HepRotationY operator * (const HepRotationY & ry) const;
00232
00233
00234 inline HepRotationY & operator *= (const HepRotationY & r);
00235 inline HepRotationY & transform (const HepRotationY & r);
00236
00237
00238
00239
00240 inline HepRotationY inverse() const;
00241
00242
00243 friend HepRotationY inverseOf(const HepRotationY & r);
00244
00245
00246 inline HepRotationY & invert();
00247
00248
00249
00250
00251 HepStd::ostream & print( HepStd::ostream & os ) const;
00252
00253
00254
00255
00256 static inline double getTolerance();
00257 static inline double setTolerance(double tol);
00258
00259 protected:
00260
00261 double d;
00262
00263
00264 double s;
00265 double c;
00266
00267
00268 inline HepRotationY ( double dd, double ss, double cc );
00269
00270
00271 static inline double proper (double delta);
00272
00273
00274 };
00275
00276
00277
00278 inline
00279 HepStd::ostream & operator <<
00280 ( HepStd::ostream & os, const HepRotationY & r ) {return r.print(os);}
00281
00282 #ifdef HEP_NO_INLINE_IN_DECLARATION
00283 #undef inline
00284 #endif
00285
00286 #ifndef HEP_DEBUG_INLINE
00287 #include "CLHEP/Vector/RotationY.icc"
00288 #endif
00289
00290 #endif
00291