20#ifndef ROOT_Math_GenVector_DisplacementVector3D 
   21#define ROOT_Math_GenVector_DisplacementVector3D  1 
   57    template <
class CoordSystem, 
class Tag = DefaultCoordinateSystemTag >
 
   62      typedef typename CoordSystem::Scalar 
Scalar;
 
   86      template <
class OtherCoords>
 
   95      template <
class OtherCoords>
 
  104      template <
class ForeignVector>
 
  118      template <
class LAVector>
 
  131      template <
class OtherCoords>
 
  142      template <
class OtherCoords>
 
  154      template <
class ForeignVector>
 
  170      template <
class LAVector>
 
  203      { 
IT a = begin; 
IT b = ++begin; 
IT c = ++begin;
 
 
  228      { 
IT a = begin; 
IT b = ++begin; 
IT c = ++begin;
 
 
  337         const auto tot = 
R();
 
 
  403      template< 
class OtherCoords >
 
  405        return X()*
v.X() + 
Y()*
v.Y() + 
Z()*
v.Z();
 
 
  412      template< 
class OtherVector >
 
  414        return X()*
v.x() + 
Y()*
v.y() + 
Z()*
v.z();
 
 
  423      template <
class OtherCoords>
 
  427                         Z()*
v.X() - 
v.Z()*
X(),
 
  428                         X()*
v.Y() - 
v.X()*
Y() );
 
 
  437      template <
class OtherVector>
 
  441                         Z()*
v.x() - 
v.z()*
X(),
 
  442                         X()*
v.y() - 
v.x()*
Y() );
 
 
  451      template <
class OtherCoords>
 
  461      template <
class OtherCoords>
 
  537       static constexpr unsigned int fDimension = CoordinateType::Dimension;
 
  539#ifdef NOT_SURE_THIS_SHOULD_BE_FORBIDDEN 
  550      template <
class OtherCoords, 
class OtherTag>
 
  553      template <
class OtherCoords, 
class OtherTag>
 
  556      template <
class OtherCoords, 
class OtherTag>
 
  560      template <
class OtherCoords, 
class OtherTag>
 
  563      template <
class OtherCoords, 
class OtherTag>
 
  566      template <
class OtherCoords, 
class OtherTag>
 
  569      template<
class OtherCoords, 
class OtherTag >
 
  572      template<
class OtherCoords, 
class OtherTag >
 
 
  588    template <
class CoordSystem1, 
class CoordSystem2, 
class U>
 
  601    template <
class CoordSystem1, 
class CoordSystem2, 
class U>
 
  612    template <
class CoordSystem, 
class U>
 
  630    template <
class char_t, 
class traits_t, 
class T, 
class U,
 
  631              typename std::enable_if<std::is_arithmetic<typename DisplacementVector3D<T, U>::Scalar>
::value>
::type * =
 
  633    std::basic_ostream<char_t, traits_t> &
