Belle II Software development
Vector3D Class Reference

A three dimensional vector. More...

#include <Vector3D.h>

Public Member Functions

 Vector3D ()
 Default constructor for ROOT compatibility.
 
 Vector3D (const TVector3 &tVector3)
 Constructor translating from a TVector3 instance.
 
 Vector3D (const B2Vector3D &b2Vector3)
 Constructor translating from a B2Vector3 instance.
 
 Vector3D (const ROOT::Math::XYZVector &xyzVector)
 Constructor translating from a ROOT::Math::XYZVector instance.
 
 Vector3D (double x, double y, double z)
 Constructor from three coordinates.
 
 Vector3D (const Vector2D &xy)
 Constructor augmeting a Vector2D to a Vector3D setting z to zero.
 
 Vector3D (const Vector2D &xy, double z)
 Constructor augmeting a Vector2D to a Vector3D setting z explicitly.
 
Vector3Doperator= (const TVector3 &tVector3)
 Assignment translating from a TVector3 instance.
 
Vector3Doperator= (const B2Vector3D &b2Vector3)
 Assignment translating from a B2Vector3 instance.
 
Vector3Doperator= (const ROOT::Math::XYZVector &xyzVector)
 Assignment translating from a ROOT::Math::XYZVector instance.
 
 operator const TVector3 () const
 Casting the back to TVector3 seamlessly.
 
 operator const B2Vector3D () const
 Casting the back to B2Vector3 seamlessly.
 
 operator const ROOT::Math::XYZVector () const
 Casting the back to ROOT::Math::XYZVector seamlessly.
 
bool operator== (const Vector3D &rhs) const
 Equality comparison with all three coordinates.
 
bool operator< (const Vector3D &rhs) const
 Total ordering based on cylindrical radius first the z component second and azimuth angle third.
 
bool isNull () const
 Checks if the vector is the null vector.
 
bool hasNAN () const
 Checks if one of the coordinates is NAN.
 
std::string __str__ () const
 Output operator for python.
 
double dot (const Vector3D &rhs) const
 Calculates the three dimensional dot product.
 
double Dot (const Vector3D &rhs) const
 Calculates the three dimensional dot product, ROOT::Math compatible.
 
double dotXY (const Vector3D &rhs) const
 Calculates the two dimensional dot product in xy projection.
 
Vector3D cross (const Vector3D &rhs) const
 Calculated the three dimensional cross product.
 
double crossXY (const Vector3D &rhs) const
 Calculates the two dimensional cross product in xy projection.
 
double crossXY (const Vector2D &rhs) const
 Calculates the two dimensional cross product in xy projection.
 
double normSquared () const
 Calculates the squared length of the vector.
 
double Mag2 () const
 Alias for normSquared.
 
double norm () const
 Calculates the length of the vector.
 
double distance (const Vector3D &rhs=Vector3D(0.0, 0.0, 0.0)) const
 Calculates the distance of this point to the rhs.
 
Vector3Dscale (const double factor)
 Scales the vector in place by the given factor.
 
Vector3Doperator*= (const double factor)
 Same as scale()
 
Vector3D scaled (const double factor) const
 Returns a scaled copy of the vector.
 
Vector3D operator* (const double factor) const
 Same as scaled()
 
Vector3Ddivide (const double denominator)
 Divides all coordinates by a common denominator in place.
 
Vector3Doperator/= (const double denominator)
 Same as divide()
 
Vector3D divided (const double denominator) const
 Returns a copy where all coordinates got divided by a common denominator.
 
Vector3D operator/ (const double denominator) const
 Same as divided()
 
Vector3Dadd (const Vector3D &rhs)
 Adds a vector to this in place.
 
Vector3Dadd (const Vector2D &rhs)
 Adds a two dimensional vector to this in place taking z of the given vector as zero.
 
Vector3Doperator+= (const Vector3D &rhs)
 Same as add()
 
Vector3Doperator+= (const Vector2D &rhs)
 Same as add()
 
