Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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
11#ifdef GNUPRAGMA
12#pragma implementation
13#endif
14
16
17#include <cmath>
18
19namespace CLHEP {
20
21//-*********************************************
22// - 6 -
23// Decomposition of an angle between two vectors
24//
25//-*********************************************
26
27
28double Hep3Vector::polarAngle (const Hep3Vector & v2) const {
29 return std::fabs(v2.getTheta() - getTheta());
30} /* polarAngle */
31
33 const Hep3Vector & ref) const {
34 return std::fabs( v2.angle(ref) - angle(ref) );
35} /* polarAngle (v2, ref) */
36
37// double Hep3Vector::azimAngle (const Hep3Vector & v2) const
38// is now in the .icc file as deltaPhi(v2)
39
41 const Hep3Vector & ref) const {
42
43 Hep3Vector vperp ( perpPart(ref) );
44 if ( vperp.mag2() == 0 ) {
45 std::cerr << "Hep3Vector::azimAngle() - "
46 << "Cannot find azimuthal angle with reference direction parallel to "
47 << "vector 1 -- will return zero" << std::endl;
48 return 0;
49 }
50
51 Hep3Vector v2perp ( v2.perpPart(ref) );
52 if ( v2perp.mag2() == 0 ) {
53 std::cerr << "Hep3Vector::azimAngle() - "
54 << "Cannot find azimuthal angle with reference direction parallel to "
55 << "vector 2 -- will return zero" << std::endl;
56 return 0;
57 }
58
59 double ang = vperp.angle(v2perp);
60
61 // Now compute the sign of the answer: that of U*(VxV2) or
62 // the equivalent expression V*(V2xU).
63
64 if ( dot(v2.cross(ref)) >= 0 ) {
65 return ang;
66 } else {
67 return -ang;
68 }
69
70 //-| Note that if V*(V2xU) is zero, we want to return 0 or PI
71 //-| depending on whether vperp is aligned or antialigned with v2perp.
72 //-| The computed angle() expression does this properly.
73
74} /* azimAngle (v2, ref) */
75
76} // 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:28
Definition: DoubConv.h:17