Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
SpaceVectorR.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 concepts of rotation.
9//
10
11#ifdef GNUPRAGMA
12#pragma implementation
13#endif
14
18
19namespace CLHEP {
20
21//-************************
22// rotate about axis
23//-************************
24
26 double ddelta) {
27 double r1 = axis.mag();
28 if ( r1 == 0 ) {
29 std::cerr << "Hep3Vector::rotate() - "
30 << "Attempt to rotate around a zero vector axis! " << std::endl;
31 return *this;
32 }
33 register double scale=1.0/r1;
34 register double ux = scale*axis.getX();
35 register double uy = scale*axis.getY();
36 register double uz = scale*axis.getZ();
37 double cd = std::cos(ddelta);
38 double sd = std::sin(ddelta);
39 register double ocd = 1 - cd;
40 double rx;
41 double ry;
42 double rz;
43
44 { register double ocdux = ocd * ux;
45 rx = dx * ( cd + ocdux * ux ) +
46 dy * ( ocdux * uy - sd * uz ) +
47 dz * ( ocdux * uz + sd * uy ) ;
48 }
49
50 { register double ocduy = ocd * uy;
51 ry = dy * ( cd + ocduy * uy ) +
52 dz * ( ocduy * uz - sd * ux ) +
53 dx * ( ocduy * ux + sd * uz ) ;
54 }
55
56 { register double ocduz = ocd * uz;
57 rz = dz * ( cd + ocduz * uz ) +
58 dx * ( ocduz * ux - sd * uy ) +
59 dy * ( ocduz * uy + sd * ux ) ;
60 }
61
62 dx = rx;
63 dy = ry;
64 dz = rz;
65
66 return *this;
67} /* rotate */
68
69//-****************************
70// rotate by three euler angles
71//-****************************
72
73
75 double theta1,
76 double psi1) {
77
78 double rx;
79 double ry;
80 double rz;
81
82 register double sinPhi = std::sin( phi1 ), cosPhi = std::cos( phi1 );
83 register double sinTheta = std::sin( theta1 ), cosTheta1 = std::cos( theta1 );
84 register double sinPsi = std::sin( psi1 ), cosPsi = std::cos( psi1 );
85
86 rx = (cosPsi * cosPhi - cosTheta1 * sinPsi * sinPhi) * dx +
87 (cosPsi * sinPhi + cosTheta1 * sinPsi * cosPhi) * dy +
88 (sinPsi * sinTheta) * dz ;
89
90 ry = (- sinPsi * cosPhi - cosTheta1 * cosPsi * sinPhi) * dx +
91 (- sinPsi * sinPhi + cosTheta1 * cosPsi * cosPhi) * dy +
92 (cosPsi * sinTheta) * dz ;
93
94 rz = (sinTheta * sinPhi) * dx +
95 (- sinTheta * cosPhi) * dy +
96 (cosTheta1) * dz ;
97
98 dx = rx;
99 dy = ry;
100 dz = rz;
101
102 return *this;
103
104} /* rotate */
105
106
107//-*******************
108// rotate(HepAxisAngle)
109// rotate(HepEulerAngles)
110//-*******************
111
113 return rotate( ax.getAxis(), ax.delta() );
114}
115
117 return rotate( ex.phi(), ex.theta(), ex.psi() );
118}
119
120
121//-***********************
122// rotationOf(HepAxisAngle)
123// rotationOf(HepEulerAngles)
124// and coordinate axis rotations
125//-***********************
126
127Hep3Vector rotationOf (const Hep3Vector & vec, const HepAxisAngle & ax) {
128 Hep3Vector vv(vec);
129 return vv.rotate (ax);
130}
131
133 const Hep3Vector & axis, double ddelta) {
134 Hep3Vector vv(vec);
135 return vv.rotate(axis, ddelta);
136}
137
139 Hep3Vector vv(vec);
140 return vv.rotate (ex);
141}
142
144 double phi, double theta, double psi) {
145 Hep3Vector vv(vec);
146 return vv.rotate(phi, theta, psi);
147}
148
149Hep3Vector rotationXOf (const Hep3Vector & vec, double ddelta) {
150 Hep3Vector vv(vec);
151 return vv.rotateX (ddelta);
152}
153
154Hep3Vector rotationYOf (const Hep3Vector & vec, double ddelta) {
155 Hep3Vector vv(vec);
156 return vv.rotateY (ddelta);
157}
158
159Hep3Vector rotationZOf (const Hep3Vector & vec, double ddelta) {
160 Hep3Vector vv(vec);
161 return vv.rotateZ (ddelta);
162}
163
164} // namespace CLHEP
Hep3Vector & rotateY(double)
Definition: ThreeVector.cc:134
Hep3Vector & rotateX(double)
Definition: ThreeVector.cc:124
double getZ() const
Hep3Vector & rotateZ(double)
Definition: ThreeVector.cc:144
double mag() const
double getX() const
Hep3Vector & rotate(double, const Hep3Vector &)
Definition: ThreeVectorR.cc:28
double getY() const
double delta() const
Hep3Vector getAxis() const
double phi() const
double theta() const
double psi() const
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)
HepLorentzVector rotationOf(const HepLorentzVector &vec, const Hep3Vector &axis, double delta)