Vector3Dsubtract (const Vector3D &rhs)
 Subtracts a vector to this in place.
 
Vector3Dsubtract (const Vector2D &rhs)
 Subtracts a two dimensional vector from this in place taking z of the given vector as zero.
 
Vector3Doperator-= (const Vector3D &rhs)
 Same as subtract()
 
Vector3Doperator-= (const Vector2D &rhs)
 Same as subtract()
 
Vector3D unit () const
 Returns a unit vector colaligned with this.
 
double normalize ()
 Normalizes the vector to unit length.
 
double normalizeTo (const double toLength)
 Normalizes the vector to the given length.
 
Vector3Dreverse ()
 Reverses the direction of the vector in place.
 
Vector3D reversed () const
 Returns a vector pointing in the opposite direction.
 
Vector3D operator- () const
 Same as reversed()
 
Vector3D operator+ (const Vector3D &rhs) const
 Returns a new vector as sum of this and rhs.
 
Vector3D operator- (const Vector3D &rhs) const
 Returns a new vector as difference of this and rhs.
 
double parallelComp (const Vector3D &relativTo) const
 Calculates the component parallel to the given vector.
 
double unnormalizedParallelComp (const Vector3D &relativTo) const
 Same as parallelComp() but assumes the given vector to be of unit length.
 
double orthogonalComp (const Vector3D &relativTo) const
 Calculates the component orthogonal to the given vector.
 
Vector3D orthogonalVector (const Vector3D &relativTo) const
 Calculates the part of this vector that is orthogonal to the given vector.
 
double unnormalizedOrthogonalComp (const Vector3D &relativTo) const
 Same as orthogonalComp() but assumes the given vector to be of unit length.
 
void passiveMoveBy (const Vector3D &by)
 Passively moves the vector inplace by the given vector.
 
Vector3D passiveMovedBy (const Vector3D &by)
 Passively moves the vector inplace by the given vector.
 
double x () const
 Getter for the x coordinate.
 
void setX (const double x)
 Setter for the x coordinate.
 
double y () const
 Getter for the y coordinate.
 
void setY (const double y)
 Setter for the y coordinate.
 
double z () const
 Getter for the z coordinate.
 
void setZ (const double z)
 Setter for the z coordinate.
 
const Vector2Dxy () const
 Getter for the xy projected vector ( reference ! )
 
void setXY (const Vector2D &xy)
 Setter for the xy projected vector.
 
void set (const double first, const double second, const double third)
 Setter for all three coordinates.
 
double cylindricalRSquared () const
 Getter for the squared cylindrical radius ( xy projected squared norm )
 
double cylindricalR () const
 Getter for the cylindrical radius ( xy projected norm )
 
double phi () const
 Getter for the azimuth angle.
 
double theta () const
 Getter for the polar angle.
 
double lambda () const
 Getter for lambda.
 
double cotTheta () const
 Getter for the cotangent of the polar angle.
 
double tanLambda () const
 Getter for the tangent of lambda equivalent to cotTheta()
 
Angle functions

These functions measure the angle between two vectors from this to rhs.


Because the three dimensional space does not have a unique orientation available,
the sign of the angle is not well defined. Therefore angles between three dimensional
vectors are always positive and so is the sine of the angle. The angle is bound by M_PI.

double cosWith (const Vector3D &rhs) const
 
double sinWith (const Vector3D &rhs) const
 Sine of the angle between this and rhs.
 
double angleWith (const Vector3D &rhs) const
 The angle between this and rhs.
 

Static Public Member Functions

static Vector3D average (const Vector3D &one, const Vector3D &two)
 Constructs the average of two vectors.
 
static Vector3D average (const Vector3D &one, const Vector3D &two, const Vector3D &three)
 Constructs the average of three vectors.
 
static Vector3D getLowest ()
 Getter for the lowest possible vector.
 

Private Attributes

Vector2D m_xy
 Memory for the first and second coordinate available as a vector.
 
double m_z
 Memory for the third coordinate.
 

Detailed Description

A three dimensional vector.

