Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
TwoVector.h
Go to the documentation of this file.
1// -*- C++ -*-
2// CLASSDOC OFF
3// ---------------------------------------------------------------------------
4// CLASSDOC ON
5//
6// This file is a part of the CLHEP - a Class Library for High Energy Physics.
7//
8// Hep2Vector is a general 2-vector class defining vectors in two
9// dimension using double components. It comes from the ZOOM
10// PlaneVector class (the PhysicsVectors PlaneVector.h will typedef
11// PlaneVector to Hep2Vector).
12//
13// .SS See Also
14// ThreeVector.h
15//
16// .SS Authors
17// John Marraffino and Mark Fischler
18//
19
20#ifndef HEP_TWOVECTOR_H
21#define HEP_TWOVECTOR_H
22
23#include <iostream>
24
26
27namespace CLHEP {
28
29// Declarations of classes and global methods
30class Hep2Vector;
31std::ostream & operator << (std::ostream &, const Hep2Vector &);
32std::istream & operator >> (std::istream &, Hep2Vector &);
33inline double operator * (const Hep2Vector & a,const Hep2Vector & b);
34inline Hep2Vector operator * (const Hep2Vector & p, double a);
35inline Hep2Vector operator * (double a, const Hep2Vector & p);
36 Hep2Vector operator / (const Hep2Vector & p, double a);
37inline Hep2Vector operator + (const Hep2Vector & a, const Hep2Vector & b);
38inline Hep2Vector operator - (const Hep2Vector & a, const Hep2Vector & b);
39
40/**
41 * @author
42 * @ingroup vector
43 */
45
46public:
47
49 // Safe indexing of the coordinates when using with matrices, arrays, etc.
50
51 inline Hep2Vector( double x = 0.0, double y = 0.0 );
52 // The constructor.
53
54 inline Hep2Vector(const Hep2Vector & p);
55 inline Hep2Vector(Hep2Vector && p) = default;
56 // The copy and move constructors.
57
58 explicit Hep2Vector( const Hep3Vector & );
59 // "demotion" constructor"
60 // WARNING -- THIS IGNORES THE Z COMPONENT OF THE Hep3Vector.
61 // SO IN GENERAL, Hep2Vector(v)==v WILL NOT HOLD!
62
63 inline ~Hep2Vector();
64 // The destructor.
65
66 inline double x() const;
67 inline double y() const;
68 // The components in cartesian coordinate system.
69
70 double operator () (int i) const;
71 inline double operator [] (int i) const;
72 // Get components by index. 0-based.
73
74 double & operator () (int i);
75 inline double & operator [] (int i);
76 // Set components by index. 0-based.
77
78 inline void setX(double x);
79 inline void setY(double y);
80 inline void set (double x, double y);
81 // Set the components in cartesian coordinate system.
82
83 inline double phi() const;
84 // The azimuth angle.
85
86 inline double mag2() const;
87 // The magnitude squared.
88
89 inline double mag() const;
90 // The magnitude.
91
92 inline double r() const;
93 // r in polar coordinates (r, phi): equal to mag().
94
95 inline void setPhi(double phi);
96 // Set phi keeping mag constant.
97
98 inline void setMag(double r);
99 // Set magnitude keeping phi constant.
100
101 inline void setR(double r);
102 // Set R keeping phi constant. Same as setMag.
103
104 inline void setPolar(double r, double phi);
105 // Set by polar coordinates.
106
107 inline Hep2Vector & operator = (const Hep2Vector & p);
108 inline Hep2Vector & operator = (Hep2Vector && p) = default;
109 // The copy and move assignment operators.
110
111 inline bool operator == (const Hep2Vector & v) const;
112 inline bool operator != (const Hep2Vector & v) const;
113 // Comparisons.
114
115 int compare (const Hep2Vector & v) const;
116 bool operator > (const Hep2Vector & v) const;
117 bool operator < (const Hep2Vector & v) const;
118 bool operator>= (const Hep2Vector & v) const;
119 bool operator<= (const Hep2Vector & v) const;
120 // dictionary ordering according to y, then x component
121
122 static inline double getTolerance();
123 static double setTolerance(double tol);
124
125 double howNear (const Hep2Vector &p) const;
126 bool isNear (const Hep2Vector & p, double epsilon=tolerance) const;
127
128 double howParallel (const Hep2Vector &p) const;
129 bool isParallel
130 (const Hep2Vector & p, double epsilon=tolerance) const;
131
132 double howOrthogonal (const Hep2Vector &p) const;
133 bool isOrthogonal
134 (const Hep2Vector & p, double epsilon=tolerance) const;
135
137 // Addition.
138
140 // Subtraction.
141
142 inline Hep2Vector operator - () const;
143 // Unary minus.
144
145 inline Hep2Vector & operator *= (double a);
146 // Scaling with real numbers.
147
148 inline Hep2Vector unit() const;
149 // Unit vector parallel to this.
150
151 inline Hep2Vector orthogonal() const;
152 // Vector orthogonal to this.
153
154 inline double dot(const Hep2Vector &p) const;
155 // Scalar product.
156
157 inline double angle(const Hep2Vector &) const;
158 // The angle w.r.t. another 2-vector.
159
160 void rotate(double);
161 // Rotates the Hep2Vector.
162
163 operator Hep3Vector () const;
164 // Cast a Hep2Vector as a Hep3Vector.
165
166 // The remaining methods are friends, thus defined at global scope:
167 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
168
169 friend std::ostream & operator<< (std::ostream &, const Hep2Vector &);
170 // Output to a stream.
171
172 inline friend double operator * (const Hep2Vector & a,
173 const Hep2Vector & b);
174 // Scalar product.
175
176 inline friend Hep2Vector operator * (const Hep2Vector & p, double a);
177 // v*c
178
179 inline friend Hep2Vector operator * (double a, const Hep2Vector & p);
180 // c*v
181
182 friend Hep2Vector operator / (const Hep2Vector & p, double a);
183 // v/c
184
185 inline friend Hep2Vector operator + (const Hep2Vector & a,
186 const Hep2Vector & b);
187 // v1+v2
188
189 inline friend Hep2Vector operator - (const Hep2Vector & a,
190 const Hep2Vector & b);
191 // v1-v2
192
193 enum { ZMpvToleranceTicks = 100 };
194
195private:
196
197 double dx;
198 double dy;
199 // The components.
200
201 static double tolerance;
202 // default tolerance criterion for isNear() to return true.
203
204}; // Hep2Vector
205
206static const Hep2Vector X_HAT2(1.0, 0.0);
207static const Hep2Vector Y_HAT2(0.0, 1.0);
208
209} // namespace CLHEP
210
211#include "CLHEP/Vector/TwoVector.icc"
212
213#endif /* HEP_TWOVECTOR_H */
G4double epsilon(G4double density, G4double temperature)
double mag2() const
Hep2Vector & operator+=(const Hep2Vector &p)
bool operator==(const Hep2Vector &v) const
bool isOrthogonal(const Hep2Vector &p, double epsilon=tolerance) const
Definition: TwoVector.cc:177
void setMag(double r)
bool operator<=(const Hep2Vector &v) const
Definition: TwoVector.cc:112
Hep2Vector operator-() const
double r() const
void setY(double y)
static double getTolerance()
friend std::ostream & operator<<(std::ostream &, const Hep2Vector &)
Definition: TwoVector.cc:69
double dot(const Hep2Vector &p) const
void setX(double x)
double howOrthogonal(const Hep2Vector &p) const
Definition: TwoVector.cc:162
double operator[](int i) const
double x() const
void setR(double r)
double angle(const Hep2Vector &) const
bool isNear(const Hep2Vector &p, double epsilon=tolerance) const
Definition: TwoVector.cc:116
Hep2Vector orthogonal() const
double howNear(const Hep2Vector &p) const
Definition: TwoVector.cc:121
double mag() const
double howParallel(const Hep2Vector &p) const
Definition: TwoVector.cc:133
void setPhi(double phi)
friend double operator*(const Hep2Vector &a, const Hep2Vector &b)
friend Hep2Vector operator+(const Hep2Vector &a, const Hep2Vector &b)
bool operator!=(const Hep2Vector &v) const
int compare(const Hep2Vector &v) const
Definition: TwoVector.cc:88
void setPolar(double r, double phi)
double phi() const
double y() const
bool isParallel(const Hep2Vector &p, double epsilon=tolerance) const
Definition: TwoVector.cc:149
Hep2Vector(const Hep3Vector &)
bool operator>(const Hep2Vector &v) const
Definition: TwoVector.cc:103
void set(double x, double y)
double operator()(int i) const
Definition: TwoVector.cc:27
Hep2Vector & operator*=(double a)
bool operator>=(const Hep2Vector &v) const
Definition: TwoVector.cc:109
Hep2Vector & operator=(const Hep2Vector &p)
Hep2Vector(const Hep2Vector &p)
void rotate(double)
Definition: TwoVector.cc:53
Hep2Vector & operator-=(const Hep2Vector &p)
static double setTolerance(double tol)
Definition: TwoVector.cc:20
Hep2Vector unit() const
bool operator<(const Hep2Vector &v) const
Definition: TwoVector.cc:106
Hep2Vector(Hep2Vector &&p)=default
Hep2Vector(double x=0.0, double y=0.0)
friend Hep2Vector operator/(const Hep2Vector &p, double a)
Definition: TwoVector.cc:61
Definition: DoubConv.h:17
Hep3Vector operator-(const Hep3Vector &, const Hep3Vector &)
Hep3Vector operator+(const Hep3Vector &, const Hep3Vector &)
HepLorentzRotation operator*(const HepRotation &r, const HepLorentzRotation &lt)
std::istream & operator>>(std::istream &is, HepRandom &dist)
Definition: Random.cc:223
std::ostream & operator<<(std::ostream &os, const HepRandom &dist)
Definition: Random.cc:219
HepLorentzVector operator/(const HepLorentzVector &, double a)