class TLorentzVector: public TObject

```The Physics Vector package
-*                    ==========================
-* The Physics Vector package consists of five classes:
-*   - TVector2
-*   - TVector3
-*   - TRotation
-*   - TLorentzVector
-*   - TLorentzRotation
-* It is a combination of CLHEPs Vector package written by
-* Leif Lonnblad, Andreas Nilsson and Evgueni Tcherniaev
-* and a ROOT package written by Pasha Murat.
-* for CLHEP see:  http://wwwinfo.cern.ch/asd/lhc++/clhep/
-* Adaption to ROOT by Peter Malzacher
*

```

TLorentzVector

TLorentzVector is a general four-vector class, which can be used either for the description of position and time (x,y,z,t) or momentum and energy (px,py,pz,E).

Declaration

TLorentzVector has been implemented as a set a TVector3 and a Double_t variable. By default all components are initialized by zero.

TLorentzVector v1;      // initialized by (0., 0., 0., 0.)
TLorentzVector v2(1., 1., 1., 1.);
TLorentzVector v3(v1);
TLorentzVector v4(TVector3(1., 2., 3.),4.);

For backward compatibility there are two constructors from an Double_t and Float_t  C array.

There are two sets of access functions to the components of a LorentzVector: X(), Y(), Z(), T() and Px(), Py(), Pz() and E(). Both sets return the same values but the first set is more relevant for use where TLorentzVector describes a combination of position and time and the second set is more relevant where TLorentzVector describes momentum and energy:

Double_t xx =v.X();
...
Double_t tt = v.T();

Double_t px = v.Px();
...
Double_t ee = v.E();

The components of TLorentzVector can also accessed by index:

xx = v(0);       or     xx = v[0];
yy = v(1);              yy = v[1];
zz = v(2);              zz = v[2];
tt = v(3);              tt = v[3];

You can use the Vect() member function to get the vector component of TLorentzVector:

TVector3 p = v.Vect();

For setting components also two sets of member functions can be used: SetX(),.., SetPx(),..:

v.SetX(1.);        or    v.SetPx(1.);
...                               ...
v.SetT(1.);              v.SetE(1.);

To set more the one component by one call you can use the SetVect() function for the TVector3 part or SetXYZT(), SetPxPyPzE(). For convenience there is also a SetXYZM():

v.SetVect(TVector3(1,2,3));
v.SetXYZT(x,y,z,t);
v.SetPxPyPzE(px,py,pz,e);
v.SetXYZM(x,y,z,m);   //   ->  v=(x,y,z,e=Sqrt(x*x+y*y+z*z+m*m))

Vector components in noncartesian coordinate systems

There are a couple of memberfunctions to get and set the TVector3 part of the parameters in
spherical coordinate systems:

Double_t m, theta, cost, phi, pp, pp2, ppv2, pp2v2;
m = v.Rho();
t = v.Theta();
cost = v.CosTheta();
phi = v.Phi();

v.SetRho(10.);
v.SetTheta(TMath::Pi()*.3);
v.SetPhi(TMath::Pi());

or get information about the r-coordinate in cylindrical systems:

Double_t pp, pp2, ppv2, pp2v2;
pp = v.Perp();         // get transvers component
pp2 = v.Perp2();       // get transverse component squared
ppv2 = v.Perp(v1);      // get transvers component with
// respect to another vector
pp2v2 = v.Perp(v1);

for convenience there are two more set functions SetPtEtaPhiE(pt,eta,phi,e); and SetPtEtaPhiM(pt,eta,phi,m);

Arithmetic and comparison operators

The TLorentzVector class provides operators to add, subtract or compare four-vectors:

v3 = -v1;
v1 = v2+v3;
v1+= v3;
v1 = v2 + v3;
v1-= v3;

if (v1 == v2) {...}
if(v1 != v3) {...}

Magnitude/Invariant mass, beta, gamma, scalar product

The scalar product of two four-vectors is calculated with the (-,-,-,+) metric,
i.e.   s = v1*v2 = t1*t2-x1*x2-y1*y2-z1*z2
The magnitude squared mag2 of a four-vector is therfore:
mag2 = v*v = t*t-x*x-y*y-z*z
It mag2 is negative mag = -Sqrt(-mag*mag). The member functions are:

Double_t s, s2;
s  = v1.Dot(v2);     // scalar product
s  = v1*v2;         // scalar product
s2 = v.Mag2();   or    s2 = v.M2();
s  = v.Mag();          s  = v.M();

Since in case of momentum and energy the magnitude has the meaning of invariant mass TLorentzVector provides the more meaningful aliases M2() and M();

The member functions Beta() and Gamma() returns beta and gamma = 1/Sqrt(1-beta*beta).

Lorentz boost

A boost in a general direction can be parameterized with three parameters which can be taken as the components of a three vector b = (bx,by,bz). With
x = (x,y,z) and gamma = 1/Sqrt(1-beta*beta) (beta being the module of vector b), an arbitary active Lorentz boost transformation (from the rod frame to the original frame) can be written as:
x = x' + (gamma-1)/(beta*beta) * (b*x') * b + gamma * t' * b
t = gamma (t'+ b*x').

The member function Boost() performs a boost transformation from the rod frame to the original frame. BoostVector() returns a TVector3 of the spatial components divided by the time component:

TVector3 b;
v.Boost(bx,by,bz);
v.Boost(b);
b = v.BoostVector();   // b=(x/t,y/t,z/t)

Rotations

There are four sets of functions to rotate the TVector3 component of a TLorentzVector:
rotation around axes
v.RotateX(TMath::Pi()/2.);
v.RotateY(.5);
v.RotateZ(.99);
rotation around an arbitary axis
v.Rotate(TMath::Pi()/4., v1); // rotation around v1
transformation from rotated frame
v.RotateUz(direction); //  direction must be a unit TVector3
by TRotation (see TRotation)
TRotation r;
v.Transform(r);    or     v *= r; // Attention v=M*v

Misc

Angle between two vectors
Double_t a = v1.Angle(v2.Vect());  // get angle between v1 and v2
Light-cone components
Member functions Plus() and Minus() return the positive and negative light-cone components:

Double_t pcone = v.Plus();
Double_t mcone = v.Minus();

CAVEAT: The values returned are T{+,-}Z. It is known that some authors find it easier to define these components as (T{+,-}Z)/sqrt(2). Thus check what definition is used in the physics you're working in and adapt your code accordingly.

Transformation by TLorentzRotation
A general Lorentz transformation see class TLorentzRotation can be used by the Transform() member function, the *= or * operator of the TLorentzRotation class:

TLorentzRotation l;
v.Transform(l);
v = l*v;     or     v *= l;  // Attention v = l*v

Function Members (Methods)