A three dimensional vector which is equipped with the expected vector methods.
Also this vector can be passed to functions where a TVector3 is expected syntactically.

Definition at line 34 of file Vector3D.h.

Constructor & Destructor Documentation

◆ Vector3D() [1/7]

Vector3D ( )
inline

Default constructor for ROOT compatibility.

Definition at line 38 of file Vector3D.h.

39 : m_xy(0.0, 0.0)
40 , m_z(0.0)
41 {
42 }

◆ Vector3D() [2/7]

Vector3D ( const TVector3 & tVector3)
explicit

Constructor translating from a TVector3 instance.

Definition at line 20 of file Vector3D.cc.

21 : m_xy(tVector3.X(), tVector3.Y())
22 , m_z(tVector3.Z())
23{
24}
Vector2D m_xy
Memory for the first and second coordinate available as a vector.
Definition Vector3D.h:576
double m_z
Memory for the third coordinate.
Definition Vector3D.h:579

◆ Vector3D() [3/7]

Vector3D ( const B2Vector3D & b2Vector3)
explicit

Constructor translating from a B2Vector3 instance.

Definition at line 26 of file Vector3D.cc.

27 : m_xy(b2Vector3.X(), b2Vector3.Y())
28 , m_z(b2Vector3.Z())
29{
30}
DataType Z() const
access variable Z (= .at(2) without boundary check)
Definition B2Vector3.h:435
DataType X() const
access variable X (= .at(0) without boundary check)
Definition B2Vector3.h:431
DataType Y() const
access variable Y (= .at(1) without boundary check)
Definition B2Vector3.h:433

◆ Vector3D() [4/7]

Vector3D ( const ROOT::Math::XYZVector & xyzVector)

Constructor translating from a ROOT::Math::XYZVector instance.

Definition at line 32 of file Vector3D.cc.

33 : m_xy(xyzVector.X(), xyzVector.Y())
34 , m_z(xyzVector.Z())
35{
36}

◆ Vector3D() [5/7]

Vector3D ( double x,
double y,
double z )
inline

Constructor from three coordinates.

Definition at line 54 of file Vector3D.h.

55 : m_xy(x, y)
56 , m_z(z)
57 {
58 }

◆ Vector3D() [6/7]

Vector3D ( const Vector2D & xy)
inlineexplicit

Constructor augmeting a Vector2D to a Vector3D setting z to zero.

Definition at line 61 of file Vector3D.h.

62 : m_xy(xy)
63 , m_z(0.0)
64 {
65 }

◆ Vector3D() [7/7]

Vector3D ( const Vector2D & xy,
double z )
inline

Constructor augmeting a Vector2D to a Vector3D setting z explicitly.

Definition at line 68 of file Vector3D.h.

69 : m_xy(xy)
70 , m_z(z)
71 {
72 }

Member Function Documentation

◆ __str__()

std::string __str__ ( ) const

Output operator for python.

Definition at line 82 of file Vector3D.cc.

83{
84 std::stringstream sstream;
85 sstream << *this;
86 return sstream.str();
87}

◆ add() [1/2]

Vector3D & add ( const Vector2D & rhs)
inline

Adds a two dimensional vector to this in place taking z of the given vector as zero.

Definition at line 324 of file Vector3D.h.

325 {
326 m_xy.add(rhs);
327 return *this;
328 }

◆ add() [2/2]

Vector3D & add ( const Vector3D & rhs)
inline

Adds a vector to this in place.

Definition at line 316 of file Vector3D.h.

317 {
318 m_xy.add(rhs.xy());
319 m_z += rhs.z();
320 return *this;
321 }

◆ angleWith()

double angleWith ( const Vector3D & rhs) const
inline

The angle between this and rhs.

Definition at line 248 of file Vector3D.h.

249 {
250 return atan2(sinWith(rhs), cosWith(rhs));
251 }

◆ average() [1/2]

static Vector3D average ( const Vector3D & one,
const Vector3D & two )
inlinestatic

Constructs the average of two vectors.

