Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
LorentzVectorB.cc
Go to the documentation of this file.
1// -*- C++ -*-
2// ---------------------------------------------------------------------------
3//
4// This file is a part of the CLHEP - a Class Library for High Energy Physics.
5//
6// This is the implementation of the HepLorentzVector class:
7// Those methods originating in ZOOM dealing with simple boosts and rotations.
8// Use of one of these methods will not force loading of the HepRotation or
9// HepLorentzRotation class.
10//
11
13
14#include <cmath>
15#include <iostream>
16
17namespace CLHEP {
18
19//-*********
20// rotationOf()
21//-*********
22
23// Each of these is a shell over a rotate method.
24
26 (const HepLorentzVector & vec, double phi){
27 HepLorentzVector vv (vec);
28 return vv.rotateX (phi);
29}
30
32 (const HepLorentzVector & vec, double phi){
33 HepLorentzVector vv (vec);
34 return vv.rotateY (phi);
35}
36
38 (const HepLorentzVector & vec, double phi){
39 HepLorentzVector vv (vec);
40 return vv.rotateZ (phi);
41}
42
43//-********
44// boost
45//-********
46
48 ( const Hep3Vector & aaxis, double bbeta ) {
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 a boost -- no boost done"
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 (speed of light) -- \n"
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 + ggamma*bbeta*tt ) * u;
72 // Note: I have verified the behavior of this even when beta is very
73 // small -- (gamma-1)/b2 becomes inaccurate by O(1), but it is then
74 // multiplied by O(beta**2) and added to an O(beta) term, so the
75 // inaccuracy does not affect the final result.
76 }
77 return *this;
78} /* boost (axis, beta) */
79
80} // namespace CLHEP
Hep3Vector unit() const
double mag2() const
double dot(const Hep3Vector &) const
HepLorentzVector & boost(double, double, double)
HepLorentzVector & rotateZ(double)
HepLorentzVector & rotateX(double)
HepLorentzVector & rotateY(double)
Definition: DoubConv.h:17
HepLorentzVector rotationYOf(const HepLorentzVector &vec, double delta)
HepLorentzVector rotationXOf(const HepLorentzVector &vec, double delta)
HepLorentzVector rotationZOf(const HepLorentzVector &vec, double delta)