11 #pragma implementation
14 #include "CLHEP/Vector/defs.h"
15 #include "CLHEP/Vector/RotationX.h"
16 #include "CLHEP/Vector/AxisAngle.h"
17 #include "CLHEP/Vector/EulerAngles.h"
18 #include "CLHEP/Vector/LorentzRotation.h"
19 #include "CLHEP/Units/PhysicalConstants.h"
27 static inline double safe_acos (
double x) {
28 if (std::abs(x) <= 1.0)
return std::acos(x);
29 return ( (x>0) ? 0 : CLHEP::pi );
33 d(proper(ddelta)), s(std::sin(ddelta)), c(std::cos(ddelta))
44 if ( (
d > 0) && (
d < CLHEP::pi) ) {
52 return std::fabs(
d );
56 if ( (
d > 0) && (
d < CLHEP::pi) ) {
76 return (
yx() == 0.0 &&
xx() == 0.0) ? 0.0 : std::atan2(
yx(),
xx());
81 return (
yy() == 0.0 &&
xy() == 0.0) ? 0.0 : std::atan2(
yy(),
xy());
86 return (
yz() == 0.0 &&
xz() == 0.0) ? 0.0 : std::atan2(
yz(),
xz());
91 return safe_acos(
zx());
96 return safe_acos(
zy());
100 return safe_acos(
zz());
111 rotation = axisAngle();
117 rotation = axisAngle();
133 double answer = 2.0 * ( 1.0 - (
s * r.
s +
c * r.
c ) ) ;
134 return (answer >= 0) ? answer : 0;
138 double sum = r.
xx() +
141 double answer = 3.0 - sum;
142 return (answer >= 0 ) ? answer : 0;
149 double bet = b.
beta();
150 double bet2 = bet*bet;
172 return (
distance2(r) <= epsilon*epsilon);
175 return (
distance2(r) <= epsilon*epsilon);
178 return (
distance2(lt) <= epsilon*epsilon);
182 double epsilon )
const {
183 return (
distance2(lt) <= epsilon*epsilon);
187 return 2.0 - 2.0 *
c;
191 os <<
"\nRotation about X (" <<
d <<
192 ") [cos d = " <<
c <<
" sin d = " <<
s <<
"]\n";