Computes the average of two vectors. If one vector contains NAN the average is the other vector, since the former is not considered a valid value.

Definition at line 88 of file Vector3D.h.

89 {
90 if (one.hasNAN()) {
91 return two;
92 } else if (two.hasNAN()) {
93 return one;
94 } else {
95 return Vector3D((one.x() + two.x()) / 2.0,
96 (one.y() + two.y()) / 2.0,
97 (one.z() + two.z()) / 2.0);
98 }
99 }
HepGeom::Vector3D< double > Vector3D
3D Vector
Definition Cell.h:34

◆ average() [2/2]

static Vector3D average ( const Vector3D & one,
const Vector3D & two,
const Vector3D & three )
inlinestatic

Constructs the average of three vectors.

Computes the average of three vectors. In case one of the three dimensional vectors contains an NAN, it is not considered a valid value for the average and is therefore left out. The average() of the other two vectors is then returned.

Definition at line 107 of file Vector3D.h.

108 {
109
110 if (one.hasNAN()) {
111 return average(two, three);
112 } else if (two.hasNAN()) {
113 return average(one, three);
114 } else if (three.hasNAN()) {
115 return average(one, two);
116 } else {
117 return Vector3D((one.x() + two.x() + three.x()) / 3.0,
118 (one.y() + two.y() + three.y()) / 3.0,
119 (one.z() + two.z() + three.z()) / 3.0);
120 }
121 }

◆ cosWith()

double cosWith ( const Vector3D & rhs) const
inline

Cosine of the angle between this and rhs

Definition at line 236 of file Vector3D.h.

237 {
238 return dot(rhs) / (norm() * rhs.norm());
239 }
T dot(GeneralVector< T > a, GeneralVector< T > b)
dot product of two general vectors

◆ cotTheta()

double cotTheta ( ) const
inline

Getter for the cotangent of the polar angle.

Definition at line 563 of file Vector3D.h.

564 {
565 return z() / cylindricalR();
566 }

◆ cross()

Vector3D cross ( const Vector3D & rhs) const
inline

Calculated the three dimensional cross product.

Definition at line 192 of file Vector3D.h.

193 {
194 return Vector3D(y() * rhs.z() - z() * rhs.y(),
195 z() * rhs.x() - x() * rhs.z(),
196 x() * rhs.y() - y() * rhs.x());
197 }

◆ crossXY() [1/2]

double crossXY ( const Vector2D & rhs) const
inline

Calculates the two dimensional cross product in xy projection.

Definition at line 206 of file Vector3D.h.

207 {
208 return xy().cross(rhs);
209 }

◆ crossXY() [2/2]

double crossXY ( const Vector3D & rhs) const
inline

Calculates the two dimensional cross product in xy projection.

Definition at line 200 of file Vector3D.h.

201 {
202 return xy().cross(rhs.xy());
203 }

◆ cylindricalR()

double cylindricalR ( ) const
inline

Getter for the cylindrical radius ( xy projected norm )

Definition at line 539 of file Vector3D.h.

540 {
541 return xy().norm();
542 }

◆ cylindricalRSquared()

double cylindricalRSquared ( ) const
inline

Getter for the squared cylindrical radius ( xy projected squared norm )

Definition at line 533 of file Vector3D.h.

534 {
535 return xy().normSquared();
536 }

◆ distance()

double distance ( const Vector3D & rhs = Vector3D(0.0, 0.0, 0.0)) const
inline

Calculates the distance of this point to the rhs.

Definition at line 255 of file Vector3D.h.

256 {
257 double deltaX = x() - rhs.x();
258 double deltaY = y() - rhs.y();
259 double deltaZ = z() - rhs.z();
260 return hypot3(deltaX, deltaY, deltaZ);
261 }

◆ divide()

Vector3D & divide ( const double denominator)
inline

Divides all coordinates by a common denominator in place.

Definition at line 290 of file Vector3D.h.

291 {
292 m_xy.divide(denominator);
293 m_z /= denominator;
294 return *this;
295 }

◆ divided()

