00001
00002 #include "Math/Vector3D.h"
00003 #include "Math/Point3D.h"
00004 #include "Math/Vector4D.h"
00005 #include "Math/EulerAngles.h"
00006
00007 #include "Math/Transform3D.h"
00008 #include "Math/LorentzRotation.h"
00009 #include "Math/Boost.h"
00010
00011 #include "Math/Rotation3D.h"
00012 #include "Math/RotationX.h"
00013 #include "Math/RotationY.h"
00014 #include "Math/RotationZ.h"
00015 #include "Math/Quaternion.h"
00016 #include "Math/AxisAngle.h"
00017 #include "Math/EulerAngles.h"
00018
00019 #include "Math/VectorUtil.h"
00020
00021 #include <iostream>
00022 #include <iterator>
00023 #include <vector>
00024 #include <list>
00025 #include <set>
00026 #include <algorithm>
00027
00028 using namespace ROOT::Math;
00029 using namespace ROOT::Math::VectorUtil;
00030
00031 template <class Rot>
00032 void printRot(const Rot & rot) {
00033 std::cout << "rot: ( " ;
00034 std::ostream_iterator<double> oi(std::cout," ");
00035 rot.GetComponents(oi);
00036 std::cout << ") " << std::endl;
00037 }
00038 template<class V>
00039 void printVec(const V & v ) {
00040 std::cout << "vec : ( " ;
00041 std::ostream_iterator<double> oi(std::cout," ");
00042 v.GetCoordinates(oi);
00043 std::cout << ") " << std::endl;
00044 }
00045 template<class L>
00046 void printList(const L & l ) {
00047 std::cout << "list : ( " ;
00048 std::ostream_iterator<double> oi(std::cout," ");
00049 std::copy(l.begin(),l.end(),oi);
00050 std::cout << ") " << std::endl;
00051 }
00052
00053 void testOstreamIter() {
00054
00055 XYZVector v(1.,2.,3);
00056 printVec(v);
00057 XYZPoint p(v); printVec(p);
00058 XYZTVector q(1.,2,3,4); printVec(q);
00059
00060 AxisAngle ar(v,4.); printRot(ar);
00061 EulerAngles er(ar); printRot(er);
00062 Quaternion qr(er); printRot(qr);
00063 Rotation3D rr(qr) ; printRot(rr);
00064
00065 Transform3D t(rr,v); printRot(t);
00066
00067
00068 Boost b(0.3,0.4,0.8); printRot(b);
00069 LorentzRotation lr(rr); printRot(lr);
00070 LorentzRotation lr2(b); printRot(lr2);
00071
00072 }
00073
00074 void testListIter() {
00075
00076
00077 double d[10] = {1,2,3,4,5,6,7,8,9,10};
00078 std::list<double> inputData(d,d+3);
00079
00080 XYZVector v; v.SetCoordinates(inputData.begin(), inputData.end() );
00081 std::list<double> data(3);
00082 v.GetCoordinates(data.begin(),data.end());
00083 printList(data);
00084
00085 inputData = std::list<double>(d+3,d+6);
00086 XYZPoint p; p.SetCoordinates(inputData.begin(),inputData.end() );
00087 data.clear();
00088 data = std::list<double>(3);
00089 p.GetCoordinates(data.begin(), data.end() );
00090 printList(data);
00091
00092 inputData = std::list<double>(d+6,d+10);
00093 XYZTVector q; q.SetCoordinates(inputData.begin(),inputData.end() );
00094 data.clear();
00095 data = std::list<double>(4);
00096 q.GetCoordinates(data.begin(), data.end() );
00097 printList(data);
00098
00099
00100 inputData = std::list<double>(d,d+3);
00101 EulerAngles re(inputData.begin(), inputData.end() );
00102 data = std::list<double>(3);
00103 re.GetComponents(data.begin(), data.end() );
00104 printList(data);
00105
00106 inputData = std::list<double>(d,d+4);
00107 AxisAngle ra(inputData.begin(), inputData.end() );
00108 data = std::list<double>(4);
00109 ra.GetComponents(data.begin(), data.end() );
00110 printList(data);
00111
00112 inputData = std::list<double>(d,d+4);
00113 Quaternion rq(inputData.begin(), inputData.end() );
00114 data = std::list<double>(4);
00115 rq.GetComponents(data.begin(), data.end() );
00116 printList(data);
00117
00118 double b[3] = {0.3,0.4,0.8};
00119 inputData = std::list<double>(b,b+3);
00120 Boost bst(inputData.begin(), inputData.end() );
00121 data = std::list<double>(3);
00122 bst.GetComponents(data.begin(), data.end() );
00123 printList(data);
00124
00125 Rotation3D tmp(ra);
00126 inputData = std::list<double>(9);
00127 tmp.GetComponents(inputData.begin()); printList(inputData);
00128 Rotation3D r(inputData.begin(),inputData.end());
00129 data = std::list<double>(9);
00130 r.GetComponents(data.begin(), data.end() );
00131 printList(data);
00132
00133
00134 Transform3D ttmp(r,XYZVector(1,2,3));
00135 inputData = std::list<double>(12);
00136 ttmp.GetComponents(inputData.begin()); printList(inputData);
00137 Transform3D t(inputData.begin(),inputData.end());
00138 data = std::list<double>(12);
00139 t.GetComponents(data.begin(), data.end() );
00140 printList(data);
00141
00142
00143 LorentzRotation ltmp(bst);
00144 inputData = std::list<double>(16);
00145 ltmp.GetComponents(inputData.begin()); printList(inputData);
00146 LorentzRotation lr(inputData.begin(),inputData.end());
00147 data = std::list<double>(16);
00148 lr.GetComponents(data.begin(), data.end() );
00149 printList(data);
00150
00151
00152 }
00153
00154 int main() {
00155
00156 testOstreamIter();
00157 testListIter();
00158
00159
00160 }