18 #ifndef ROOT_Math_GenVector_PxPyPzM4D
19 #define ROOT_Math_GenVector_PxPyPzM4D 1
21 #ifndef ROOT_Math_GenVector_eta
25 #ifndef ROOT_Math_GenVector_GenVector_exception
50 template <
class ScalarType =
double>
78 template <
class CoordSystem>
107 template <
class AnyCoordSystem>
120 fX=src[0];
fY=src[1];
fZ=src[2];
fM=src[3];
128 { dest[0] =
fX; dest[1] =
fY; dest[2] =
fZ; dest[3] =
fM; }
193 return e2 > 0 ? e2 : 0;
223 " Pz^2 > E^2 so the transverse mass would be imaginary");
234 return pt2 == 0 ? 0 :
E2() * pt2/( pt2 +
fZ*
fZ );
311 GenVector::Throw (
"PxPyPzM4D::Negate - cannot negate the energy - can negate only the spatial components");
345 #if defined(__MAKECINT__) || defined(G__DICTIONARY)
364 if (
fM >=0 )
return;
366 GenVector::Throw(
"PxPyPzM4D::unphysical value of mass, set to closest physical value");
390 #ifndef ROOT_Math_GenVector_PxPyPzE4D
393 #ifndef ROOT_Math_GenVector_PtEtaPhiM4D
401 template <
class ScalarType>
407 #if defined(__MAKECINT__) || defined(G__DICTIONARY)
413 template <
class ScalarType>
419 template <
class ScalarType>
420 inline void PxPyPzM4D<ScalarType>::SetEta(ScalarType eta) {
421 GenVector_exception e(
"PxPyPzM4D::SetEta() is not supposed to be called");
423 PtEtaPhiE4D<ScalarType>
v(*
this);
v.SetEta(eta); *
this = PxPyPzM4D<ScalarType>(
v);
425 template <
class ScalarType>
426 inline void PxPyPzM4D<ScalarType>::SetPhi(ScalarType
phi) {
427 GenVector_exception e(
"PxPyPzM4D::SetPhi() is not supposed to be called");
429 PtEtaPhiE4D<ScalarType>
v(*
this);
v.SetPhi(phi); *
this = PxPyPzM4D<ScalarType>(
v);
431 template <
class ScalarType>
432 inline void PxPyPzM4D<ScalarType>::SetE(ScalarType energy) {
433 GenVector_exception e(
"PxPyPzM4D::SetE() is not supposed to be called");
435 PxPyPzE4D<ScalarType>
v(*
this);
v.SetE(energy);
436 *
this = PxPyPzM4D<ScalarType>(
v);
440 #endif // endif __MAKE__CINT || G__DICTIONARY
448 #endif // ROOT_Math_GenVector_PxPyPzM4D
Class describing a 4D cylindrical coordinate system using Pt , Phi, Eta and E (or rho...
Scalar Et2() const
transverse energy squared
Scalar Et() const
transverse energy
Scalar P2() const
squared magnitude of spatial components
Scalar Mt2() const
transverse mass squared
void Scale(const Scalar &a)
scale coordinate values by a scalar quantity a
void Negate()
negate the 4-vector - Note that the energy cannot be negate (would need an additional data member) th...
PxPyPzM4D(const CoordSystem &v)
construct from any 4D coordinate system class implementing X(), Y(), X() and M()
void SetPy(Scalar py)
set Y value
Scalar Mt() const
transverse mass
void SetM(Scalar m)
set T value
Class describing a 4D cartesian coordinate system (x, y, z, t coordinates) or momentum-energy vectors...
Class describing a 4D coordinate system or momentum-energy vectors stored as (Px, Py...
ScalarType fX
(contigous) data containing the coordinate values x,y,z,t
Scalar Eta() const
pseudorapidity
PxPyPzM4D()
Default constructor with x=y=z=m=0.
Scalar E2() const
energy squared
Scalar Pt2() const
transverse spatial component squared
PxPyPzM4D(const PxPyPzM4D &v)
copy constructor
void SetCoordinates(const Scalar src[])
Set internal data based on an array of 4 Scalar numbers.
void GetCoordinates(Scalar dest[]) const
get internal data into an array of 4 Scalar numbers
Scalar Phi() const
azimuthal angle
void Throw(const char *)
function throwing exception, by creating internally a GenVector_exception only when needed ...
Scalar M2() const
vector magnitude squared (or mass squared) In case of negative mass (spacelike particles return negat...
Scalar Eta_FromRhoZ(Scalar rho, Scalar z)
Calculate eta given rho and zeta.
bool operator==(const PxPyPzM4D &rhs) const
Exact equality.
void SetPxPyPzE(Scalar px, Scalar py, Scalar pz, Scalar e)
set all values
Scalar Pt() const
Transverse spatial component (P_perp or rho)
double atan2(double, double)
void GetCoordinates(Scalar &px, Scalar &py, Scalar &pz, Scalar &m) const
get internal data into 4 Scalar numbers
void SetCoordinates(Scalar px, Scalar py, Scalar pz, Scalar m)
Set internal data based on 4 Scalar numbers.
PxPyPzM4D & operator=(const PxPyPzM4D &v)
assignment operator
#define dest(otri, vertexptr)
bool operator!=(const PxPyPzM4D &rhs) const
void SetPz(Scalar pz)
set Z value
void SetPx(Scalar px)
set X value
PxPyPzM4D(Scalar px, Scalar py, Scalar pz, Scalar m)
Constructor from x, y , z , m values.
std::complex< float_v > Z
Scalar P() const
magnitude of spatial components (magnitude of 3-momentum)
Scalar Theta() const
polar angle