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
Vector3D.h
Go to the documentation of this file.
1// -*- C++ -*-
2// ---------------------------------------------------------------------------
3//
4// This file is a part of the CLHEP - a Class Library for High Energy Physics.
5//
6// History:
7// 09.09.96 E.Chernyaev - initial version
8// 12.06.01 E.Chernyaev - CLHEP-1.7: introduction of BasicVector3D to decouple
9// the functionality from CLHEP::Hep3Vector
10// 01.04.03 E.Chernyaev - CLHEP-1.9: template version
11//
12
13#ifndef HEP_VECTOR3D_H
14#define HEP_VECTOR3D_H
15
16#include <iosfwd>
19
20namespace HepGeom {
21
22 class Transform3D;
23
24 /**
25 * Geometrical 3D Vector.
26 * This is just a declaration of the class needed to define
27 * specializations Vector3D<float> and Vector3D<double>.
28 *
29 * @ingroup geometry
30 * @author Evgeni Chernyaev <Evgueni.Tcherniaev@cern.ch>
31 */
32 template<class T>
33 class Vector3D : public BasicVector3D<T> {};
34
35 /**
36 * Geometrical 3D Vector with components of float type.
37 *
38 * @author Evgeni Chernyaev <Evgueni.Tcherniaev@cern.ch>
39 * @ingroup geometry
40 */
41 template<>
42 class Vector3D<float> : public BasicVector3D<float> {
43 public:
44 /**
45 * Default constructor. */
46 Vector3D() = default;
47
48 /**
49 * Constructor from three numbers. */
50 Vector3D(float x1, float y1, float z1) : BasicVector3D<float>(x1,y1,z1) {}
51
52 /**
53 * Constructor from array of floats. */
54 explicit Vector3D(const float * a)
55 : BasicVector3D<float>(a[0],a[1],a[2]) {}
56
57 /**
58 * Copy constructor. */
59 Vector3D(const Vector3D<float> &) = default;
60
61 /**
62 * Move constructor. */
64
65 /**
66 * Constructor from BasicVector3D<float>. */
68
69 /**
70 * Destructor. */
71 ~Vector3D() = default;
72
73 /**
74 * Assignment. */
76
77 /**
78 * Assignment from BasicVector3D<float>. */
81 return *this;
82 }
83
84 /**
85 * Move assignment. */
87
88 /**
89 * Transformation by Transform3D. */
90 Vector3D<float> & transform(const Transform3D & m);
91 };
92
93 /**
94 * Transformation of Vector<float> by Transform3D.
95 * @relates Vector3D
96 */
98 operator*(const Transform3D & m, const Vector3D<float> & v);
99
100 /**
101 * Geometrical 3D Vector with components of double type.
102 *
103 * @author Evgeni Chernyaev <Evgueni.Tcherniaev@cern.ch>
104 * @ingroup geometry
105 */
106 template<>
107 class Vector3D<double> : public BasicVector3D<double> {
108 public:
109 /**
110 * Default constructor. */
111 Vector3D() = default;
112
113 /**
114 * Constructor from three numbers. */
115 Vector3D(double x1, double y1, double z1) : BasicVector3D<double>(x1,y1,z1) {}
116
117 /**
118 * Constructor from array of floats. */
119 explicit Vector3D(const float * a)
120 : BasicVector3D<double>(a[0],a[1],a[2]) {}
121
122 /**
123 * Constructor from array of doubles. */
124 explicit Vector3D(const double * a)
125 : BasicVector3D<double>(a[0],a[1],a[2]) {}
126
127 /**
128 * Copy constructor. */
129 Vector3D(const Vector3D<double> &) = default;
130
131 /**
132 * Move constructor. */
134
135 /**
136 * Constructor from BasicVector3D<float>. */
137 Vector3D(const BasicVector3D<float> & v) : BasicVector3D<double>(v) {}
138
139 /**
140 * Constructor from BasicVector3D<double>. */
142
143 /**
144 * Destructor. */
145 ~Vector3D() = default;
146
147 /**
148 * Constructor from CLHEP::Hep3Vector.
149 * This constructor is needed only for backward compatibility and
150 * in principle should be absent.
151 */
153 : BasicVector3D<double>(v.x(),v.y(),v.z()) {}
154
155 /**
156 * Conversion (cast) to CLHEP::Hep3Vector.
157 * This operator is needed only for backward compatibility and
158 * in principle should not exit.
159 */
160 operator CLHEP::Hep3Vector () const { return CLHEP::Hep3Vector(x(),y(),z()); }
161
162 /**
163 * Assignment. */
165
166 /**
167 * Assignment from BasicVector3D<float>. */
170 return *this;
171 }
172
173 /**
174 * Assignment from BasicVector3D<double>. */
177 return *this;
178 }
179
180 /**
181 * Move assignment. */
183
184 /**
185 * Transformation by Transform3D. */
186 Vector3D<double> & transform(const Transform3D & m);
187 };
188
189 /**
190 * Transformation of Vector<double> by Transform3D.
191 * @relates Vector3D
192 */
194 operator*(const Transform3D & m, const Vector3D<double> & v);
195
196} /* namespace HepGeom */
197
198#endif /* HEP_VECTOR3D_H */
BasicVector3D< T > & operator=(const BasicVector3D< T > &)=default
Vector3D(const CLHEP::Hep3Vector &v)
Definition: Vector3D.h:152
Vector3D(Vector3D< double > &&)=default
Vector3D< double > & operator=(const Vector3D< double > &)=default
Vector3D(const BasicVector3D< double > &v)
Definition: Vector3D.h:141
Vector3D< double > & operator=(const BasicVector3D< float > &v)
Definition: Vector3D.h:168
Vector3D(const BasicVector3D< float > &v)
Definition: Vector3D.h:137
Vector3D< double > & operator=(Vector3D< double > &&)=default
Vector3D(const double *a)
Definition: Vector3D.h:124
Vector3D< double > & operator=(const BasicVector3D< double > &v)
Definition: Vector3D.h:175
Vector3D(const float *a)
Definition: Vector3D.h:119
Vector3D(double x1, double y1, double z1)
Definition: Vector3D.h:115
Vector3D(const Vector3D< double > &)=default
Vector3D(float x1, float y1, float z1)
Definition: Vector3D.h:50
Vector3D< float > & operator=(const BasicVector3D< float > &v)
Definition: Vector3D.h:79
Vector3D(const BasicVector3D< float > &v)
Definition: Vector3D.h:67
Vector3D< float > & operator=(Vector3D< float > &&)=default
Vector3D(const float *a)
Definition: Vector3D.h:54
Vector3D< float > & operator=(const Vector3D< float > &)=default
Vector3D(const Vector3D< float > &)=default
Vector3D(Vector3D< float > &&)=default
Normal3D< float > operator*(const Transform3D &m, const Normal3D< float > &v)
Definition: Normal3D.cc:23