Geant4 Cross Reference |
1 // -*- C++ -*- 1 2 // ------------------------------------------- 3 // 4 // This file is a part of the CLHEP - a Class 5 // 6 // This is the implementation of the HepLorent 7 // Those methods originating in ZOOM dealing w 8 // Use of one of these methods will not force 9 // HepLorentzRotation class. 10 // 11 12 #include "CLHEP/Vector/LorentzVector.h" 13 14 #include <cmath> 15 #include <iostream> 16 17 namespace CLHEP { 18 19 //-********* 20 // rotationOf() 21 //-********* 22 23 // Each of these is a shell over a rotate meth 24 25 HepLorentzVector rotationXOf 26 (const HepLorentzVector & vec, double phi){ 27 HepLorentzVector vv (vec); 28 return vv.rotateX (phi); 29 } 30 31 HepLorentzVector rotationYOf 32 (const HepLorentzVector & vec, double phi){ 33 HepLorentzVector vv (vec); 34 return vv.rotateY (phi); 35 } 36 37 HepLorentzVector rotationZOf 38 (const HepLorentzVector & vec, double phi){ 39 HepLorentzVector vv (vec); 40 return vv.rotateZ (phi); 41 } 42 43 //-******** 44 // boost 45 //-******** 46 47 HepLorentzVector & HepLorentzVector::boost 48 ( const Hep3Vector & aaxis, double bbet 49 if (bbeta==0) { 50 return *this; // do nothing for a 0 boost 51 } 52 double r2 = aaxis.mag2(); 53 if ( r2 == 0 ) { 54 std::cerr << "HepLorentzVector::boost() - 55 << "A zero vector used as axis defining 56 << std::endl; 57 return *this; 58 } 59 double b2 = bbeta*bbeta; 60 if (b2 >= 1) { 61 std::cerr << "HepLorentzVector::boost() - 62 << "LorentzVector boosted with beta >= 1 63 << "no boost done" << std::endl; 64 } else { 65 Hep3Vector u = aaxis.unit(); 66 double ggamma = std::sqrt(1./(1.-b2)); 67 double betaDotV = u.dot(pp)*bbeta; 68 double tt = ee; 69 70 ee = ggamma * (tt + betaDotV); 71 pp += ( ((ggamma-1)/b2)*betaDotV*bbeta + g 72 // Note: I have verified the behavior of 73 // small -- (gamma-1)/b2 becomes in 74 // multiplied by O(beta**2) and add 75 // inaccuracy does not affect the f 76 } 77 return *this; 78 } /* boost (axis, beta) */ 79 80 } // namespace CLHEP 81