Logo ROOT   6.08/07
Reference Guide
TVector2.cxx
Go to the documentation of this file.
1 // @(#)root/physics:$Id$
2 // Author: Pasha Murat 12/02/99
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 /** \class TVector2
13  \ingroup Physics
14 
15 TVector2 is a general two vector class, which can be used for
16 the description of different vectors in 2D.
17 */
18 
19 #include "TROOT.h"
20 #include "TVector2.h"
21 #include "TClass.h"
22 #include "TMath.h"
23 
25 Double_t const kTWOPI = 2.*kPI;
26 
28 
29 ////////////////////////////////////////////////////////////////////////////////
30 /// Constructor
31 
33 {
34  fX = 0.;
35  fY = 0.;
36 }
37 
38 ////////////////////////////////////////////////////////////////////////////////
39 /// Constructor
40 
42 {
43  fX = v[0];
44  fY = v[1];
45 }
46 
47 ////////////////////////////////////////////////////////////////////////////////
48 /// Constructor
49 
51 {
52  fX = x0;
53  fY = y0;
54 }
55 
56 ////////////////////////////////////////////////////////////////////////////////
57 
59 {
60 }
61 
62 ////////////////////////////////////////////////////////////////////////////////
63 /// Return modulo of this vector
64 
66 {
67  return TMath::Sqrt(fX*fX+fY*fY);
68 }
69 
70 ////////////////////////////////////////////////////////////////////////////////
71 /// Return module normalized to 1
72 
74 {
75  return (Mod2()) ? *this/Mod() : TVector2();
76 }
77 
78 ////////////////////////////////////////////////////////////////////////////////
79 /// Return vector phi
80 
82 {
83  return TMath::Pi()+TMath::ATan2(-fY,-fX);
84 }
85 
86 ////////////////////////////////////////////////////////////////////////////////
87 /// Returns phi angle in the interval [0,2*PI)
88 
90  if(TMath::IsNaN(x)){
91  gROOT->Error("TVector2::Phi_0_2pi","function called with NaN");
92  return x;
93  }
94  while (x >= kTWOPI) x -= kTWOPI;
95  while (x < 0.) x += kTWOPI;
96  return x;
97 }
98 
99 ////////////////////////////////////////////////////////////////////////////////
100 /// Returns phi angle in the interval [-PI,PI)
101 
103  if(TMath::IsNaN(x)){
104  gROOT->Error("TVector2::Phi_mpi_pi","function called with NaN");
105  return x;
106  }
107  while (x >= kPI) x -= kTWOPI;
108  while (x < -kPI) x += kTWOPI;
109  return x;
110 }
111 
112 ////////////////////////////////////////////////////////////////////////////////
113 /// Rotation by phi
114 
116 {
117  return TVector2( fX*TMath::Cos(phi)-fY*TMath::Sin(phi), fX*TMath::Sin(phi)+fY*TMath::Cos(phi) );
118 }
119 
120 ////////////////////////////////////////////////////////////////////////////////
121 /// Set vector using mag and phi
122 
124 {
125  Double_t amag = TMath::Abs(mag);
126  fX = amag * TMath::Cos(phi);
127  fY = amag * TMath::Sin(phi);
128 }
129 ////////////////////////////////////////////////////////////////////////////////
130 /// Stream an object of class TVector2.
131 
132 void TVector2::Streamer(TBuffer &R__b)
133 {
134  if (R__b.IsReading()) {
135  UInt_t R__s, R__c;
136  Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
137  if (R__v > 2) {
138  R__b.ReadClassBuffer(TVector2::Class(), this, R__v, R__s, R__c);
139  return;
140  }
141  //====process old versions before automatic schema evolution
142  if (R__v < 2) TObject::Streamer(R__b);
143  R__b >> fX;
144  R__b >> fY;
145  R__b.CheckByteCount(R__s, R__c, TVector2::IsA());
146  //====end of old versions
147 
148  } else {
149  R__b.WriteClassBuffer(TVector2::Class(),this);
150  }
151 }
152 
154 {
155  //print vector parameters
156  Printf("%s %s (x,y)=(%f,%f) (rho,phi)=(%f,%f)",GetName(),GetTitle(),X(),Y(),
157  Mod(),Phi()*TMath::RadToDeg());
158 }
static Double_t Phi_0_2pi(Double_t x)
Returns phi angle in the interval [0,2*PI)
Definition: TVector2.cxx:89
Bool_t IsReading() const
Definition: TBuffer.h:83
Double_t fY
Definition: TVector2.h:25
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
short Version_t
Definition: RtypesCore.h:61
const char Option_t
Definition: RtypesCore.h:62
Double_t const kTWOPI
Definition: TVector2.cxx:25
Double_t fX
Definition: TVector2.h:24
Buffer base class used for serializing objects.
Definition: TBuffer.h:42
virtual Int_t CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss)=0
#define gROOT
Definition: TROOT.h:364
Double_t RadToDeg()
Definition: TMath.h:49
TVector2 Rotate(Double_t phi) const
Rotation by phi.
Definition: TVector2.cxx:115
const char * Class
Definition: TXMLSetup.cxx:64
Short_t Abs(Short_t d)
Definition: TMathBase.h:110
TVector2 is a general two vector class, which can be used for the description of different vectors in...
Definition: TVector2.h:18
Double_t x[n]
Definition: legend1.C:17
static Double_t Phi_mpi_pi(Double_t x)
Returns phi angle in the interval [-PI,PI)
Definition: TVector2.cxx:102
virtual ~TVector2()
Definition: TVector2.cxx:58
Double_t ATan2(Double_t, Double_t)
Definition: TMath.h:454
void Print(Option_t *option="") const
This method must be overridden when a class wants to print itself.
Definition: TVector2.cxx:153
SVector< double, 2 > v
Definition: Dict.h:5
TVector2()
Constructor.
Definition: TVector2.cxx:32
Double_t X() const
Definition: TVector2.h:72
unsigned int UInt_t
Definition: RtypesCore.h:42
#define Printf
Definition: TGeoToOCC.h:18
Double_t Cos(Double_t)
Definition: TMath.h:424
Double_t Pi()
Definition: TMath.h:44
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
#define ClassImp(name)
Definition: Rtypes.h:279
Double_t Phi() const
Return vector phi.
Definition: TVector2.cxx:81
double Double_t
Definition: RtypesCore.h:55
Double_t const kPI
Definition: TVector2.cxx:24
virtual const char * GetTitle() const
Returns title of object.
Definition: TObject.cxx:460
Double_t Y() const
Definition: TVector2.h:73
Int_t IsNaN(Double_t x)
Definition: TMath.h:613
Double_t Sin(Double_t)
Definition: TMath.h:421
TVector2 Unit() const
Return module normalized to 1.
Definition: TVector2.cxx:73
void SetMagPhi(Double_t mag, Double_t phi)
Set vector using mag and phi.
Definition: TVector2.cxx:123
Double_t Sqrt(Double_t x)
Definition: TMath.h:464
Double_t Mod2() const
Definition: TVector2.h:67
virtual const char * GetName() const
Returns name of object.
Definition: TObject.cxx:416
Double_t Mod() const
Return modulo of this vector.
Definition: TVector2.cxx:65
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0