public:
 virtual ~TLorentzVector() void TObject::AbstractMethod(const char* method) const Double_t Angle(const TVector3& v) const virtual void TObject::AppendPad(Option_t* option = "") Double_t Beta() const void Boost(const TVector3&) void Boost(Double_t, Double_t, Double_t) TVector3 BoostVector() const virtual void TObject::Browse(TBrowser* b) static TClass* Class() virtual const char* TObject::ClassName() const virtual void TObject::Clear(Option_t* = "") virtual TObject* TObject::Clone(const char* newname = "") const virtual Int_t TObject::Compare(const TObject* obj) const virtual void TObject::Copy(TObject& object) const Double_t CosTheta() const virtual void TObject::Delete(Option_t* option = "")MENU Double_t DeltaPhi(const TLorentzVector&) const Double_t DeltaR(const TLorentzVector&) const virtual Int_t TObject::DistancetoPrimitive(Int_t px, Int_t py) Double_t Dot(const TLorentzVector&) const virtual void TObject::Draw(Option_t* option = "") virtual void TObject::DrawClass() constMENU virtual TObject* TObject::DrawClone(Option_t* option = "") constMENU Double_t DrEtaPhi(const TLorentzVector&) const virtual void TObject::Dump() constMENU Double_t E() const Double_t Energy() const virtual void TObject::Error(const char* method, const char* msgfmt) const Double_t Et() const Double_t Et(const TVector3&) const Double_t Et2() const Double_t Et2(const TVector3&) const Double_t Eta() const TVector2 EtaPhiVector() virtual void TObject::Execute(const char* method, const char* params, Int_t* error = 0) virtual void TObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0) virtual void TObject::ExecuteEvent(Int_t event, Int_t px, Int_t py) virtual void TObject::Fatal(const char* method, const char* msgfmt) const virtual TObject* TObject::FindObject(const char* name) const virtual TObject* TObject::FindObject(const TObject* obj) const Double_t Gamma() const virtual Option_t* TObject::GetDrawOption() const static Long_t TObject::GetDtorOnly() virtual const char* TObject::GetIconName() const virtual const char* TObject::GetName() const virtual char* TObject::GetObjectInfo(Int_t px, Int_t py) const static Bool_t TObject::GetObjectStat() virtual Option_t* TObject::GetOption() const virtual const char* TObject::GetTitle() const virtual UInt_t TObject::GetUniqueID() const void GetXYZT(Double_t* carray) const void GetXYZT(Float_t* carray) const virtual Bool_t TObject::HandleTimer(TTimer* timer) virtual ULong_t TObject::Hash() const virtual void TObject::Info(const char* method, const char* msgfmt) const virtual Bool_t TObject::InheritsFrom(const char* classname) const virtual Bool_t TObject::InheritsFrom(const TClass* cl) const virtual void TObject::Inspect() constMENU void TObject::InvertBit(UInt_t f) virtual TClass* IsA() const virtual Bool_t TObject::IsEqual(const TObject* obj) const virtual Bool_t TObject::IsFolder() const Bool_t TObject::IsOnHeap() const virtual Bool_t TObject::IsSortable() const Bool_t TObject::IsZombie() const virtual void TObject::ls(Option_t* option = "") const Double_t M() const Double_t M2() const Double_t Mag() const Double_t Mag2() const void TObject::MayNotUse(const char* method) const Double_t Minus() const Double_t Mt() const Double_t Mt2() const virtual Bool_t TObject::Notify() void TObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const void TObject::operator delete(void* ptr) void TObject::operator delete(void* ptr, void* vp) void TObject::operator delete[](void* ptr) void TObject::operator delete[](void* ptr, void* vp) void* TObject::operator new(size_t sz) void* TObject::operator new(size_t sz, void* vp) void* TObject::operator new[](size_t sz) void* TObject::operator new[](size_t sz, void* vp) Bool_t operator!=(const TLorentzVector&) const Double_t operator()(int i) const Double_t& operator()(int i) TLorentzVector operator*(Double_t a) const Double_t operator*(const TLorentzVector&) const TLorentzVector& operator*=(Double_t a) TLorentzVector& operator*=(const TRotation&) TLorentzVector& operator*=(const TLorentzRotation&) TLorentzVector operator+(const TLorentzVector&) const TLorentzVector& operator+=(const TLorentzVector&) TLorentzVector operator-() const TLorentzVector operator-(const TLorentzVector&) const TLorentzVector& operator-=(const TLorentzVector&) TLorentzVector& operator=(const TLorentzVector&) Bool_t operator==(const TLorentzVector&) const Double_t operator[](int i) const Double_t& operator[](int i) Double_t P() const virtual void TObject::Paint(Option_t* option = "") Double_t Perp() const Double_t Perp(const TVector3& v) const Double_t Perp2() const Double_t Perp2(const TVector3& v) const Double_t Phi() const Double_t Plus() const virtual void TObject::Pop() virtual void Print(Option_t* option = "") const Double_t PseudoRapidity() const Double_t Pt() const Double_t Pt(const TVector3& v) const Double_t Px() const Double_t Py() const Double_t Pz() const Double_t Rapidity() const virtual Int_t TObject::Read(const char* name) virtual void TObject::RecursiveRemove(TObject* obj) void TObject::ResetBit(UInt_t f) Double_t Rho() const void Rotate(Double_t, const TVector3&) void RotateUz(TVector3& newUzVector) void RotateX(Double_t angle) void RotateY(Double_t angle) void RotateZ(Double_t angle) virtual void TObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU virtual void TObject::SavePrimitive(ostream& out, Option_t* option = "") void TObject::SetBit(UInt_t f) void TObject::SetBit(UInt_t f, Bool_t set) virtual void TObject::SetDrawOption(Option_t* option = "")MENU static void TObject::SetDtorOnly(void* obj) void SetE(Double_t a) static void TObject::SetObjectStat(Bool_t stat) void SetPerp(Double_t) void SetPhi(Double_t phi) void SetPtEtaPhiE(Double_t pt, Double_t eta, Double_t phi, Double_t e) void SetPtEtaPhiM(Double_t pt, Double_t eta, Double_t phi, Double_t m) void SetPx(Double_t a) void SetPxPyPzE(Double_t px, Double_t py, Double_t pz, Double_t e) void SetPy(Double_t a) void SetPz(Double_t a) void SetRho(Double_t rho) void SetT(Double_t a) void SetTheta(Double_t theta) virtual void TObject::SetUniqueID(UInt_t uid) void SetVect(const TVector3& vect3) void SetVectM(const TVector3& spatial, Double_t mass) void SetVectMag(const TVector3& spatial, Double_t magnitude) void SetX(Double_t a) void SetXYZM(Double_t x, Double_t y, Double_t z, Double_t m) void SetXYZT(Double_t x, Double_t y, Double_t z, Double_t t) void SetY(Double_t a) void SetZ(Double_t a) virtual void ShowMembers(TMemberInspector& insp) const virtual void Streamer(TBuffer&) void StreamerNVirtual(TBuffer& ClassDef_StreamerNVirtual_b) virtual void TObject::SysError(const char* method, const char* msgfmt) const Double_t T() const Bool_t TObject::TestBit(UInt_t f) const Int_t TObject::TestBits(UInt_t f) const Double_t Theta() const TLorentzVector() TLorentzVector(const Double_t* carray) TLorentzVector(const Float_t* carray) TLorentzVector(const TLorentzVector& lorentzvector) TLorentzVector(const TVector3& vector3, Double_t t) TLorentzVector(Double_t x, Double_t y, Double_t z, Double_t t) TLorentzVector& Transform(const TRotation&) TLorentzVector& Transform(const TLorentzRotation&) virtual void TObject::UseCurrentStyle() TVector3 Vect() const virtual void TObject::Warning(const char* method, const char* msgfmt) const virtual Int_t TObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) virtual Int_t TObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const Double_t X() const Double_t Y() const Double_t Z() const
