Geant4 Cross Reference |
1 // -*- C++ -*- 1 // -*- C++ -*- 2 // ------------------------------------------- 2 // --------------------------------------------------------------------------- 3 // 3 // 4 // This file is a part of the CLHEP - a Class 4 // This file is a part of the CLHEP - a Class Library for High Energy Physics. 5 // 5 // 6 // This is the implementation of methods of th 6 // This is the implementation of methods of the HepRotation class which 7 // were introduced when ZOOM PhysicsVectors wa 7 // were introduced when ZOOM PhysicsVectors was merged in, which might cause 8 // pulling in of LorentzTransformation related 8 // pulling in of LorentzTransformation related code units. 9 // 9 // 10 10 >> 11 #ifdef GNUPRAGMA >> 12 #pragma implementation >> 13 #endif >> 14 11 #include "CLHEP/Vector/Rotation.h" 15 #include "CLHEP/Vector/Rotation.h" 12 #include "CLHEP/Vector/LorentzRotation.h" 16 #include "CLHEP/Vector/LorentzRotation.h" 13 17 14 #include <cmath> 18 #include <cmath> 15 19 16 namespace CLHEP { 20 namespace CLHEP { 17 21 18 // ---------- distance2 and related member fu 22 // ---------- distance2 and related member functions: 19 // 23 // 20 // WHy do we have forms for HepLorentzRotation 24 // WHy do we have forms for HepLorentzRotation and HepBoost but not for 21 // HepBoostX, HepBoostY, HepBoostZ? Because t 25 // HepBoostX, HepBoostY, HepBoostZ? Because the latter can be gotten by 22 // implicit conversion to HepBoost; but if we 26 // implicit conversion to HepBoost; but if we just had HepLorentzRotation 23 // then this would involve double conversion w 27 // then this would involve double conversion when HepBoostX was used. 24 28 25 double HepRotation::distance2( const HepLorent 29 double HepRotation::distance2( const HepLorentzRotation & lt ) const { 26 HepAxisAngle a; 30 HepAxisAngle a; 27 Hep3Vector b; 31 Hep3Vector b; 28 lt.decompose(b, a); 32 lt.decompose(b, a); 29 double bet = b.beta(); 33 double bet = b.beta(); 30 double bet2 = bet*bet; 34 double bet2 = bet*bet; 31 HepRotation r(a); 35 HepRotation r(a); 32 return bet2/(1-bet2) + distance2(r); 36 return bet2/(1-bet2) + distance2(r); 33 } 37 } 34 38 35 double HepRotation::distance2( const HepBoost 39 double HepRotation::distance2( const HepBoost & lt ) const { 36 return distance2( HepLorentzRotation(lt)); 40 return distance2( HepLorentzRotation(lt)); 37 } 41 } 38 42 39 double HepRotation::howNear( const HepLorentzR 43 double HepRotation::howNear( const HepLorentzRotation & lt ) const { 40 return std::sqrt( distance2( lt ) ); 44 return std::sqrt( distance2( lt ) ); 41 } 45 } 42 46 43 double HepRotation::howNear( const HepBoost & 47 double HepRotation::howNear( const HepBoost & lt ) const { 44 return std::sqrt( distance2( lt ) ); 48 return std::sqrt( distance2( lt ) ); 45 } 49 } 46 50 47 bool HepRotation::isNear( const HepLorentzRo 51 bool HepRotation::isNear( const HepLorentzRotation & lt, 48 double ep 52 double epsilon) const { 49 return distance2( lt ) <= epsilon*epsilon; 53 return distance2( lt ) <= epsilon*epsilon; 50 } 54 } 51 55 52 bool HepRotation::isNear( const HepBoost & l 56 bool HepRotation::isNear( const HepBoost & lt, 53 double ep 57 double epsilon) const { 54 return distance2( lt ) <= epsilon*epsilon; 58 return distance2( lt ) <= epsilon*epsilon; 55 } 59 } 56 60 57 } // namespace CLHEP 61 } // namespace CLHEP 58 62 59 63