operator<<(std::basic_ostream<char_t, traits_t> &os,
 
  638          typename T::Scalar 
a, 
b, 
c;
 
  639          v.GetCoordinates(
a, 
b, 
c);
 
  643             typedef GenVector_detail::BitReproducible 
BR;
 
  655    template <
class char_t, 
class traits_t, 
class T, 
class U,
 
  656              typename std::enable_if<!std::is_arithmetic<typename DisplacementVector3D<T, U>::Scalar>
::value>
::type * =
 
  658    std::basic_ostream<char_t, traits_t> &
operator<<(std::basic_ostream<char_t, traits_t> &os,
 
  664             os << 
"(" << 
v.x()[i] << 
"," << 
v.y()[i] << 
"," << 
v.z()[i] << 
") ";
 
  671    template< 
class char_t, 
class traits_t, 
class T, 
class U >
 
  673      std::basic_istream<char_t,traits_t> &
 
  680      typename T::Scalar 
a, 
b, 
c;
 
  697        v.SetCoordinates(
a, 
b, 
c);
 
 
  703    template <std::
size_t I, 
class CoordSystem, 
class Tag>
 
  706       static_assert(
I < 3);
 
  707       if constexpr (
I == 0) {
 
  709       } 
else if constexpr (
I == 1) {
 
 
  723   template <
class CoordSystem, 
class Tag>
 
  724   struct tuple_size<
ROOT::Math::DisplacementVector3D<CoordSystem, Tag>> : integral_constant<size_t, 3> {};
 
  725   template <
size_t I, 
class CoordSystem, 
class Tag>
 
  727      static_assert(
I < 3);
 
  728      using type = 
typename CoordSystem::Scalar;
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
 
winID h TVirtualViewer3D TVirtualGLPainter p
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t dest
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t src
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
 
Class describing a 3D cartesian coordinate system (x, y, z coordinates)
 
Class describing a generic displacement vector in 3 dimensions.
 
constexpr DisplacementVector3D(const DisplacementVector3D< OtherCoords, OtherTag > &)
 
DisplacementVector3D< CoordSystem, Tag > & SetCoordinates(IT begin, IT end)
Set internal data based on 3 Scalars at *begin to *end.
 
Scalar Theta() const
Polar theta, converting if necessary from internal coordinate system.
 
constexpr DisplacementVector3D(Scalar a, Scalar b, Scalar c)
Construct from three values of type Scalar.
 
DisplacementVector3D & operator-=(const DisplacementVector3D< OtherCoords, OtherTag > &)
 
CoordSystem Coordinates() const
Retrieve a copy of the coordinates object.
 
DisplacementVector3D< CoordSystem, Tag > & SetRho(Scalar rr)
Change Rho - CylindricalEta3D coordinates only.
 
constexpr DisplacementVector3D(const PositionVector3D< OtherCoords, Tag > &p)
Construct from a position vector expressed in different coordinates but with the same coordinate syst...
 
DisplacementVector3D & operator=(const DisplacementVector3D< OtherCoords, Tag > &v)
Assignment operator from a displacement vector of arbitrary type.
 
DisplacementVector3D & operator+=(const DisplacementVector3D< OtherCoords, OtherTag > &)
 
DisplacementVector3D< CoordSystem, Tag > & SetEta(Scalar etaval)
Change Eta - CylindricalEta3D coordinates only.
 
Scalar R() const
Polar R, converting if necessary from internal coordinate system.
 
DisplacementVector3D & operator/=(Scalar a)
divide this vector by a scalar quantity
 
DisplacementVector3D< CoordSystem, Tag > & SetPhi(Scalar ang)
Change Phi - Polar3D or CylindricalEta3D coordinates.
 
DisplacementVector3D< CoordSystem, Tag > & SetR(Scalar rr)
Change R - Polar3D coordinates only.
 
constexpr DisplacementVector3D(const PositionVector3D< OtherCoords, OtherTag > &)
 
DisplacementVector3D Cross(const OtherVector &v) const
Return vector (cross) product of two vectors, as a vector in the coordinate system of this class.
 
DisplacementVector3D Unit() const
return unit vector parallel to this (scalar)
 
DisplacementVector3D operator+() const
Positive of the vector, return itself.
 
DisplacementVector3D operator-() const
Negative of the vector.
 
DisplacementVector3D< CoordSystem, Tag > & SetCoordinates(Scalar a, Scalar b, Scalar c)
Set internal data based on 3 Scalar numbers.
 
DisplacementVector3D< CoordSystem, Tag > & SetY(Scalar yy)
Change Y - Cartesian3D coordinates only.
 
constexpr DisplacementVector3D(const ForeignVector &v)
Construct from a foreign 3D vector type, for example, Hep3Vector Precondition: v must implement metho...
 
Scalar X() const
Cartesian X, converting if necessary from internal coordinate system.
 
DisplacementVector3D< CoordSystem, Tag > & SetZ(Scalar zz)
Change Z - Cartesian3D coordinates only.
 
void GetCoordinates(Scalar dest[]) const
get internal data into a C-style array of 3 Scalar numbers
 
static constexpr unsigned int fDimension
 
void GetCoordinates(Scalar &a, Scalar &b, Scalar &c) const
get internal data into 3 Scalar numbers
 
void GetCoordinates(IT begin) const
get internal data into 3 Scalars starting at *begin
 
Scalar Y() const
Cartesian Y, converting if necessary from internal coordinate system.
 
Scalar Dot(const OtherVector &v) const
Return the scalar (dot) product of two vectors.
 
DisplacementVector3D Cross(const DisplacementVector3D< OtherCoords, Tag > &v) const
Return vector (cross) product of two displacement vectors, as a vector in the coordinate system of th...
 
DisplacementVector3D< CoordSystem, Tag > & SetTheta(Scalar ang)
Change Theta - Polar3D coordinates only.
 
DisplacementVector3D operator*(Scalar a) const
Multiply a vector by a real number.
 
constexpr DisplacementVector3D(const DisplacementVector3D< OtherCoords, Tag > &v)
Construct from a displacement vector expressed in different coordinates, or using a different Scalar ...
 
bool operator==(const DisplacementVector3D &rhs) const
Exact equality.
 
Scalar Rho() const
Cylindrical transverse component rho.
 
DisplacementVector3D Cross(const DisplacementVector3D< OtherCoords, OtherTag > &) const
 
bool operator!=(const DisplacementVector3D &rhs) const
 
DisplacementVector3D unit() const
 
DisplacementVector3D< CoordSystem, Tag > & SetCoordinates(const Scalar src[])
Set internal data based on a C-style array of 3 Scalar numbers.
 
DisplacementVector3D & operator=(const PositionVector3D< OtherCoords, OtherTag > &)
 
Scalar Dot(const DisplacementVector3D< OtherCoords, OtherTag > &) const
 
Scalar Phi() const
Polar phi, converting if necessary from internal coordinate system.
 
CoordSystem CoordinateType
 
unsigned int Dimension() const
Dimension.
 
DisplacementVector3D< CoordSystem, Tag > & SetX(Scalar xx)
Change X - Cartesian3D coordinates only.
 
Scalar Mag2() const
Magnitute squared ( r^2 in spherical coordinate)
 
DisplacementVector3D< CoordSystem, Tag > & SetXYZ(Scalar a, Scalar b, Scalar c)
set the values of the vector from the cartesian components (x,y,z) (if the vector is held in polar or...
 
Scalar Perp2() const
Transverse component squared (rho^2 in cylindrical coordinates.
 
DisplacementVector3D & operator*=(Scalar a)
multiply this vector by a scalar quantity
 
DisplacementVector3D operator/(Scalar a) const
Division of a vector with a real number.
 
Scalar Eta() const
Polar eta, converting if necessary from internal coordinate system.
 
constexpr DisplacementVector3D()
Default constructor.
 
Scalar Z() const
Cartesian Z, converting if necessary from internal coordinate system.
 
void GetCoordinates(IT begin, IT end) const
get internal data into 3 Scalars at *begin to *end (3 past begin)
 
Scalar Dot(const DisplacementVector3D< OtherCoords, Tag > &v) const
Return the scalar (dot) product of two displacement vectors.
 
CoordSystem::Scalar Scalar
 
DisplacementVector3D & operator=(const DisplacementVector3D< OtherCoords, OtherTag > &)
 
Namespace for new Math classes and functions.
 
char_t get_manip(std::basic_ios< char_t, traits_t > &ios, manip_t m)
 
std::basic_istream< char_t, traits_t > & require_delim(std::basic_istream< char_t, traits_t > &is, manip_t m)
 
void set_manip(std::basic_ios< char_t, traits_t > &ios, manip_t m, char_t ch)
 
std::ostream & operator<<(std::ostream &os, const AxisAngle &a)
Stream Output and Input.
 
std::basic_istream< char_t, traits_t > & operator>>(std::basic_istream< char_t, traits_t > &is, DisplacementVector2D< T, U > &v)
 
CoordSystem::Scalar get(DisplacementVector2D< CoordSystem, Tag > const &p)
 
DisplacementVector2D< CoordSystem1, U > operator+(DisplacementVector2D< CoordSystem1, U > v1, const DisplacementVector2D< CoordSystem2, U > &v2)
Addition of DisplacementVector2D vectors.
 
DisplacementVector2D< CoordSystem1, U > operator-(DisplacementVector2D< CoordSystem1, U > v1, DisplacementVector2D< CoordSystem2, U > const &v2)
Difference between two DisplacementVector2D vectors.
 
AxisAngle operator*(RotationX const &r1, AxisAngle const &r2)
Multiplication of an axial rotation by an AxisAngle.