Vector3D divided ( const double denominator) const
inline

Returns a copy where all coordinates got divided by a common denominator.

Definition at line 304 of file Vector3D.h.

305 {
306 return Vector3D(xy().divided(denominator), z() / denominator);
307 }

◆ Dot()

double Dot ( const Vector3D & rhs) const
inline

Calculates the three dimensional dot product, ROOT::Math compatible.

Definition at line 180 of file Vector3D.h.

181 {
182 return dot(rhs);
183 }

◆ dot()

double dot ( const Vector3D & rhs) const
inline

Calculates the three dimensional dot product.

Definition at line 175 of file Vector3D.h.

176 {
177 return x() * rhs.x() + y() * rhs.y() + z() * rhs.z();
178 }

◆ dotXY()

double dotXY ( const Vector3D & rhs) const
inline

Calculates the two dimensional dot product in xy projection.

Definition at line 186 of file Vector3D.h.

187 {
188 return x() * rhs.x() + y() * rhs.y();
189 }

◆ getLowest()

static Vector3D getLowest ( )
inlinestatic

Getter for the lowest possible vector.

The lowest possible vector according to the comparison is the null vector

Definition at line 154 of file Vector3D.h.

155 {
156 return Vector3D(0.0, 0.0, 0.0);
157 }

◆ hasNAN()

bool hasNAN ( ) const
inline

Checks if one of the coordinates is NAN.

Definition at line 166 of file Vector3D.h.

167 {
168 return std::isnan(x()) or std::isnan(y()) or std::isnan(z());
169 }

◆ isNull()

bool isNull ( ) const
inline

Checks if the vector is the null vector.

Definition at line 160 of file Vector3D.h.

161 {
162 return x() == 0.0 and y() == 0.0 and z() == 0.0;
163 }

◆ lambda()

double lambda ( ) const
inline

Getter for lambda.

Definition at line 557 of file Vector3D.h.

558 {
559 return atan2(z(), cylindricalR());
560 }

◆ Mag2()

double Mag2 ( ) const
inline

Alias for normSquared.

Definition at line 217 of file Vector3D.h.

218 {
219 return normSquared();
220 }

◆ norm()

double norm ( ) const
inline

Calculates the length of the vector.

Definition at line 223 of file Vector3D.h.

224 {
225 return hypot3(x(), y(), z());
226 }

◆ normalize()

double normalize ( )
inline

Normalizes the vector to unit length.

Normalizes the vector to unit length and returns the length the vector had before.
The null vector is not transformed.

Definition at line 378 of file Vector3D.h.

379 {
380 double result = norm();
381 if (result != 0.0) divide(result);
382 return result;
383 }

◆ normalizeTo()

double normalizeTo ( const double toLength)
inline

Normalizes the vector to the given length.

Normalizes the vector to the given length and returns the length the vector had before.
The null vector is not transformed.

Definition at line 388 of file Vector3D.h.

389 {
390 double result = norm();
391 if (result != 0.0) scale(toLength / result);
392 return result;
393 }

◆ normSquared()

double normSquared ( ) const
inline

Calculates the squared length of the vector.

Definition at line 212 of file Vector3D.h.

213 {
214 return x() * x() + y() * y() + z() * z();
215 }

◆ operator const B2Vector3D()

operator const B2Vector3D ( ) const

Casting the back to B2Vector3 seamlessly.

Definition at line 67 of file Vector3D.cc.

68{
69 return B2Vector3D(x(), y(), z());
70}
double x() const
Getter for the x coordinate.
Definition Vector3D.h:477
double y() const
Getter for the y coordinate.
Definition Vector3D.h:489
double z() const
Getter for the z coordinate.
Definition Vector3D.h:501
B2Vector3< double > B2Vector3D
typedef for common usage with double
Definition B2Vector3.h:516

◆ operator const ROOT::Math::XYZVector()

operator const ROOT::Math::XYZVector ( ) const

Casting the back to ROOT::Math::XYZVector seamlessly.

Definition at line 72 of file Vector3D.cc.

