17#ifndef ROOT_MathX_GenVectorX_VectorUtil 
   18#define ROOT_MathX_GenVectorX_VectorUtil 1 
   60template <
class Vector1, 
class Vector2>
 
   63   typename Vector1::Scalar 
dphi = 
v2.Phi() - 
v1.Phi();
 
 
   80template <
class Vector1, 
class Vector2>
 
   84   typename Vector1::Scalar 
deta = 
v2.Eta() - 
v1.Eta();
 
 
   96template <
class Vector1, 
class Vector2>
 
  100   typename Vector1::Scalar 
drap = 
v2.Rapidity() - 
v1.Rapidity();
 
 
  112template <
class Vector1, 
class Vector2>
 
  126template <
class Vector1, 
class Vector2>
 
  142template <
class Vector1, 
class Vector2>
 
  170template <
class Vector1, 
class Vector2>
 
  184template <
class Vector1, 
class Vector2>
 
  187   double magU2 = 
u.X() * 
u.X() + 
u.Y() * 
u.Y() + 
u.Z() * 
u.Z();
 
 
  202template <
class Vector1, 
class Vector2>
 
  216template <
class Vector1, 
class Vector2>
 
  219   double magU2 = 
u.X() * 
u.X() + 
u.Y() * 
u.Y() + 
u.Z() * 
u.Z();
 
 
  233template <
class Vector1, 
class Vector2>
 
  250template <
class Vector1, 
class Vector2>
 
  253   typedef typename Vector1::Scalar 
Scalar;
 
 
  267template <
class Vector1, 
class Vector2>
 
  270   typedef typename Vector1::Scalar 
Scalar;
 
 
  291template <
class Vector>
 
  311template <
class Vector>
 
  331template <
class Vector>
 
  351template <
class Vector>
 
  352Vector 
Rotate(
const Vector &
v, 
double alpha, 
const Vector &axis)
 
  356   const double ll = 
math_sqrt(axis.X() * axis.X() + axis.Y() * axis.Y() + axis.Z() * axis.Z());
 
  357#if !defined(ROOT_MATH_SYCL) && !defined(ROOT_MATH_CUDA) 
  363   const double dx = axis.X() / 
ll;
 
  364   const double dy = axis.Y() / 
ll;
 
  365   const double dz = axis.Z() / 
ll;
 
  371   const double xX = 
v.X();
 
  372   const double yY = 
v.Y();
 
  373   const double zZ = 
v.Z();
 
 
  389template <
class Vector, 
class RotationMatrix>
 
  411template <
class LVector, 
class BoostVector>
 
  419#if !defined(ROOT_MATH_SYCL) && !defined(ROOT_MATH_CUDA) 
  420      GenVector_Throw(
"Beta Vector supplied to set Boost represents speed >= c");
 
  424   double gamma = 1.0 / 
math_sqrt(1.0 - b2);
 
  426   double gamma2 = b2 > 0 ? (gamma - 1.0) / b2 : 0.0;
 
  430   double t2 = gamma * (
v.T() + 
bp);
 
 
  442template <
class LVector, 
class T>
 
  446#if !defined(ROOT_MATH_SYCL) && !defined(ROOT_MATH_CUDA) 
  447      GenVector_Throw(
"Beta Vector supplied to set Boost represents speed >= c");
 
  451   T gamma = 1.0 / 
math_sqrt(1.0 - beta * beta);
 
  452   typename LVector::Scalar 
x2 = gamma * 
v.X() + gamma * beta * 
v.T();
 
  453   typename LVector::Scalar 
t2 = gamma * beta * 
v.X() + gamma * 
v.T();
 
 
  466template <
class LVector>
 
  470#if !defined(ROOT_MATH_SYCL) && !defined(ROOT_MATH_CUDA) 
  471      GenVector_Throw(
"Beta Vector supplied to set Boost represents speed >= c");
 
  475   double gamma = 1.0 / 
math_sqrt(1.0 - beta * beta);
 
  476   double y2 = gamma * 
v.Y() + gamma * beta * 
v.T();
 
  477   double t2 = gamma * beta * 
v.Y() + gamma * 
v.T();
 
 
  489template <
class LVector>
 
  493#if !defined(ROOT_MATH_SYCL) && !defined(ROOT_MATH_CUDA) 
  494      GenVector_Throw(
"Beta Vector supplied to set Boost represents speed >= c");
 
  498   double gamma = 1.0 / 
math_sqrt(1.0 - beta * beta);
 
  499   double z2 = gamma * 
v.Z() + gamma * beta * 
v.T();
 
  500   double t2 = gamma * beta * 
v.Z() + gamma * 
v.T();
 
 
  517template <
class Matrix, 
class CoordSystem, 
class U>
 
  521   vret.SetXYZ(
m(0, 0) * 
v.x() + 
m(0, 1) * 
v.y() + 
m(0, 2) * 
v.z(), 
m(1, 0) * 
v.x() + 
m(1, 1) * 
v.y() + 
m(1, 2) * 
v.z(),
 
  522               m(2, 0) * 
v.x() + 
m(2, 1) * 
v.y() + 
m(2, 2) * 
v.z());
 
 
  531template <
