57 double pi = 3.1415926;
61 if ( _ry == 0 || _rz == 0 )
63 report(
ERROR,
"" ) <<
"Euler angle calculation specified by zero modules of the axis!"
65 report(
ERROR,
"EvtGen" ) <<
"Will terminate execution!" << endl;
68 double tolerance = 1e-10;
69 bool Y1is0 = fabs( _Yaxis.get( 0 ) ) < tolerance;
70 bool Y2is0 = fabs( _Yaxis.get( 1 ) ) < tolerance;
71 bool Y3is0 = fabs( _Yaxis.get( 2 ) ) < tolerance;
72 bool Z1is0 = fabs( _Zaxis.get( 0 ) ) < tolerance;
73 bool Z2is0 = fabs( _Zaxis.get( 1 ) ) < tolerance;
74 bool Z3is0 = fabs( _Zaxis.get( 2 ) ) < tolerance;
76 if ( Y1is0 && Y3is0 && Z1is0 && Z2is0 )
84 if ( Z1is0 && Z2is0 && !Y2is0 )
88 _gamma = acos( _Yaxis.get( 0 ) / _ry );
89 if ( _Yaxis.get( 1 ) < 0 ) _gamma = 2 *
pi - _gamma;
96 if ( Z1is0 && Z2is0 ) { _beta = 0; }
97 else { _beta = acos( _Zaxis.get( 2 ) / _rz ); }
101 if ( _beta == 0 ) { _alpha = 0.0; }
104 double cosalpha = _Zaxis.get( 0 ) / _rz /
sin( _beta );
105 if ( fabs( cosalpha ) > 1.0 ) cosalpha = cosalpha / fabs( cosalpha );
106 _alpha = acos( cosalpha );
107 if ( _Zaxis.get( 1 ) < 0.0 ) _alpha = 2 *
pi - _alpha;
113 double singamma = _Yaxis.get( 2 ) / _ry /
sin( _beta );
115 ( -_Yaxis.get( 0 ) / _ry -
cos( _alpha ) *
cos( _beta ) * singamma ) /
sin( _alpha );
116 if ( fabs( singamma ) > 1.0 ) singamma = singamma / fabs( singamma );
117 _gamma = asin( singamma );
118 if ( singamma > 0 && cosgamma < 0 ) _gamma =
pi - _gamma;
119 if ( singamma < 0 && cosgamma < 0 ) _gamma =
pi - _gamma;
120 if ( singamma < 0 && cosgamma > 0 ) _gamma = 2 *
pi + _gamma;