1 #ifndef GeometryVector_newBasic3DVector_h 2 #define GeometryVector_newBasic3DVector_h 68 template <
class OtherPo
int>
98 T x()
const {
return v[0]; }
101 T y()
const {
return v[1]; }
104 T z()
const {
return v[2]; }
106 T w()
const {
return v[3]; }
112 auto res =
v == rh.
v;
225 std::ostream&
print3D(std::ostream&
s,
double x,
double y,
double z);
230 inline std::ostream& operator<<(std::ostream& s, const Basic3DVector<T>&
v) {
244 template <
class T,
class U>
248 return RT(
a).
v + RT(
b).v;
251 template <
class T,
class U>
255 return RT(
a).
v - RT(
b).v;
265 template <
class T,
class U>
284 template <
class T,
typename S>
286 return static_cast<T>(
t) *
v;
289 template <
class T,
typename S>
291 return static_cast<T>(
t) *
v;
302 template <
class T,
typename S>
315 #endif // GeometryVector_Basic3DVector_h Basic3DVector(MathVector const &iv)
Basic3DVector< T > operator+(const Basic3DVector< T > &a, const Basic3DVector< T > &b)
vector sum and subtraction of vectors of possibly different precision
T x() const
Cartesian x coordinate.
T perp2() const
Squared magnitude of transverse component.
Basic3DVector(const T &x, const T &y, const T &z, const T &w=0)
construct from cartesian coordinates
T dot(const Basic3DVector &rh) const
Scalar product, or "dot" product, with a vector of same type.
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
class Basic3DVector __attribute__((aligned(16)))
Basic3DVector(const Basic3DVector &p)
Copy constructor from same type. Should not be needed but for gcc bug 12685.
bool operator==(const Basic3DVector &rh) const
Basic2DVector< T > xy() const
T y() const
Cartesian y coordinate.
T operator[](int i) const
Geom::Theta< T > theta() const
Basic3DVector & operator/=(T t)
Scaling by a scalar value (division)
Basic3DVector(const Geom::Theta< U > &theta, const Geom::Phi< U > &phi, const T &r)
Basic3DVector & operator*=(T t)
Scaling by a scalar value (multiplication)
Basic3DVector cross(const Basic3DVector &lh) const
Vector product, or "cross" product, with a vector of same type.
Basic3DVector & operator+=(const Basic3DVector< U > &p)
T transverse() const
Another name for perp()
Basic3DVector operator-() const
Unary minus, returns a vector with components (-x(),-y(),-z())
Basic2DVector< T > xy() const
MathVector const & mathVector() const
Basic3DVector< T > operator/(const Basic3DVector< T > &v, T t)
Basic3DVector & operator-=(const Basic3DVector< U > &p)
T operator*(const Basic3DVector< T > &v1, const Basic3DVector< T > &v2)
scalar product of vectors of same precision
Basic3DVector(Vec4< U > const &iv)
T perp() const
Magnitude of transverse component.
Basic3DVector(const Basic3DVector< U > &p)
Copy constructor and implicit conversion from Basic3DVector of different precision.
Basic3DVector(const Basic2DVector< T > &p)
constructor from 2D vector (X and Y from 2D vector, z set to zero)
Basic3DVector< double > Basic3DVectorD
T z() const
Cartesian z coordinate.
Geom::Spherical2Cartesian< T > Spherical
MathVector & mathVector()
Geom::Cylindrical2Cartesian< T > Cylindrical
T mag2() const
The vector magnitude squared. Equivalent to vec.dot(vec)
float __attribute__((always_inline)) __attribute__((pure)) eta(float x
Basic3DVector operator-() const
Unary minus, returns a vector with components (-x(),-y(),-z())
Basic3DVector unit() const
Basic3DVector< float > Basic3DVectorF
Geom::Phi< T > phi() const
std::ostream & print3D(std::ostream &s, double x, double y, double z)
T dot(const Basic3DVector &rh) const
Scalar product, or "dot" product, with a vector of same type.
Basic3DVector(const OtherPoint &p)
auto dot2(V1 x, V2 y) -> typename std::remove_reference< decltype(x[0])>::type
Basic3DVector & operator=(const Basic3DVector &)=default
Assignment operator.
MPlex< T, D1, D2, N > atan2(const MPlex< T, D1, D2, N > &y, const MPlex< T, D1, D2, N > &x)