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; }
148 Scalar
Px()
const {
return fX;}
149 Scalar
Py()
const {
return fY;}
150 Scalar
Pz()
const {
return fZ;}
151 Scalar
M()
const {
return fM; }
153 Scalar
X()
const {
return fX;}
154 Scalar
Y()
const {
return fY;}
155 Scalar
Z()
const {
return fZ;}
163 Scalar
T()
const {
return E();}
174 Scalar
R()
const {
return P(); }
185 Scalar
Mag()
const {
return M(); }
191 Scalar e2 =
P2() +
M2();
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 );
298 void SetPxPyPzE(Scalar px, Scalar py, Scalar pz, Scalar e);
311 GenVector::Throw (
"PxPyPzM4D::Negate - cannot negate the energy - can negate only the spatial components");
338 Scalar
x()
const {
return X(); }
339 Scalar
y()
const {
return Y(); }
340 Scalar
z()
const {
return Z(); }
341 Scalar
t()
const {
return E(); }
345 #if defined(__MAKECINT__) || defined(G__DICTIONARY)
349 void SetPt(Scalar pt);
351 void SetEta(Scalar eta);
353 void SetPhi(Scalar phi);
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
Namespace for new ROOT classes and functions.
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
Namespace for new Math classes and functions.
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