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)