|
ROOT
Reference Guide |
|
Go to the documentation of this file.
18 #ifndef ROOT_Math_GenVector_LorentzVector
19 #define ROOT_Math_GenVector_LorentzVector 1
58 template<
class CoordSystem >
92 template<
class Coords >
100 template<
class ForeignLorentzVector>
113 template<
class LAVector >
115 fCoordinates = CoordSystem (
v[index0],
v[index0+1],
v[index0+2],
v[index0+3] );
125 template<
class OtherCoords >
135 template<
class ForeignLorentzVector>
150 template<
class LAVector >
151 LorentzVector & AssignFrom(
const LAVector &
v,
size_t index0=0 ) {
152 fCoordinates.SetCoordinates(
v[index0],
v[index0+1],
v[index0+2],
v[index0+3] );
187 IT
a = begin; IT
b = ++begin; IT
c = ++begin; IT
d = ++begin;
189 assert (++begin==end);
211 { IT
a = begin; IT
b = ++begin; IT
c = ++begin; IT
d = ++begin;
213 assert (++begin==end);
356 return ::ROOT::Math::DisplacementVector3D<Cartesian3D<Scalar> >(
X(),
Y(),
Z() );
370 template<
class OtherLorentzVector >
372 return t()*
q.t() -
x()*
q.x() -
y()*
q.y() -
z()*
q.z();
381 template<
class OtherLorentzVector >
394 template<
class OtherLorentzVector >
407 template<
class OtherLorentzVector>
422 template<
class OtherLorentzVector>
493 return Scalar(0.5) *
log((ee + ppz) / (ee - ppz));
504 return Scalar(0.5) *
log((ee + pp) / (ee - pp));
520 if ( ee==0 )
return pp==0;
521 return delta*delta < tolerance * ee*ee;
558 template <
class Other4Vector>
563 if (vecSum.
Mag2() == 0) {
587 GenVector::Throw (
"LorentzVector::Beta() - beta computed for LorentzVector with t = 0. Return an Infinite result");
592 GenVector::Throw (
"LorentzVector::Beta() - beta computed for non-timelike LorentzVector . Result is physically meaningless" );
606 GenVector::Throw (
"LorentzVector::Gamma() - gamma computed for LorentzVector with t = 0. Return a zero result");
611 GenVector::Throw (
"LorentzVector::Gamma() - gamma computed for a spacelike LorentzVector. Imaginary result");
614 else if ( t2 ==
v2 ) {
615 GenVector::Throw (
"LorentzVector::Gamma() - gamma computed for a lightlike LorentzVector. Infinite result");
681 template<
class CoordSystem >
692 template<
class char_t,
class traits_t,
class Coords >
694 std::basic_ostream<char_t,traits_t> &
695 operator << ( std::basic_ostream<char_t,traits_t> & os
696 , LorentzVector<Coords>
const &
v
702 v.GetCoordinates(
a,
b,
c,
d);
721 template<
class char_t,
class traits_t,
class Coords >
723 std::basic_istream<char_t,traits_t> &
745 v.SetCoordinates(
a,
b,
c,
d);
759 template<
typename CoordSystem>
Scalar Mag2() const
Magnitute squared ( r^2 in spherical coordinate)
LorentzVector operator*(const Scalar &a) const
product of a LorentzVector by a scalar quantity
LorentzVector operator+() const
Scalar ColinearRapidity() const
Rapidity in the direction of travel: atanh (|P|/E)=.5 log[(E+P)/(E-P)].
Scalar Mt2() const
return the transverse mass squared
BetaVector BoostToCM() const
The beta vector for the boost that would bring this vector into its center of mass frame (zero moment...
Scalar Mt() const
return the transverse mass
LorentzVector< CoordSystem > & SetPx(Scalar a)
LorentzVector< CoordSystem > & SetCoordinates(Scalar a, Scalar b, Scalar c, Scalar d)
Set internal data based on 4 Scalar numbers.
Scalar Et2() const
return the transverse energy squared
bool isSpacelike() const
Determine if momentum-energy is spacelike, and represents a tachyon.
::ROOT::Math::DisplacementVector3D< Cartesian3D< Scalar > > Vect() const
get the spatial components of the Vector in a DisplacementVector based on Cartesian Coordinates
#define dest(otri, vertexptr)
LorentzVector & operator-=(const OtherLorentzVector &q)
Self subtraction of another Vector from this ( v-= q ) Enable the addition with any other LorentzVect...
LorentzVector< CoordSystem > & SetXYZT(Scalar xx, Scalar yy, Scalar zz, Scalar tt)
set the values of the vector from the cartesian components (x,y,z,t) (if the vector is held in anothe...
DisplacementVector3D< Cartesian3D< Scalar > > BetaVector
void GetCoordinates(Scalar dest[]) const
get internal data into an array of 4 Scalar numbers
LorentzVector operator-() const
Negative of a LorentzVector (q = - v )
void GetCoordinates(IT begin, IT end) const
get internal data into 4 Scalars at *begin to *end
Scalar Theta() const
polar Angle
static constexpr double s
const CoordSystem & Coordinates() const
Retrieve a const reference to the coordinates object.
std::ostream & operator<<(std::ostream &os, const AxisAngle &a)
Stream Output and Input.
Scalar Eta() const
pseudorapidity
bool operator!=(const LorentzVector &rhs) const
bool isTimelike() const
Determine if momentum-energy can represent a physical massive particle.
LorentzVector(const LorentzVector< Coords > &v)
constructor from a LorentzVector expressed in different coordinates, or using a different Scalar type
Scalar Dot(const OtherLorentzVector &q) const
scalar (Dot) product of two LorentzVector vectors (metric is -,-,-,+) Enable the product using any ot...
LorentzVector()
default constructor of an empty vector (Px = Py = Pz = E = 0 )
std::basic_istream< char_t, traits_t > & operator>>(std::basic_istream< char_t, traits_t > &is, DisplacementVector2D< T, U > &v)
char_t get_manip(std::basic_ios< char_t, traits_t > &ios, manip_t m)
LorentzVector< CoordSystem > & SetCoordinates(const Scalar src[])
Set internal data based on an array of 4 Scalar numbers.
LorentzVector< CoordSystem > & SetCoordinates(IT begin, IT end)
Set internal data based on 4 Scalars at *begin to *end.
LorentzVector(const Scalar &a, const Scalar &b, const Scalar &c, const Scalar &d)
generic constructors from four scalar values.
void GetCoordinates(IT begin) const
get internal data into 4 Scalars at *begin
LorentzVector & operator=(const LorentzVector< OtherCoords > &v)
Assignment operator from a lorentz vector of arbitrary type.
LorentzVector< CoordSystem > & SetPy(Scalar a)
LorentzVector< CoordSystem > & SetM(Scalar a)
LorentzVector< CoordSystem > & SetE(Scalar a)
Methods setting a Single-component Work only if the component is one of which the vector is represent...
void Throw(const char *)
function throwing exception, by creating internally a GenVector_exception only when needed
CoordSystem::Scalar Scalar
VecExpr< UnaryOp< Sqrt< T >, VecExpr< A, T, D >, T >, T, D > sqrt(const VecExpr< A, T, D > &rhs)
Scalar Phi() const
azimuthal Angle
LorentzVector & operator+=(const OtherLorentzVector &q)
Self addition with another Vector ( v+= q ) Enable the addition with any other LorentzVector.
Scalar Et() const
return the transverse energy
LorentzVector< CoordSystem > & SetPhi(Scalar a)
Scalar E() const
return 4-th component (time, or energy for a 4-momentum vector)
void set_manip(std::basic_ios< char_t, traits_t > &ios, manip_t m, char_t ch)
LorentzVector< CoordSystem > & SetPt(Scalar a)
bool operator==(const LorentzVector &rhs) const
Exact equality.
void GetCoordinates(Scalar &a, Scalar &b, Scalar &c, Scalar &d) const
get internal data into 4 Scalar numbers
Scalar Gamma() const
Return Gamma scalar value.
typedef void((*Func_t)())
Scalar Py() const
spatial Y component
Scalar R() const
return the spatial (3D) magnitude ( sqrt(X**2 + Y**2 + Z**2) )
bool isLightlike(Scalar tolerance=100 *std::numeric_limits< Scalar >::epsilon()) const
Determine if momentum-energy can represent a massless particle.
Scalar Beta() const
Return beta scalar value.
Scalar Rapidity() const
Rapidity relative to the Z axis: .5 log [(E+Pz)/(E-Pz)].
Scalar Pz() const
spatial Z component
LorentzVector(const ForeignLorentzVector &v)
Construct from a foreign 4D vector type, for example, HepLorentzVector Precondition: v must implement...
BetaVector BoostToCM(const Other4Vector &v) const
The beta vector for the boost that would bring this vector into its center of mass frame (zero moment...
LorentzVector< CoordSystem > operator/(const Scalar &a) const
Divide a LorentzVector by a scalar quantity.
Rotation3D::Scalar Scalar
Scalar Pt() const
return the transverse spatial component sqrt ( X**2 + Y**2 )
Scalar P2() const
return the square of the spatial (3D) magnitude ( X**2 + Y**2 + Z**2 )
Scalar M() const
return magnitude (mass) using the (-,-,-,+) metric.
LorentzVector< CoordSystem > & SetEta(Scalar a)
Class describing a generic displacement vector in 3 dimensions.
Scalar Perp2() const
return the square of the transverse spatial component ( X**2 + Y**2 )
LorentzVector & operator*=(Scalar a)
multiplication by a scalar quantity v *= a
Scalar Px() const
spatial X component
Scalar M2() const
return magnitude (mass) squared M2 = T**2 - X**2 - Y**2 - Z**2 (we use -,-,-,+ metric)
std::basic_istream< char_t, traits_t > & require_delim(std::basic_istream< char_t, traits_t > &is, manip_t m)
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
CoordSystem CoordinateType
Namespace for new Math classes and functions.
LorentzVector< CoordSystem > & SetPxPyPzE(Scalar xx, Scalar yy, Scalar zz, Scalar ee)
Class describing a 4D cartesian coordinate system (x, y, z, t coordinates) or momentum-energy vectors...
LorentzVector & operator/=(Scalar a)
division by a scalar quantity v /= a
Class describing a generic LorentzVector in the 4D space-time, using the specified coordinate system ...
LorentzVector< CoordSystem > & SetPz(Scalar a)