00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _GEOPRIMITIVES_CLHEPTOEIGENEULERANGLESCONVERTERS_H
00011 #define _GEOPRIMITIVES_CLHEPTOEIGENEULERANGLESCONVERTERS_H
00012
00013 #include "GeoPrimitives/GeoPrimitives.h"
00014
00015 #include <math.h>
00016
00017
00018
00019 namespace Amg {
00020
00021
00030 inline Amg::Vector3D convert_CLHEPPhiThetaPsi_to_EigenEulerAngles(Amg::Vector3D clhep_angles, int convention = 0)
00031 {
00032 Amg::Vector3D eigen_angles;
00033
00034
00035 if (convention == 0) {
00036 eigen_angles(2) = -clhep_angles(0);
00037 eigen_angles(1) = -clhep_angles(1);
00038 eigen_angles(0) = -clhep_angles(2);
00039 }
00040
00041 else {
00042 eigen_angles(0) = -0.5 * clhep_angles(0);
00043 eigen_angles(1) = clhep_angles(1);
00044 eigen_angles(2) = clhep_angles(2);
00045 }
00046
00047 return eigen_angles;
00048 }
00049
00058 inline Amg::Vector3D convert_EigenEulerAngles_to_CLHEPPhiThetaPsi(Amg::Vector3D eigen_angles, int convention = 0)
00059 {
00060 Amg::Vector3D clhep_angles;
00061
00062 double phi;
00063 double theta;
00064 double psi;
00065
00080
00081 if (convention == 0) {
00082 phi = -eigen_angles(2);
00083 theta = -eigen_angles(1);
00084 psi = -eigen_angles(0);
00085 }
00086
00087 else {
00088 phi = -2 * eigen_angles(0);
00089 theta = eigen_angles(1);
00090 psi = eigen_angles(2);
00091 }
00092
00093 clhep_angles(0) = phi;
00094 clhep_angles(1) = theta;
00095 clhep_angles(2) = psi;
00096
00097 return clhep_angles;
00098
00099 }
00100
00101
00102 }
00103
00104
00105 #endif
00106
00107
00108
00109
00110