18#ifndef ROOT_Math_GenVector_VectorUtil
19#define ROOT_Math_GenVector_VectorUtil 1
47 namespace VectorUtil {
60 template <
class Vector1,
class Vector2>
62 typename Vector1::Scalar
dphi =
v2.Phi() -
v1.Phi();
81 template <
class Vector1,
class Vector2>
84 typename Vector1::Scalar
deta =
v2.Eta() -
v1.Eta();
96 template <
class Vector1,
class Vector2>
99 typename Vector1::Scalar
drap =
v2.Rapidity() -
v1.Rapidity();
111 template <
class Vector1,
class Vector2>
125 template <
class Vector1,
class Vector2>
141 template <
class Vector1,
class Vector2>
153 if(arg > 1.0) arg = 1.0;
154 if(arg < -1.0) arg = -1.0;
168 template <
class Vector1,
class Vector2>
182 template <
class Vector1,
class Vector2>
184 double magU2 =
u.X()*
u.X() +
u.Y()*
u.Y() +
u.Z()*
u.Z();
198 template <
class Vector1,
class Vector2>
211 template <
class Vector1,
class Vector2>
213 double magU2 =
u.X()*
u.X() +
u.Y()*
u.Y() +
u.Z()*
u.Z();
227 template <
class Vector1,
class Vector2>
247 template <
class Vector1,
class Vector2>
249 typedef typename Vector1::Scalar
Scalar;
256 return mm2 < 0.0 ? -
sqrt(-mm2) :
sqrt(mm2);
262 template <
class Vector1,
class Vector2>
264 typedef typename Vector1::Scalar
Scalar;
285 template <
class Vector>
288 double sina = sin(alpha);
290 double cosa = cos(alpha);
304 template <
class Vector>
307 double sina = sin(alpha);
309 double cosa = cos(alpha);
323 template <
class Vector>
326 double sina = sin(alpha);
328 double cosa = cos(alpha);
344 template<
class Vector,
class RotationMatrix>
365 template <
class LVector,
class BoostVector>
372 GenVector::Throw (
"Beta Vector supplied to set Boost represents speed >= c");
376 double gamma = 1.0 /
sqrt(1.0 - b2);
378 double gamma2 = b2 > 0 ? (gamma - 1.0)/b2 : 0.0;
382 double t2 = gamma*(
v.T() +
bp);
395 template <
class LVector,
class T>
398 GenVector::Throw (
"Beta Vector supplied to set Boost represents speed >= c");
403 typename LVector::Scalar
x2 = gamma *
v.X() + gamma *
beta *
v.T();
404 typename LVector::Scalar
t2 = gamma *
beta *
v.X() + gamma *
v.T();
417 template <
class LVector>
420 GenVector::Throw (
"Beta Vector supplied to set Boost represents speed >= c");
425 double y2 = gamma *
v.Y() + gamma *
beta *
v.T();
426 double t2 = gamma *
beta *
v.Y() + gamma *
v.T();
438 template <
class LVector>
441 GenVector::Throw (
"Beta Vector supplied to set Boost represents speed >= c");
446 double z2 = gamma *
v.Z() + gamma *
beta *
v.T();
447 double t2 = gamma *
beta *
v.Z() + gamma *
v.T();
461 template<
class Matrix,
class CoordSystem,
class U>
465 vret.SetXYZ(
m(0,0) *
v.x() +
m(0,1) *
v.y() +
m(0,2) *
v.z() ,
466 m(1,0) *
v.x() +
m(1,1) *
v.y() +
m(1,2) *
v.z() ,
467 m(2,0) *
v.x() +
m(2,1) *
v.y() +
m(2,2) *
v.z() );
476 template<
class Matrix,
class CoordSystem,
class U>
480 pret.SetXYZ(
m(0,0) *
p.x() +
m(0,1) *
p.y() +
m(0,2) *
p.z() ,
481 m(1,0) *
p.x() +
m(1,1) *
p.y() +
m(1,2) *
p.z() ,
482 m(2,0) *
p.x() +
m(2,1) *
p.y() +
m(2,2) *
p.z() );
493 template<
class CoordSystem,
class Matrix>
497 vret.SetXYZT(
m(0,0)*
v.x() +
m(0,1)*
v.y() +
m(0,2)*
v.z() +
m(0,3)*
v.t() ,
498 m(1,0)*
v.x() +
m(1,1)*
v.y() +
m(1,2)*
v.z() +
m(1,3)*
v.t() ,
499 m(2,0)*
v.x() +
m(2,1)*
v.y() +
m(2,2)*
v.z() +
m(2,3)*
v.t() ,
500 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 beta(double x, double y)
Calculates the beta function.
Namespace for new Math classes and functions.
void Throw(const char *)
function throwing exception, by creating internally a GenVector_exception only when needed
DisplacementVector3D< CoordSystem, U > Mult(const Matrix &m, const DisplacementVector3D< CoordSystem, U > &v)
Multiplications of a generic matrices with a DisplacementVector3D of any coordinate system.
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...
double Perp(const Vector1 &v, const Vector2 &u)
Find the magnitude of the vector component of v perpendicular to the given direction of u.
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::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 ...
Vector1::Scalar DeltaPhi(const Vector1 &v1, const Vector2 &v2)
Find aximutal Angle difference between two generic vectors ( v2.Phi() - v1.Phi() ) The only requireme...
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...
double Angle(const Vector1 &v1, const Vector2 &v2)
Find Angle between two vectors.
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 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...
Vector RotateY(const Vector &v, double alpha)
rotation along Y axis for a generic vector by an Angle alpha returning a new vector.
Vector RotateX(const Vector &v, double alpha)
rotation along X axis for a generic vector by an Angle alpha returning a new vector.
double CosTheta(const Vector1 &v1, const Vector2 &v2)
Find CosTheta Angle between two generic 3D vectors pre-requisite: vectors implement the X(),...
Vector1 PerpVector(const Vector1 &v, const Vector2 &u)
Find the vector component of v perpendicular to the given direction of u.
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.
double Phi_0_2pi(double phi)
Return a phi angle in the interval (0,2*PI].
Vector Rotate(const Vector &v, const RotationMatrix &rot)
rotation on a generic vector using a generic rotation class.
double Phi_mpi_pi(double phi)
Returns phi angle in the interval (-PI,PI].
Vector1::Scalar InvariantMass2(const Vector1 &v1, const Vector2 &v2)
Vector1 ProjVector(const Vector1 &v, const Vector2 &u)
Find the projection of v along the given direction u.
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...
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 InvariantMass(const Vector1 &v1, const Vector2 &v2)
return the invariant mass of two LorentzVector The only requirement on the LorentzVector is that they...
VecExpr< UnaryOp< Sqrt< T >, VecExpr< A, T, D >, T >, T, D > sqrt(const VecExpr< A, T, D > &rhs)
Rotation3D::Scalar Scalar
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...