Geant4-11
SpaceVectorD.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 subset of those methods of the Hep3Vector
7// class which originated from the ZOOM SpaceVector class *and* which involve
8// the esoteric concepts of polar/azimuthal angular decomposition.
9//
10
12
13#include <cmath>
14
15namespace CLHEP {
16
17//-*********************************************
18// - 6 -
19// Decomposition of an angle between two vectors
20//
21//-*********************************************
22
23
24double Hep3Vector::polarAngle (const Hep3Vector & v2) const {
25 return std::fabs(v2.getTheta() - getTheta());
26} /* polarAngle */
27
29 const Hep3Vector & ref) const {
30 return std::fabs( v2.angle(ref) - angle(ref) );
31} /* polarAngle (v2, ref) */
32
33// double Hep3Vector::azimAngle (const Hep3Vector & v2) const
34// is now in the .icc file as deltaPhi(v2)
35
37 const Hep3Vector & ref) const {
38
39 Hep3Vector vperp ( perpPart(ref) );
40 if ( vperp.mag2() == 0 ) {
41 std::cerr << "Hep3Vector::azimAngle() - "
42 << "Cannot find azimuthal angle with reference direction parallel to "
43 << "vector 1 -- will return zero" << std::endl;
44 return 0;
45 }
46
47 Hep3Vector v2perp ( v2.perpPart(ref) );
48 if ( v2perp.mag2() == 0 ) {
49 std::cerr << "Hep3Vector::azimAngle() - "
50 << "Cannot find azimuthal angle with reference direction parallel to "
51 << "vector 2 -- will return zero" << std::endl;
52 return 0;
53 }
54
55 double ang = vperp.angle(v2perp);
56
57 // Now compute the sign of the answer: that of U*(VxV2) or
58 // the equivalent expression V*(V2xU).
59
60 if ( dot(v2.cross(ref)) >= 0 ) {
61 return ang;
62 } else {
63 return -ang;
64 }
65
66 //-| Note that if V*(V2xU) is zero, we want to return 0 or PI
67 //-| depending on whether vperp is aligned or antialigned with v2perp.
68 //-| The computed angle() expression does this properly.
69
70} /* azimAngle (v2, ref) */
71
72} // namespace CLHEP
double azimAngle(const Hep3Vector &v2) const
double mag2() const
double getTheta() const
Hep3Vector cross(const Hep3Vector &) const
double angle(const Hep3Vector &) const
double dot(const Hep3Vector &) const
Hep3Vector perpPart() const
double angle() const
double polarAngle(const Hep3Vector &v2) const
Definition: SpaceVectorD.cc:24
Definition: DoubConv.h:17