CLHEP VERSION Reference Documentation
CLHEP Home Page CLHEP Documentation CLHEP Bug Reports |
00001 // -*- C++ -*- 00002 // 00003 // This file is a part of the CLHEP - a Class Library for High Energy Physics. 00004 // 00005 // This is the definition of the HepBoostY class for performing specialized 00006 // Lorentz transformations which are pure boosts in the Y direction, on 00007 // objects of the HepLorentzVector class. 00008 // 00009 // HepLorentzRotation is a concrete implementation of Hep4RotationInterface. 00010 // 00011 // .SS See Also 00012 // RotationInterfaces.h 00013 // LorentzVector.h LorentzRotation.h 00014 // Boost.h 00015 // 00016 // .SS Author 00017 // Mark Fischler 00018 00019 #ifndef HEP_BOOSTY_H 00020 #define HEP_BOOSTY_H 00021 00022 #ifdef GNUPRAGMA 00023 #pragma interface 00024 #endif 00025 00026 #include "CLHEP/Vector/defs.h" 00027 #include "CLHEP/Vector/RotationInterfaces.h" 00028 #include "CLHEP/Vector/LorentzVector.h" 00029 00030 namespace CLHEP { 00031 00032 // Declarations of classes and global methods 00033 class HepBoostY; 00034 inline HepBoostY inverseOf ( const HepBoostY & b ); 00035 class HepBoost; 00036 class HepRotation; 00037 00042 class HepBoostY { 00043 00044 public: 00045 00046 // ---------- Constructors and Assignment: 00047 00048 inline HepBoostY(); 00049 // Default constructor. Gives a boost of 0. 00050 00051 inline HepBoostY(const HepBoostY & b); 00052 // Copy constructor. 00053 00054 inline HepBoostY & operator = (const HepBoostY & m); 00055 // Assignment. 00056 00057 HepBoostY & set (double beta); 00058 inline HepBoostY (double beta); 00059 // Constructor from beta 00060 00061 // ---------- Accessors: 00062 00063 inline double beta() const; 00064 inline double gamma() const; 00065 inline Hep3Vector boostVector() const; 00066 inline Hep3Vector getDirection() const; 00067 00068 inline double xx() const; 00069 inline double xy() const; 00070 inline double xz() const; 00071 inline double xt() const; 00072 inline double yx() const; 00073 inline double yy() const; 00074 inline double yz() const; 00075 inline double yt() const; 00076 inline double zx() const; 00077 inline double zy() const; 00078 inline double zz() const; 00079 inline double zt() const; 00080 inline double tx() const; 00081 inline double ty() const; 00082 inline double tz() const; 00083 inline double tt() const; 00084 // Elements of the matrix. 00085 00086 inline HepLorentzVector col1() const; 00087 inline HepLorentzVector col2() const; 00088 inline HepLorentzVector col3() const; 00089 inline HepLorentzVector col4() const; 00090 // orthosymplectic column vectors 00091 00092 inline HepLorentzVector row1() const; 00093 inline HepLorentzVector row2() const; 00094 inline HepLorentzVector row3() const; 00095 inline HepLorentzVector row4() const; 00096 // orthosymplectic row vectors 00097 00098 HepRep4x4 rep4x4() const; 00099 // 4x4 representation: 00100 00101 HepRep4x4Symmetric rep4x4Symmetric() const; 00102 // Symmetric 4x4 representation. 00103 00104 00105 // ---------- Decomposition: 00106 00107 void decompose (HepRotation & rotation, HepBoost & boost) const; 00108 void decompose (HepAxisAngle & rotation, Hep3Vector & boost) const; 00109 // Find R and B such that L = R*B -- trivial, since R is identity 00110 00111 void decompose (HepBoost & boost, HepRotation & rotation) const; 00112 void decompose (Hep3Vector & boost, HepAxisAngle & rotation) const; 00113 // Find R and B such that L = B*R -- trivial, since R is identity 00114 00115 // ---------- Comparisons: 00116 00117 inline int compare( const HepBoostY & b ) const; 00118 // Dictionary-order comparison, in order of beta. 00119 // Used in operator<, >, <=, >= 00120 00121 inline bool operator == (const HepBoostY & b) const; 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 // Comparisons. 00128 00129 inline bool isIdentity() const; 00130 // Returns true if a null boost. 00131 00132 inline double distance2( const HepBoostY & b ) const; 00133 double distance2( const HepBoost & b ) const; 00134 // Defined as the distance2 between the vectors (gamma*betaVector) 00135 00136 double distance2( const HepRotation & r ) const; 00137 double distance2( const HepLorentzRotation & lt ) const; 00138 // Decompose lt = B*R; add norm2 to distance2 to between boosts. 00139 00140 inline double howNear( const HepBoostY & b ) const; 00141 inline double howNear( const HepBoost & b ) const; 00142 inline double howNear( const HepRotation & r ) const; 00143 inline double howNear( const HepLorentzRotation & lt ) const; 00144 00145 inline bool isNear( const HepBoostY & b, 00146 double epsilon=Hep4RotationInterface::tolerance) const; 00147 inline bool isNear( const HepBoost & b, 00148 double epsilon=Hep4RotationInterface::tolerance) const; 00149 bool isNear( const HepRotation & r, 00150 double epsilon=Hep4RotationInterface::tolerance) const; 00151 bool isNear( const HepLorentzRotation & lt, 00152 double epsilon=Hep4RotationInterface::tolerance) const; 00153 00154 // ---------- Properties: 00155 00156 inline double norm2() const; 00157 // distance2 (IDENTITY), which is beta^2 * gamma^2 00158 00159 void rectify(); 00160 // sets according to the stored beta 00161 00162 // ---------- Application: 00163 00164 inline HepLorentzVector operator()( const HepLorentzVector & w ) const; 00165 // Transform a Lorentz Vector. 00166 00167 inline HepLorentzVector operator* ( const HepLorentzVector & w ) const; 00168 // Multiplication with a Lorentz Vector. 00169 00170 // ---------- Operations in the group of 4-Rotations 00171 00172 HepBoostY operator * (const HepBoostY & b) const; 00173 HepLorentzRotation operator * (const HepBoost & b) const; 00174 HepLorentzRotation operator * (const HepRotation & r) const; 00175 HepLorentzRotation operator * (const HepLorentzRotation & lt) const; 00176 // Product of two Lorentz Rotations (this) * lt - matrix multiplication 00177 // Notice that the product of two pure boosts in different directions 00178 // is no longer a pure boost. 00179 00180 inline HepBoostY inverse() const; 00181 // Return the inverse. 00182 00183 inline friend HepBoostY inverseOf ( const HepBoostY & b ); 00184 // global methods to invert. 00185 00186 inline HepBoostY & invert(); 00187 // Inverts the Boost matrix. 00188 00189 // ---------- I/O: 00190 00191 std::ostream & print( std::ostream & os ) const; 00192 // Output form is BOOSTY (beta=..., gamma=...); 00193 00194 // ---------- Tolerance 00195 00196 static inline double getTolerance(); 00197 static inline double setTolerance(double tol); 00198 00199 protected: 00200 00201 inline HepLorentzVector vectorMultiplication 00202 ( const HepLorentzVector & w ) const; 00203 // Multiplication with a Lorentz Vector. 00204 00205 HepLorentzRotation matrixMultiplication (const HepRep4x4 & m) const; 00206 HepLorentzRotation matrixMultiplication (const HepRep4x4Symmetric & m) const; 00207 00208 inline HepBoostY (double beta, double gamma); 00209 00210 double beta_; 00211 double gamma_; 00212 00213 }; // HepBoostY 00214 00215 inline 00216 std::ostream & operator << 00217 ( std::ostream & os, const HepBoostY& b ) {return b.print(os);} 00218 00219 } // namespace CLHEP 00220 00221 #include "CLHEP/Vector/BoostY.icc" 00222 00223 #ifdef ENABLE_BACKWARDS_COMPATIBILITY 00224 // backwards compatibility will be enabled ONLY in CLHEP 1.9 00225 using namespace CLHEP; 00226 #endif 00227 00228 #endif /* HEP_BOOSTY_H */