Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/clhep/include/CLHEP/Geometry/Vector3D.h

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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>
 17 #include "CLHEP/Vector/ThreeVector.h"
 18 #include "CLHEP/Geometry/BasicVector3D.h"
 19 
 20 namespace 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. */
 63     Vector3D(Vector3D<float> &&) = default;
 64 
 65     /**
 66      * Constructor from BasicVector3D<float>. */
 67     Vector3D(const BasicVector3D<float> & v) : BasicVector3D<float>(v) {}
 68 
 69     /**
 70      * Destructor. */
 71     ~Vector3D() = default;
 72 
 73     /**
 74      * Assignment. */
 75     Vector3D<float> & operator=(const Vector3D<float> &) = default;
 76 
 77     /**
 78      * Assignment from BasicVector3D<float>. */
 79     Vector3D<float> & operator=(const BasicVector3D<float> & v) {
 80       this->BasicVector3D<float>::operator=(v);
 81       return *this;
 82     }
 83 
 84     /**
 85      * Move assignment. */
 86     Vector3D<float> & operator=(Vector3D<float> &&) = default;
 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    */
 97   Vector3D<float>
 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. */
133     Vector3D(Vector3D<double> &&) = default;
134 
135     /**
136      * Constructor from BasicVector3D<float>. */
137     Vector3D(const BasicVector3D<float> & v) : BasicVector3D<double>(v) {}
138 
139     /**
140      * Constructor from BasicVector3D<double>. */
141     Vector3D(const BasicVector3D<double> & v) : BasicVector3D<double>(v) {}
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      */
152     Vector3D(const CLHEP::Hep3Vector & v)
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. */
164     Vector3D<double> & operator=(const Vector3D<double> &) = default;
165 
166     /**
167      * Assignment from BasicVector3D<float>. */
168     Vector3D<double> & operator=(const BasicVector3D<float> & v) {
169       this->BasicVector3D<double>::operator=(v);
170       return *this;
171     }
172 
173     /**
174      * Assignment from BasicVector3D<double>. */
175     Vector3D<double> & operator=(const BasicVector3D<double> & v) {
176       this->BasicVector3D<double>::operator=(v);
177       return *this;
178     }
179 
180     /**
181      * Move assignment. */
182     Vector3D<double> & operator=(Vector3D<double> &&) = default;
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    */
193   Vector3D<double>
194   operator*(const Transform3D & m, const Vector3D<double> & v);
195 
196 } /* namespace HepGeom */
197 
198 #endif /* HEP_VECTOR3D_H */
199