00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef HEP_BOOSTY_H
00020 #define HEP_BOOSTY_H
00021
00022 #ifdef GNUPRAGMA
00023 #pragma interface
00024 #endif
00025
00026 #ifdef HEP_NO_INLINE_IN_DECLARATION
00027 #define inline
00028 #endif
00029
00030 #include "CLHEP/Vector/RotationInterfaces.h"
00031 #include "CLHEP/Vector/LorentzVector.h"
00032
00033
00034 class HepBoostY;
00035 inline HepBoostY inverseOf ( const HepBoostY & b );
00036 class HepBoost;
00037 class HepRotation;
00038
00043 class HepBoostY {
00044
00045 public:
00046
00047
00048
00049 inline HepBoostY();
00050
00051
00052 inline HepBoostY(const HepBoostY & b);
00053
00054
00055 inline HepBoostY & operator = (const HepBoostY & m);
00056
00057
00058 HepBoostY & set (double beta);
00059 inline HepBoostY (double beta);
00060
00061
00062
00063
00064 inline double beta() const;
00065 inline double gamma() const;
00066 inline Hep3Vector boostVector() const;
00067 inline Hep3Vector getDirection() const;
00068
00069 inline double xx() const;
00070 inline double xy() const;
00071 inline double xz() const;
00072 inline double xt() const;
00073 inline double yx() const;
00074 inline double yy() const;
00075 inline double yz() const;
00076 inline double yt() const;
00077 inline double zx() const;
00078 inline double zy() const;
00079 inline double zz() const;
00080 inline double zt() const;
00081 inline double tx() const;
00082 inline double ty() const;
00083 inline double tz() const;
00084 inline double tt() const;
00085
00086
00087 inline HepLorentzVector col1() const;
00088 inline HepLorentzVector col2() const;
00089 inline HepLorentzVector col3() const;
00090 inline HepLorentzVector col4() const;
00091
00092
00093 inline HepLorentzVector row1() const;
00094 inline HepLorentzVector row2() const;
00095 inline HepLorentzVector row3() const;
00096 inline HepLorentzVector row4() const;
00097
00098
00099 HepRep4x4 rep4x4() const;
00100
00101
00102 HepRep4x4Symmetric rep4x4Symmetric() const;
00103
00104
00105
00106
00107
00108 void decompose (HepRotation & rotation, HepBoost & boost) const;
00109 void decompose (HepAxisAngle & rotation, Hep3Vector & boost) const;
00110
00111
00112 void decompose (HepBoost & boost, HepRotation & rotation) const;
00113 void decompose (Hep3Vector & boost, HepAxisAngle & rotation) const;
00114
00115
00116
00117
00118 inline int compare( const HepBoostY & b ) const;
00119
00120
00121
00122 inline bool operator == (const HepBoostY & b) const;
00123 inline bool operator != (const HepBoostY & b) const;
00124 inline bool operator <= (const HepBoostY & b) const;
00125 inline bool operator >= (const HepBoostY & b) const;
00126 inline bool operator < (const HepBoostY & b) const;
00127 inline bool operator > (const HepBoostY & b) const;
00128
00129
00130 inline bool isIdentity() const;
00131
00132
00133 inline double distance2( const HepBoostY & b ) const;
00134 double distance2( const HepBoost & b ) const;
00135
00136
00137 double distance2( const HepRotation & r ) const;
00138 double distance2( const HepLorentzRotation & lt ) const;
00139
00140
00141 inline double howNear( const HepBoostY & b ) const;
00142 inline double howNear( const HepBoost & b ) const;
00143 inline double howNear( const HepRotation & r ) const;
00144 inline double howNear( const HepLorentzRotation & lt ) const;
00145
00146 inline bool isNear( const HepBoostY & b,
00147 double epsilon=Hep4RotationInterface::tolerance) const;
00148 inline bool isNear( const HepBoost & b,
00149 double epsilon=Hep4RotationInterface::tolerance) const;
00150 bool isNear( const HepRotation & r,
00151 double epsilon=Hep4RotationInterface::tolerance) const;
00152 bool isNear( const HepLorentzRotation & lt,
00153 double epsilon=Hep4RotationInterface::tolerance) const;
00154
00155
00156
00157 inline double norm2() const;
00158
00159
00160 void rectify();
00161
00162
00163
00164
00165 inline HepLorentzVector operator()( const HepLorentzVector & w ) const;
00166
00167
00168 inline HepLorentzVector operator* ( const HepLorentzVector & w ) const;
00169
00170
00171
00172
00173 inline HepBoostY operator * (const HepBoostY & b) const;
00174 HepLorentzRotation operator * (const HepBoost & b) const;
00175 HepLorentzRotation operator * (const HepRotation & r) const;
00176 HepLorentzRotation operator * (const HepLorentzRotation & lt) const;
00177
00178
00179
00180
00181 inline HepBoostY inverse() const;
00182
00183
00184 inline friend HepBoostY inverseOf ( const HepBoostY & b );
00185
00186
00187 inline HepBoostY & invert();
00188
00189
00190
00191
00192 HepStd::ostream & print( HepStd::ostream & os ) const;
00193
00194
00195
00196
00197 static inline double getTolerance();
00198 static inline double setTolerance(double tol);
00199
00200 protected:
00201
00202 inline HepLorentzVector vectorMultiplication
00203 ( const HepLorentzVector & w ) const;
00204
00205
00206 HepLorentzRotation matrixMultiplication (const HepRep4x4 & m) const;
00207 HepLorentzRotation matrixMultiplication (const HepRep4x4Symmetric & m) const;
00208
00209 inline HepBoostY (double beta, double gamma);
00210
00211 double beta_;
00212 double gamma_;
00213
00214 };
00215
00216 #ifdef HEP_NO_INLINE_IN_DECLARATION
00217 #undef inline
00218 #endif
00219
00220 #ifdef HEP_SHORT_NAMES
00221 typedef HepBoostY LBoostY;
00222 #endif
00223
00224 #ifndef HEP_DEBUG_INLINE
00225 #include "CLHEP/Vector/BoostY.icc"
00226 #endif
00227
00228 #endif