73{
74 return ROOT::Math::XYZVector(x(), y(), z());
75}

◆ operator const TVector3()

operator const TVector3 ( ) const

Casting the back to TVector3 seamlessly.

Definition at line 62 of file Vector3D.cc.

63{
64 return TVector3(x(), y(), z());
65}

◆ operator*()

Vector3D operator* ( const double factor) const
inline

Same as scaled()

Definition at line 284 of file Vector3D.h.

285 {
286 return scaled(factor);
287 }

◆ operator*=()

Vector3D & operator*= ( const double factor)
inline

Same as scale()

Definition at line 272 of file Vector3D.h.

273 {
274 return scale(factor);
275 }

◆ operator+()

Vector3D operator+ ( const Vector3D & rhs) const
inline

Returns a new vector as sum of this and rhs.

Definition at line 415 of file Vector3D.h.

416 {
417 return Vector3D(xy() + rhs.xy(), z() + rhs.z());
418 }

◆ operator+=() [1/2]

Vector3D & operator+= ( const Vector2D & rhs)
inline

Same as add()

Definition at line 337 of file Vector3D.h.

338 {
339 return add(rhs);
340 }

◆ operator+=() [2/2]

Vector3D & operator+= ( const Vector3D & rhs)
inline

Same as add()

Definition at line 331 of file Vector3D.h.

332 {
333 return add(rhs);
334 }

◆ operator-() [1/2]

Vector3D operator- ( ) const
inline

Same as reversed()

Definition at line 409 of file Vector3D.h.

410 {
411 return reversed();
412 }
EForwardBackward reversed(EForwardBackward eForwardBackward)
Return the reversed forward backward indicator. Leaves EForwardBackward::c_Invalid the same.

◆ operator-() [2/2]

Vector3D operator- ( const Vector3D & rhs) const
inline

Returns a new vector as difference of this and rhs.

Definition at line 421 of file Vector3D.h.

422 {
423 return Vector3D(xy() - rhs.xy(), z() - rhs.z());
424 }

◆ operator-=() [1/2]

Vector3D & operator-= ( const Vector2D & rhs)
inline

Same as subtract()

Definition at line 364 of file Vector3D.h.

365 {
366 return subtract(rhs);
367 }

◆ operator-=() [2/2]

Vector3D & operator-= ( const Vector3D & rhs)
inline

Same as subtract()

Definition at line 358 of file Vector3D.h.

359 {
360 return subtract(rhs);
361 }

◆ operator/()

Vector3D operator/ ( const double denominator) const
inline

Same as divided()

Definition at line 310 of file Vector3D.h.

311 {
312 return divided(denominator);
313 }

◆ operator/=()

Vector3D & operator/= ( const double denominator)
inline

Same as divide()

Definition at line 298 of file Vector3D.h.

299 {
300 return divide(denominator);
301 }

◆ operator<()

bool operator< ( const Vector3D & rhs) const
inline

Total ordering based on cylindrical radius first the z component second and azimuth angle third.

Total order achieving a lower bound Vector3D(0.0, 0.0, 0.0). By first taking the norm
for comparison the null vector is smaller than all other possible
vectors. Secondly the polar angle theta ( equivalently z ) and finally the azimuth
angle phi is considered to have a total ordering for all vectors.
Note does not commute with the projection to xy space.

Definition at line 146 of file Vector3D.h.

147 {
148 return norm() < rhs.norm() or (norm() == rhs.norm() and
149 (z() < rhs.z() or (z() == rhs.z() and (phi() < rhs.phi()))));
150 }

◆ operator=() [1/3]

Vector3D & operator= ( const B2Vector3D & b2Vector3)

Assignment translating from a B2Vector3 instance.

Definition at line 46 of file Vector3D.cc.

47{
48 m_xy.setX(b2Vector3.X());
49 m_xy.setY(b2Vector3.Y());
50 m_z = b2Vector3.Z();
51 return *this;
52}
void setY(const double y)
Setter for the y coordinate.
Definition Vector2D.h:651
void setX(const double x)
Setter for the x coordinate.
Definition Vector2D.h:636

