I would like to propose that the TParticle class gets new methods (this should be fully backwards compatible so no need to change the class version): [code]public :
Double_t Ek() const { return fE-fCalcMass; }
Double_t PhiP(const TParticle &p) // the angle between mommenta of particles
{
Double_t v = P()p.P();
if (v == 0) v = 1; else v = (fPxp.Px()+fPyp.Py()+fPzp.Pz())/v;
if (v > 1) v = 1; else if (v < -1) v = -1; // just a precaution
return TMath::ACos(v);
}
Double_t PhiX() const { return TMath::Pi()+TMath::ATan2(-fPy,-fPz); } // note that PhiX() returns an angle between 0 and 2pi
Double_t PhiY() const { return TMath::Pi()+TMath::ATan2(-fPz,-fPx); } // note that PhiY() returns an angle between 0 and 2pi
Double_t PhiZ() const { return Phi(); } // note that PhiZ() returns an angle between 0 and 2pi
Double_t ThetaX() const { return (fPx==0)?TMath::PiOver2():TMath::ACos(fPx/P()); }
Double_t ThetaY() const { return (fPy==0)?TMath::PiOver2():TMath::ACos(fPy/P()); }
Double_t ThetaZ() const { return Theta(); }
Double_t GetPolarTheta() const { return fPolarTheta; }
Double_t GetPolarPhi() const { return fPolarPhi; }
void GetPolarisation(Double_t &theta, Double_t &phi) const { theta = fPolarTheta; phi = fPolarPhi; }
void SetPolarTheta(Double_t theta) { fPolarTheta = theta; }
void SetPolarPhi(Double_t phi) { fPolarPhi = phi; }
void SetPolarisation(Double_t theta, Double_t phi) { fPolarTheta = theta; fPolarPhi = phi; }[/code]