Bug in TLorentzVector::CosTheta() ??

From: Matt Dobbs (Matthew.Adam.Dobbs@cern.ch)
Date: Wed Sep 22 1999 - 14:51:30 MEST


Hi,

Looking at TLorentzVector class, I wish to find the cosine of the angle
between the vector and the z axis. For this I would expect to use
CosTheta() method which is defined in TLorentzVector.h as follows:

  inline Double_t TLorentzVector::CosTheta() const {
    Double_t ptot = Mag();
    return ptot == 0.0 ? 1.0 : fZ/ptot;
  }

If I check the definition of Mag() I find that it is the invariant mass
NOT the Magnitude of the three vector:

  inline Double_t TLorentzVector::Mag2() const {
    return T()*T() - Vect().Mag2();
  }
  inline Double_t TLorentzVector::Mag() const {
    Double_t mm = Mag2();
    return mm < 0.0 ? -TMath::Sqrt(-mm) : TMath::Sqrt(mm);
  }

As example:

root [49] v = new TLorentzVector(1,1,1,1.75)
(class TLorentzVector*)0x8723668
root [50] v.Vect().CosTheta()               
(Double_t)5.77350269189625731e-01
root [51] v.Mag()                           
(Double_t)2.50000000000000000e-01
root [52] v.CosTheta()                      
(Double_t)4.00000000000000000e+00
					(Root V2.22 Redhat linux 5.1)
So v.Vect().CosTheta() gives the expected value but 
v.CosTheta() gives a non-physical cosine > 1.

Have I misuderstood the meaning of CosTheta? It seems intuitive to me that
TLorentzVector::Mag() would call TVector3::Mag() and likewise for
TLorentzVector::CosTheta().

~Matt


_________________________________________________________________________
                           Matt   D O B B S
CERN EP Division, ATLAS Experiment    Office Tel: 41.22.76.71272 (Swiss)
Office: 40-1-C15, ATLAS Bldg.         Home Tel:  0450 282544    (France)
Email: Matthew.Adam.Dobbs@Cern.CH     http://wwwhep.phys.uvic.ca/~mdobbs/
Department of Physics and Astronomy,  University of Victoria, Canada



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:39 MET