◆ operator=() [2/3]

Vector3D & operator= ( const ROOT::Math::XYZVector & xyzVector)

Assignment translating from a ROOT::Math::XYZVector instance.

Definition at line 54 of file Vector3D.cc.

55{
56 m_xy.setX(xyzVector.X());
57 m_xy.setY(xyzVector.Y());
58 m_z = xyzVector.Z();
59 return *this;
60}

◆ operator=() [3/3]

Vector3D & operator= ( const TVector3 & tVector3)

Assignment translating from a TVector3 instance.

Definition at line 38 of file Vector3D.cc.

39{
40 m_xy.setX(tVector3.X());
41 m_xy.setY(tVector3.Y());
42 m_z = tVector3.Z();
43 return *this;
44}

◆ operator==()

bool operator== ( const Vector3D & rhs) const
inline

Equality comparison with all three coordinates.

Definition at line 133 of file Vector3D.h.

134 {
135 return x() == rhs.x() and y() == rhs.y() and z() == rhs.z();
136 }

◆ orthogonalComp()

double orthogonalComp ( const Vector3D & relativTo) const
inline

Calculates the component orthogonal to the given vector.

The orthogonal component is the rest of the vector not parallel to
relative to. Since the three dimensional space does not have a unique
orientation given by the vector relative to, the sign of the orthogonal
component is meaningless and is always set to positive

Definition at line 445 of file Vector3D.h.

446 {
447 return relativTo.cross(*this).norm() / relativTo.norm();
448 }

◆ orthogonalVector()

Vector3D orthogonalVector ( const Vector3D & relativTo) const
inline

Calculates the part of this vector that is orthogonal to the given vector.

Definition at line 451 of file Vector3D.h.

452 {
453 return *this - Belle2::VectorUtil::parallelVector(*this, relativTo);
454 }

◆ parallelComp()

double parallelComp ( const Vector3D & relativTo) const
inline

Calculates the component parallel to the given vector.

Definition at line 427 of file Vector3D.h.

428 {
429 return relativTo.dot(*this) / relativTo.norm();
430 }

◆ passiveMoveBy()

void passiveMoveBy ( const Vector3D & by)
inline

Passively moves the vector inplace by the given vector.

Definition at line 465 of file Vector3D.h.

466 {
467 subtract(by);
468 }

◆ passiveMovedBy()

Vector3D passiveMovedBy ( const Vector3D & by)
inline

Passively moves the vector inplace by the given vector.

Definition at line 471 of file Vector3D.h.

472 {
473 return *this - by;
474 }

◆ phi()

double phi ( ) const
inline

Getter for the azimuth angle.

Definition at line 545 of file Vector3D.h.

546 {
547 return xy().phi();
548 }

◆ reverse()

Vector3D & reverse ( )
inline

Reverses the direction of the vector in place.

Definition at line 396 of file Vector3D.h.

397 {
398 scale(-1.0);
399 return *this;
400 }

◆ reversed()

Vector3D reversed ( ) const
inline

Returns a vector pointing in the opposite direction.

Definition at line 403 of file Vector3D.h.

404 {
405 return scaled(-1.0);
406 }

◆ scale()

Vector3D & scale ( const double factor)
inline

Scales the vector in place by the given factor.

Definition at line 264 of file Vector3D.h.

265 {
266 m_xy.scale(factor);
267 m_z *= factor;
268 return *this;
269 }

◆ scaled()

Vector3D scaled ( const double factor) const
inline

Returns a scaled copy of the vector.

Definition at line 278 of file Vector3D.h.

279 {
280 return Vector3D(xy().scaled(factor), z() * factor);
281 }

◆ set()

void set ( const double first,
const double second,
const double third )
inline

Setter for all three coordinates.

Definition at line 525 of file Vector3D.h.

526 {
527 setX(first);
528 setY(second);
529 setZ(third);
530 }

◆ setX()

void setX ( const double x)
inline

Setter for the x coordinate.