protected:
 virtual void TObject::DoError(int level, const char* location, const char* fmt, va_list va) const void TObject::MakeZombie()

Data Members

public:
 static TObject::(anonymous) TObject::kBitMask static TObject::EStatusBits TObject::kCanDelete static TObject::EStatusBits TObject::kCannotPick static TObject::EStatusBits TObject::kHasUUID static TObject::EStatusBits TObject::kInvalidObject static TObject::(anonymous) TObject::kIsOnHeap static TObject::EStatusBits TObject::kIsReferenced static TObject::EStatusBits TObject::kMustCleanup static TLorentzVector::(anonymous) kNUM_COORDINATES static TObject::EStatusBits TObject::kNoContextMenu static TObject::(anonymous) TObject::kNotDeleted static TObject::EStatusBits TObject::kObjInCanvas static TObject::(anonymous) TObject::kOverwrite static TLorentzVector::(anonymous) kSIZE static TObject::(anonymous) TObject::kSingleKey static TLorentzVector::(anonymous) kT static TObject::(anonymous) TObject::kWriteDelete static TLorentzVector::(anonymous) kX static TLorentzVector::(anonymous) kY static TLorentzVector::(anonymous) kZ static TObject::(anonymous) TObject::kZombie
private:
 Double_t fE time or energy of (x,y,z,t) or (px,py,pz,e) TVector3 fP 3 vector component

Function documentation

`{}`

`{}`
TLorentzVector(const Double_t* carray)
`{}`
TLorentzVector(const Float_t* carray)
`{}`
TLorentzVector(const TVector3& vector3, Double_t t)
`{}`
TLorentzVector(const TLorentzVector& lorentzvector)
`{}`