class Matrix, 
class CoordSystem, 
class U>
 
  535   pret.SetXYZ(
m(0, 0) * 
p.x() + 
m(0, 1) * 
p.y() + 
m(0, 2) * 
p.z(), 
m(1, 0) * 
p.x() + 
m(1, 1) * 
p.y() + 
m(1, 2) * 
p.z(),
 
  536               m(2, 0) * 
p.x() + 
m(2, 1) * 
p.y() + 
m(2, 2) * 
p.z());
 
 
  547template <
class CoordSystem, 
class Matrix>
 
  551   vret.SetXYZT(
m(0, 0) * 
v.x() + 
m(0, 1) * 
v.y() + 
m(0, 2) * 
v.z() + 
m(0, 3) * 
v.t(),
 
  552                m(1, 0) * 
v.x() + 
m(1, 1) * 
v.y() + 
m(1, 2) * 
v.z() + 
m(1, 3) * 
v.t(),
 
  553                m(2, 0) * 
v.x() + 
m(2, 1) * 
v.y() + 
m(2, 2) * 
v.z() + 
m(2, 3) * 
v.t(),
 
  554                m(3, 0) * 
v.x() + 
m(3, 1) * 
v.y() + 
m(3, 2) * 
v.z() + 
m(3, 3) * 
v.t());
 
 
 
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 x2
Option_t Option_t TPoint TPoint const char y2
double Phi_mpi_pi(double phi)
Returns phi angle in the interval (-PI,PI].
double Perp2(const Vector1 &v, const Vector2 &u)
Find the magnitude square of the vector component of v perpendicular to the given direction of u.
Vector1::Scalar DeltaR2(const Vector1 &v1, const Vector2 &v2)
Find square of the difference in pseudorapidity (Eta) and Phi between two generic vectors The only re...
Vector1 PerpVector(const Vector1 &v, const Vector2 &u)
Find the vector component of v perpendicular to the given direction of u.
double CosTheta(const Vector1 &v1, const Vector2 &v2)
Find CosTheta Angle between two generic 3D vectors pre-requisite: vectors implement the X(),...
LVector boostZ(const LVector &v, double beta)
Boost a generic Lorentz Vector class along the Z direction with a factor beta The only requirement on...
Vector1::Scalar DeltaRapidityPhi(const Vector1 &v1, const Vector2 &v2)
Find difference in Rapidity (y) and Phi between two generic vectors The only requirements on the Vect...
Vector1::Scalar DeltaR(const Vector1 &v1, const Vector2 &v2)
Find difference in pseudorapidity (Eta) and Phi between two generic vectors The only requirements on ...
Vector RotateX(const Vector &v, double alpha)
rotation along X axis for a generic vector by an Angle alpha returning a new vector.
Vector1::Scalar DeltaPhi(const Vector1 &v1, const Vector2 &v2)
Find aximutal Angle difference between two generic vectors ( v2.Phi() - v1.Phi() ) The only requireme...
double Perp(const Vector1 &v, const Vector2 &u)
Find the magnitude of the vector component of v perpendicular to the given direction of u.
DisplacementVector3D< CoordSystem, U > Mult(const Matrix &m, const DisplacementVector3D< CoordSystem, U > &v)
Multiplications of a generic matrices with a DisplacementVector3D of any coordinate system.
double Angle(const Vector1 &v1, const Vector2 &v2)
Find Angle between two vectors.
Vector1::Scalar DeltaR2RapidityPhi(const Vector1 &v1, const Vector2 &v2)
Find square of the difference in true rapidity (y) and Phi between two generic vectors The only requi...
LVector boost(const LVector &v, const BoostVector &b)
Boost a generic Lorentz Vector class using a generic 3D Vector class describing the boost The only re...
Vector Rotate(const Vector &v, double alpha, const Vector &axis)
rotation along a custom axis for a generic vector by an Angle alpha (in rad) returning a new vector.
LVector boostX(const LVector &v, T beta)
Boost a generic Lorentz Vector class along the X direction with a factor beta The only requirement on...
Vector1::Scalar InvariantMass2(const Vector1 &v1, const Vector2 &v2)
Returns the square of what InvariantMass(const Vector1&, const Vector2&) would return.
double Phi_0_2pi(double phi)
Return a phi angle in the interval (0,2*PI].
Vector RotateZ(const Vector &v, double alpha)
rotation along Z axis for a generic vector by an Angle alpha returning a new vector.
Vector1::Scalar InvariantMass(const Vector1 &v1, const Vector2 &v2)
return the invariant mass of two LorentzVector The only requirement on the LorentzVector is that they...
LVector boostY(const LVector &v, double beta)
Boost a generic Lorentz Vector class along the Y direction with a factor beta The only requirement on...
Vector1 ProjVector(const Vector1 &v, const Vector2 &u)
Find the projection of v along the given direction u.
Vector RotateY(const Vector &v, double alpha)
rotation along Y axis for a generic vector by an Angle alpha returning a new vector.
Scalar math_cos(Scalar x)
Rotation3D::Scalar Scalar
void GenVector_Throw(const char *)
function throwing exception, by creating internally a GenVector_exception only when needed
Scalar math_sqrt(Scalar x)
Scalar math_acos(Scalar x)
Scalar math_fmod(Scalar x, Scalar y)
Scalar math_sin(Scalar x)