00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TVector2
00013 #define ROOT_TVector2
00014
00015 #include "TObject.h"
00016
00017
00018 class TVector2 : public TObject {
00019
00020
00021
00022 protected:
00023
00024 Double_t fX;
00025 Double_t fY;
00026
00027
00028
00029 public:
00030
00031 TVector2 ();
00032 TVector2 (Double_t *s);
00033 TVector2 (Double_t x0, Double_t y0);
00034 virtual ~TVector2();
00035
00036
00037 TVector2& operator = (TVector2 const & v);
00038 TVector2& operator += (TVector2 const & v);
00039 TVector2& operator -= (TVector2 const & v);
00040 Double_t operator *= (TVector2 const & v);
00041 TVector2& operator *= (Double_t s);
00042 TVector2& operator /= (Double_t s);
00043
00044
00045
00046 friend TVector2 operator + (const TVector2&, const TVector2&);
00047 friend TVector2 operator + (const TVector2&, Double_t );
00048 friend TVector2 operator + (Double_t , const TVector2&);
00049 friend TVector2 operator - (const TVector2&, const TVector2&);
00050 friend TVector2 operator - (const TVector2&, Double_t );
00051 friend Double_t operator * (const TVector2&, const TVector2&);
00052 friend TVector2 operator * (const TVector2&, Double_t );
00053 friend TVector2 operator * (Double_t , const TVector2&);
00054 friend TVector2 operator / (const TVector2&, Double_t );
00055 friend Double_t operator ^ (const TVector2&, const TVector2&);
00056
00057
00058 void Set(const TVector2& v);
00059 void Set(Double_t x0, Double_t y0);
00060 void Set(float x0, float y0);
00061
00062
00063
00064 Double_t Mod2() const { return fX*fX+fY*fY; };
00065 Double_t Mod () const;
00066
00067 Double_t Px() const { return fX; };
00068 Double_t Py() const { return fY; };
00069 Double_t X () const { return fX; };
00070 Double_t Y () const { return fY; };
00071
00072
00073
00074 Double_t Phi () const;
00075 Double_t DeltaPhi(const TVector2& v) const;
00076 void SetMagPhi(Double_t mag, Double_t phi);
00077
00078
00079
00080 TVector2 Unit() const;
00081 TVector2 Ort () const;
00082
00083
00084
00085
00086 TVector2 Proj(const TVector2& v) const;
00087
00088
00089
00090 TVector2 Norm(const TVector2& v) const;
00091
00092
00093 TVector2 Rotate (Double_t phi) const;
00094
00095
00096 static Double_t Phi_0_2pi(Double_t x);
00097
00098 static Double_t Phi_mpi_pi(Double_t x);
00099
00100
00101 void Print(Option_t* option="") const;
00102
00103 ClassDef(TVector2,3)
00104
00105 };
00106
00107
00108
00109 inline TVector2& TVector2::operator = (TVector2 const& v) {fX = v.fX; fY = v.fY; return *this;}
00110 inline TVector2& TVector2::operator += (TVector2 const& v) {fX += v.fX; fY += v.fY; return *this;}
00111 inline TVector2& TVector2::operator -= (TVector2 const& v) {fX -= v.fX; fY -= v.fY; return *this;}
00112
00113
00114
00115 inline Double_t TVector2::operator *= (const TVector2& v) { return(fX*v.fX+fY*v.fY); }
00116
00117 inline TVector2& TVector2::operator *= (Double_t s) { fX *=s; fY *=s; return *this; }
00118 inline TVector2& TVector2::operator /= (Double_t s) { fX /=s; fY /=s; return *this; }
00119
00120
00121
00122 inline TVector2 operator + (const TVector2& v1, const TVector2& v2) {
00123 return TVector2(v1.fX+v2.fX,v1.fY+v2.fY);
00124 }
00125
00126 inline TVector2 operator + (const TVector2& v1, Double_t bias) {
00127 return TVector2 (v1.fX+bias,v1.fY+bias);
00128 }
00129
00130 inline TVector2 operator + (Double_t bias, const TVector2& v1) {
00131 return TVector2 (v1.fX+bias,v1.fY+bias);
00132 }
00133
00134 inline TVector2 operator - (const TVector2& v1, const TVector2& v2) {
00135 return TVector2(v1.fX-v2.fX,v1.fY-v2.fY);
00136 }
00137
00138 inline TVector2 operator - (const TVector2& v1, Double_t bias) {
00139 return TVector2 (v1.fX-bias,v1.fY-bias);
00140 }
00141
00142 inline TVector2 operator * (const TVector2& v, Double_t s) {
00143 return TVector2 (v.fX*s,v.fY*s);
00144 }
00145
00146 inline TVector2 operator * (Double_t s, const TVector2& v) {
00147 return TVector2 (v.fX*s,v.fY*s);
00148 }
00149
00150 inline Double_t operator * (const TVector2& v1, const TVector2& v2) {
00151 return v1.fX*v2.fX+v1.fY*v2.fY;
00152 }
00153
00154 inline TVector2 operator / (const TVector2& v, Double_t s) {
00155 return TVector2 (v.fX/s,v.fY/s);
00156 }
00157
00158 inline Double_t operator ^ (const TVector2& v1, const TVector2& v2) {
00159 return v1.fX*v2.fY-v1.fY*v2.fX;
00160 }
00161
00162 inline Double_t TVector2::DeltaPhi(const TVector2& v) const { return Phi_mpi_pi(Phi()-v.Phi()); }
00163
00164 inline TVector2 TVector2::Ort () const { return Unit(); }
00165
00166 inline TVector2 TVector2::Proj(const TVector2& v) const { return v*(((*this)*v)/v.Mod2()); }
00167
00168 inline TVector2 TVector2::Norm(const TVector2& v) const {return *this-Proj(v); }
00169
00170
00171
00172 inline void TVector2::Set(const TVector2& v ) { fX = v.fX; fY = v.fY; }
00173 inline void TVector2::Set(Double_t x0, Double_t y0) { fX = x0 ; fY = y0 ; }
00174 inline void TVector2::Set(float x0, float y0) { fX = x0 ; fY = y0 ; }
00175
00176 #endif