`{}`
void Boost(Double_t , Double_t , Double_t )
```Boost this Lorentz vector
```
Double_t Rapidity() const
```return rapidity
```
TLorentzVector & Transform(const TLorentzRotation& )
```Transform this Lorentzvector
```
void Streamer(TBuffer& )
``` Stream an object of class TLorentzVector.
```
void Print(Option_t* option = "") const
``` Print the TLorentz vector components as (x,y,z,t) and (P,eta,phi,E) representations
```
Double_t X() const
`{ return fP.X(); }`
Double_t Y() const
`{ return fP.Y(); }`
Double_t Z() const
`{ return fP.Z(); }`
Double_t T() const
`{ return fE; }`
void SetX(Double_t a)
`{ fP.SetX(a); }`
void SetY(Double_t a)
`{ fP.SetY(a); }`
void SetZ(Double_t a)
`{ fP.SetZ(a); }`
void SetT(Double_t a)
`{ fE = a; }`
Double_t Px() const
`{ return X(); }`
Double_t Py() const
`{ return Y(); }`
Double_t Pz() const
`{ return Z(); }`
Double_t P() const
`{ return fP.Mag(); }`
Double_t E() const
`{ return T(); }`
Double_t Energy() const
`{ return T(); }`
void SetPx(Double_t a)
`{ SetX(a); }`
void SetPy(Double_t a)
`{ SetY(a); }`
void SetPz(Double_t a)
`{ SetZ(a); }`
void SetE(Double_t a)
`{ SetT(a); }`
TVector3 Vect() const
`{ return fP; }`
void SetVect(const TVector3& vect3)
`{ fP = p; }`
Double_t Phi() const
Double_t Theta() const
Double_t CosTheta() const
Double_t Rho() const
void SetTheta(Double_t theta)
void SetPhi(Double_t phi)
void SetRho(Double_t rho)
void SetXYZT(Double_t x, Double_t y, Double_t z, Double_t t)
void SetPxPyPzE(Double_t px, Double_t py, Double_t pz, Double_t e)
void SetXYZM(Double_t x, Double_t y, Double_t z, Double_t m)
void SetPtEtaPhiM(Double_t pt, Double_t eta, Double_t phi, Double_t m)
void SetPtEtaPhiE(Double_t pt, Double_t eta, Double_t phi, Double_t e)
void GetXYZT(Double_t* carray) const
void GetXYZT(Float_t* carray) const
Double_t Perp2() const
`{ return fP.Perp2(); }`
Double_t Perp() const
`{ return fP.Perp(); }`
Double_t Pt() const
`{ return Perp(); }`
void SetPerp(Double_t )
Double_t Perp2(const TVector3& v) const
Double_t Perp(const TVector3& v) const
Double_t Pt(const TVector3& v) const
Double_t Et2() const
Double_t Et() const
Double_t Et2(const TVector3& ) const
Double_t Et(const TVector3& ) const
Double_t DeltaPhi(const TLorentzVector& ) const
Double_t Eta() const
Double_t DeltaR(const TLorentzVector& ) const
Double_t DrEtaPhi(const TLorentzVector& ) const
Double_t Angle(const TVector3& v) const
Double_t Mag2() const
Double_t Mag() const
Double_t M2() const
`{ return Mag2(); }`
Double_t M() const
`{ return Mag(); }`
Double_t Mt2() const
Double_t Mt() const
Double_t Beta() const
Double_t Gamma() const
void SetVectMag(const TVector3& spatial, Double_t magnitude)
void SetVectM(const TVector3& spatial, Double_t mass)
Double_t Dot(const TLorentzVector& ) const
Double_t Plus() const
Double_t Minus() const
TVector3 BoostVector() const
void Boost(const TVector3& )
Double_t PseudoRapidity() const
void RotateX(Double_t angle)
void RotateY(Double_t angle)
void RotateZ(Double_t angle)
void RotateUz(TVector3& newUzVector)
void Rotate(Double_t , const TVector3& )
TLorentzVector & Transform(const TRotation& )