00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef DifVector_H
00024 #define DifVector_H
00025
00026 #include "MdcRecoUtil/DifNumber.h"
00027 #include "CLHEP/Vector/ThreeVector.h"
00028 #include <iosfwd>
00029 class DifRotation;
00030 using CLHEP::Hep3Vector;
00031
00032 class DifVector {
00033
00034 public:
00035
00036
00037 DifVector();
00038 DifVector
00039 (const DifNumber& x,const DifNumber& y,const DifNumber& z);
00040 DifVector
00041 (double x,double y,double z);
00042 DifVector
00043 (const Hep3Vector& v);
00044 DifVector(const DifVector& v);
00045
00046
00047 ~DifVector() {}
00048
00049
00050 HepSymMatrix errorMatrix
00051 (const HepSymMatrix& e)const;
00052
00053
00054 HepMatrix jacobian()const;
00055
00056
00057 inline DifVector& operator+=(const DifVector& v);
00058 inline DifVector& operator-=(const DifVector& v);
00059 inline DifVector& operator*=(const DifNumber& n);
00060 inline DifVector& operator*=(const double& n);
00061 DifVector& operator/=(const DifNumber& n);
00062 DifVector& operator/=(const double& n);
00063 inline DifVector& operator=(const DifVector & v);
00064 inline DifVector operator-()const;
00065
00066 inline friend DifVector operator+
00067 (const DifVector& a,const DifVector& b);
00068 inline friend DifVector operator-
00069 (const DifVector& a,const DifVector& b);
00070 inline friend DifNumber operator*
00071 (const DifVector& a,const DifVector& b);
00072 inline friend DifVector operator*
00073 (const DifVector& v,const DifNumber& n);
00074 inline friend DifVector operator*
00075 (const DifNumber& n,const DifVector& v);
00076 inline friend DifVector operator/
00077 (const DifVector& v,const DifNumber& n);
00078 inline friend DifVector operator*
00079 (const DifVector& v,const double& n);
00080 inline friend DifVector operator*
00081 (const double& n,const DifVector& v);
00082 inline friend DifVector operator/
00083 (const DifVector& v,const double& n);
00084
00085
00086
00087 inline friend DifVector cross(const DifVector& a,const DifVector& b);
00088
00089
00090 inline int nPar()const;
00091
00092
00093 void print()const;
00094
00095
00096
00097
00098
00099 inline DifVector& flipsign();
00100 inline DifVector& normalize();
00101 inline DifVector& zeroDerivatives();
00102
00103
00104
00105 inline DifVector& rotate(const DifVector& axis,const DifNumber& angle);
00106 inline DifVector& rotate(const DifVector& axis, const DifNumber& cosine, const DifNumber& sine);
00107 DifVector& rotate(const DifNumber& alpha,const DifNumber& beta,const DifNumber& gamma);
00108 DifVector& rotate(const DifRotation& r);
00109 inline DifVector& rotateX(const DifNumber& angle);
00110 inline DifVector& rotateX(const DifNumber& cosine,const DifNumber& sine);
00111 inline DifVector& rotateY(const DifNumber& angle);
00112 inline DifVector& rotateY(const DifNumber& cosine,const DifNumber& sine);
00113 inline DifVector& rotateZ(const DifNumber& angle);
00114 inline DifVector& rotateZ(const DifNumber& cosine,const DifNumber& sine);
00115
00116 inline DifVector& rotate(const DifVector& axis,const double& angle);
00117 inline DifVector& rotate(const DifVector& axis, const double& cosine, const double& sine);
00118 DifVector& rotate(const double& alpha,const double& beta,const double& gamma);
00119 inline DifVector& rotateX(const double& angle);
00120 inline DifVector& rotateX(const double& cosine,const double& sine);
00121 inline DifVector& rotateY(const double& angle);
00122 inline DifVector& rotateY(const double& cosine,const double& sine);
00123 inline DifVector& rotateZ(const double& angle);
00124 inline DifVector& rotateZ(const double& cosine,const double& sine);
00125
00126
00127 inline DifVector transverse
00128 (const DifVector& v)const;
00129 inline DifNumber dot
00130 (const DifVector& v)const;
00131 inline DifNumber length()const;
00132 inline DifNumber lengthSq()const;
00133 inline DifVector unit()const;
00134 inline DifNumber perp()const;
00135 inline DifNumber perpSq()const;
00136
00137
00138
00139 DifNumber r()const;
00140 DifNumber phi()const;
00141 DifNumber theta()const;
00142 DifNumber cosTheta()const;
00143
00144
00145 public:
00146
00147
00148 DifNumber x;
00149 DifNumber y;
00150 DifNumber z;
00151
00152
00153 };
00154
00155
00156
00157
00158
00159
00160
00161 #include "MdcRecoUtil/DifVector.icc"
00162
00163 #endif
00164
00165
00166
00167
00168
00169
00170
00171
00172