Definition at line 483 of file Vector3D.h.

484 {
485 m_xy.setX(x);
486 }

◆ setXY()

void setXY ( const Vector2D & xy)
inline

Setter for the xy projected vector.

Definition at line 519 of file Vector3D.h.

520 {
521 m_xy = xy;
522 }

◆ setY()

void setY ( const double y)
inline

Setter for the y coordinate.

Definition at line 495 of file Vector3D.h.

496 {
497 m_xy.setY(y);
498 }

◆ setZ()

void setZ ( const double z)
inline

Setter for the z coordinate.

Definition at line 507 of file Vector3D.h.

508 {
509 m_z = z;
510 }

◆ sinWith()

double sinWith ( const Vector3D & rhs) const
inline

Sine of the angle between this and rhs.

Definition at line 242 of file Vector3D.h.

243 {
244 return cross(rhs).norm() / (norm() * rhs.norm());
245 }

◆ subtract() [1/2]

Vector3D & subtract ( const Vector2D & rhs)
inline

Subtracts a two dimensional vector from this in place taking z of the given vector as zero.

Definition at line 351 of file Vector3D.h.

352 {
353 m_xy.subtract(rhs);
354 return *this;
355 }

◆ subtract() [2/2]

Vector3D & subtract ( const Vector3D & rhs)
inline

Subtracts a vector to this in place.

Definition at line 343 of file Vector3D.h.

344 {
345 m_xy.subtract(rhs.xy());
346 m_z -= rhs.z();
347 return *this;
348 }

◆ tanLambda()

double tanLambda ( ) const
inline

Getter for the tangent of lambda equivalent to cotTheta()

Definition at line 569 of file Vector3D.h.

570 {
571 return z() / cylindricalR();
572 }

◆ theta()

double theta ( ) const
inline

Getter for the polar angle.

Definition at line 551 of file Vector3D.h.

552 {
553 return atan2(cylindricalR(), z());
554 }

◆ unit()

Vector3D unit ( ) const
inline

Returns a unit vector colaligned with this.

Definition at line 370 of file Vector3D.h.

371 {
372 return isNull() ? Vector3D(0.0, 0.0, 0.0) : divided(norm());
373 }

◆ unnormalizedOrthogonalComp()

double unnormalizedOrthogonalComp ( const Vector3D & relativTo) const
inline

Same as orthogonalComp() but assumes the given vector to be of unit length.

This assumes the given vector relativeTo to be of unit length and avoids
a costly computation of the vector norm()

Definition at line 459 of file Vector3D.h.

460 {
461 return relativTo.cross(*this).norm();
462 }

◆ unnormalizedParallelComp()

double unnormalizedParallelComp ( const Vector3D & relativTo) const
inline

Same as parallelComp() but assumes the given vector to be of unit length.

This assumes the given vector relativeTo to be of unit length and avoids
a costly computation of the vector norm()

Definition at line 435 of file Vector3D.h.

436 {
437 return relativTo.dot(*this);
438 }

◆ x()

double x ( ) const
inline

Getter for the x coordinate.

Definition at line 477 of file Vector3D.h.

478 {
479 return m_xy.x();
480 }

◆ xy()

const Vector2D & xy ( ) const
inline

Getter for the xy projected vector ( reference ! )

Definition at line 513 of file Vector3D.h.

514 {
515 return m_xy;
516 }

◆ y()

double y ( ) const
inline

Getter for the y coordinate.

Definition at line 489 of file Vector3D.h.

490 {
491 return m_xy.y();
492 }

◆ z()

double z ( ) const
inline

Getter for the z coordinate.

Definition at line 501 of file Vector3D.h.

502 {
503 return m_z;
504 }

Member Data Documentation

◆ m_xy

Vector2D m_xy
private

Memory for the first and second coordinate available as a vector.

Definition at line 576 of file Vector3D.h.

◆ m_z

double m_z
private

Memory for the third coordinate.

Definition at line 579 of file Vector3D.h.


The documentation for this class was generated from the following files: