I added some methods that return squared distances in order to avoid sqrt calculation...
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 10 Feb 2011 20:19:11 +0000 (20:19 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 10 Feb 2011 20:19:11 +0000 (20:19 +0000)
(really an issue in PbPb).
A. Dainese

STEER/AliAODRecoDecay.cxx
STEER/AliAODRecoDecay.h
STEER/AliAODVertex.cxx
STEER/AliAODVertex.h

index 343ca42..d8cd633 100644 (file)
@@ -208,17 +208,17 @@ Double_t AliAODRecoDecay::Alpha() const
   return 1.-2./(1.+QlProng(0)/QlProng(1));
 }
 //----------------------------------------------------------------------------
-Double_t AliAODRecoDecay::DecayLength(Double_t point[3]) const 
+Double_t AliAODRecoDecay::DecayLength2(Double_t point[3]) const 
 {
   //
   // Decay length assuming it is produced at "point" [cm]
   //
-  return TMath::Sqrt((point[0]-GetSecVtxX())
-                   *(point[0]-GetSecVtxX())
-                   +(point[1]-GetSecVtxY())
-                   *(point[1]-GetSecVtxY())
-                   +(point[2]-GetSecVtxZ())
-                   *(point[2]-GetSecVtxZ()));  
+  return (point[0]-GetSecVtxX())
+    *(point[0]-GetSecVtxX())
+    +(point[1]-GetSecVtxY())
+    *(point[1]-GetSecVtxY())
+    +(point[2]-GetSecVtxZ())
+    *(point[2]-GetSecVtxZ());  
 }
 //----------------------------------------------------------------------------
 Double_t AliAODRecoDecay::DecayLengthXY(Double_t point[3]) const 
@@ -242,9 +242,15 @@ Double_t AliAODRecoDecay::CosPointingAngle(Double_t point[3]) const
                 GetSecVtxY()-point[1],
                 GetSecVtxZ()-point[2]);
 
-  Double_t pta = mom.Angle(fline);
-
-  return TMath::Cos(pta); 
+  Double_t ptot2 = mom.Mag2()*fline.Mag2();
+  if(ptot2 <= 0) {
+    return 0.0;
+  } else {
+    Double_t cos = mom.Dot(fline)/TMath::Sqrt(ptot2);
+    if(cos >  1.0) cos =  1.0;
+    if(cos < -1.0) cos = -1.0;
+    return cos;
+  }
 }
 //----------------------------------------------------------------------------
 Double_t AliAODRecoDecay::CosPointingAngleXY(Double_t point[3]) const 
@@ -258,9 +264,15 @@ Double_t AliAODRecoDecay::CosPointingAngleXY(Double_t point[3]) const
                   GetSecVtxY()-point[1],
                   0.);
 
-  Double_t ptaXY = momXY.Angle(flineXY);
-
-  return TMath::Cos(ptaXY); 
+  Double_t ptot2 = momXY.Mag2()*flineXY.Mag2();
+  if(ptot2 <= 0) {
+    return 0.0;
+  } else {
+    Double_t cos = momXY.Dot(flineXY)/TMath::Sqrt(ptot2);
+    if(cos >  1.0) cos =  1.0;
+    if(cos < -1.0) cos = -1.0;
+    return cos;
+  }
 }
 //----------------------------------------------------------------------------
 Double_t AliAODRecoDecay::CosThetaStar(Int_t ip,UInt_t pdgvtx,UInt_t pdgprong0,UInt_t pdgprong1) const 
index 917a16f..f4a822b 100644 (file)
@@ -85,8 +85,10 @@ class AliAODRecoDecay : public AliVTrack {
   Double_t Px() const; 
   Double_t Py() const;
   Double_t Pz() const;
-  Double_t P() const {return TMath::Sqrt(Px()*Px()+Py()*Py()+Pz()*Pz());}
-  Double_t Pt() const {return TMath::Sqrt(Px()*Px()+Py()*Py());}
+  Double_t P2() const {return Px()*Px()+Py()*Py()+Pz()*Pz();}
+  Double_t Pt2() const {return Px()*Px()+Py()*Py();}
+  Double_t P() const {return TMath::Sqrt(Pt2());}
+  Double_t Pt() const {return TMath::Sqrt(P2());}
   Double_t OneOverPt() const {return (Pt() ? 1./Pt() : 0.);}
   Bool_t   PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
   Double_t Phi() const {return TMath::Pi()+TMath::ATan2(-Py(),-Px());}
@@ -98,13 +100,20 @@ class AliAODRecoDecay : public AliVTrack {
   virtual Bool_t   XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }
   Double_t E(UInt_t pdg) const;
   Double_t Y(UInt_t pdg) const {return 0.5*TMath::Log((E(pdg)+Pz())/(E(pdg)-Pz()+1.e-13));}
-  Double_t DecayLength(Double_t point[3]) const;
+  Double_t DecayLength2(Double_t point[3]) const;
+  Double_t DecayLength(Double_t point[3]) const {return TMath::Sqrt(DecayLength2(point));}
+  Double_t DecayLength2(AliAODVertex *vtx1) const
+  {return GetSecondaryVtx()->Distance2ToVertex(vtx1);}
   Double_t DecayLength(AliAODVertex *vtx1) const
-  {return GetSecondaryVtx()->DistanceToVertex(vtx1);}
+    {return TMath::Sqrt(DecayLength2(vtx1));}
+  Double_t DecayLengthError2(AliAODVertex *vtx1) const
+    {return GetSecondaryVtx()->Error2DistanceToVertex(vtx1);}
   Double_t DecayLengthError(AliAODVertex *vtx1) const
-    {return GetSecondaryVtx()->ErrorDistanceToVertex(vtx1);}
+    {return TMath::Sqrt(DecayLengthError2(vtx1));}
+  Double_t NormalizedDecayLength2(AliAODVertex *vtx1) const 
+    {return DecayLength2(vtx1)/DecayLengthError2(vtx1);}
   Double_t NormalizedDecayLength(AliAODVertex *vtx1) const 
-    {return DecayLength(vtx1)/DecayLengthError(vtx1);}
+  {return TMath::Sqrt(NormalizedDecayLength2(vtx1));}
   Double_t DecayLengthXY(Double_t point[3]) const;
   Double_t DecayLengthXY(AliAODVertex *vtx1) const
     {return GetSecondaryVtx()->DistanceXYToVertex(vtx1);}
@@ -135,7 +144,8 @@ class AliAODRecoDecay : public AliVTrack {
   Double_t PxProng(Int_t ip) const {return fPx[ip];}
   Double_t PyProng(Int_t ip) const {return fPy[ip];}
   Double_t PzProng(Int_t ip) const {return fPz[ip];}
-  Double_t PtProng(Int_t ip) const; 
+  Double_t PtProng(Int_t ip) const {return TMath::Sqrt(Pt2Prong(ip));}
+  Double_t Pt2Prong(Int_t ip) const; 
   Double_t PProng(Int_t ip) const;
   Double_t PhiProng(Int_t ip) const 
     {return TMath::ATan2(PyProng(ip),PxProng(ip));}
@@ -295,9 +305,9 @@ inline Double_t AliAODRecoDecay::ImpParXY(AliAODVertex *vtx1) const
   return ImpParXY(v);
 }
 
-inline Double_t AliAODRecoDecay::PtProng(Int_t ip) const 
+inline Double_t AliAODRecoDecay::Pt2Prong(Int_t ip) const 
 {
-  return TMath::Sqrt(PxProng(ip)*PxProng(ip)+PyProng(ip)*PyProng(ip));
+  return PxProng(ip)*PxProng(ip)+PyProng(ip)*PyProng(ip);
 }
 
 inline Double_t AliAODRecoDecay::PProng(Int_t ip) const 
index 64285e7..fedfa70 100644 (file)
@@ -484,7 +484,7 @@ Double_t AliAODVertex::RotatedCovMatrixZZ(Double_t phi, Double_t theta) const
 }
 
 //______________________________________________________________________________
-Double_t AliAODVertex::DistanceToVertex(AliAODVertex *vtx) const
+Double_t AliAODVertex::Distance2ToVertex(AliAODVertex *vtx) const
 {
   // distance in 3D to another AliAODVertex
 
@@ -492,22 +492,22 @@ Double_t AliAODVertex::DistanceToVertex(AliAODVertex *vtx) const
   Double_t dy = GetY()-vtx->GetY();
   Double_t dz = GetZ()-vtx->GetZ();
 
-  return TMath::Sqrt(dx*dx+dy*dy+dz*dz);
+  return dx*dx+dy*dy+dz*dz;
 }
 
 //______________________________________________________________________________
-Double_t AliAODVertex::DistanceXYToVertex(AliAODVertex *vtx) const
+Double_t AliAODVertex::DistanceXY2ToVertex(AliAODVertex *vtx) const
 {
   // distance in XY to another AliAODVertex
 
   Double_t dx = GetX()-vtx->GetX();
   Double_t dy = GetY()-vtx->GetY();
 
-  return TMath::Sqrt(dx*dx+dy*dy);
+  return dx*dx+dy*dy;
 }
 
 //______________________________________________________________________________
-Double_t AliAODVertex::ErrorDistanceToVertex(AliAODVertex *vtx) const
+Double_t AliAODVertex::Error2DistanceToVertex(AliAODVertex *vtx) const
 {
   // error on the distance in 3D to another AliAODVertex
 
@@ -518,11 +518,11 @@ Double_t AliAODVertex::ErrorDistanceToVertex(AliAODVertex *vtx) const
   // error2 due to vtx vertex
   Double_t error2vtx = vtx->RotatedCovMatrixXX(phi,theta);
 
-  return TMath::Sqrt(error2+error2vtx);
+  return error2+error2vtx;
 }
 
 //______________________________________________________________________________
-Double_t AliAODVertex::ErrorDistanceXYToVertex(AliAODVertex *vtx) const
+Double_t AliAODVertex::Error2DistanceXYToVertex(AliAODVertex *vtx) const
 {
   // error on the distance in XY to another AliAODVertex
 
@@ -533,7 +533,7 @@ Double_t AliAODVertex::ErrorDistanceXYToVertex(AliAODVertex *vtx) const
   // error2 due to vtx vertex
   Double_t error2vtx = vtx->RotatedCovMatrixXX(phi);
 
-  return TMath::Sqrt(error2+error2vtx);
+  return error2+error2vtx;
 }
 
 //______________________________________________________________________________
index 1c4c386..0610146 100644 (file)
@@ -119,10 +119,18 @@ class AliAODVertex : public AliVVertex {
   Double_t  RotatedCovMatrixZZ(Double_t phi = 0., Double_t theta = 0.) const;
 
   template <class T, class P> void     PhiAndThetaToVertex(AliAODVertex *vtx, P &phi, T &theta) const;
-  Double_t  DistanceToVertex(AliAODVertex *vtx) const;
-  Double_t  ErrorDistanceToVertex(AliAODVertex *vtx) const;
-  Double_t  DistanceXYToVertex(AliAODVertex *vtx) const;
-  Double_t  ErrorDistanceXYToVertex(AliAODVertex *vtx) const;
+  Double_t  Distance2ToVertex(AliAODVertex *vtx) const;
+  Double_t  DistanceToVertex(AliAODVertex *vtx) const 
+     {return TMath::Sqrt(Distance2ToVertex(vtx));}
+  Double_t  DistanceXY2ToVertex(AliAODVertex *vtx) const;
+  Double_t  DistanceXYToVertex(AliAODVertex *vtx) const 
+     {return TMath::Sqrt(DistanceXY2ToVertex(vtx));}
+  Double_t  Error2DistanceToVertex(AliAODVertex *vtx) const;
+  Double_t  ErrorDistanceToVertex(AliAODVertex *vtx) const
+     {return TMath::Sqrt(Error2DistanceToVertex(vtx));}
+  Double_t  Error2DistanceXYToVertex(AliAODVertex *vtx) const;
+  Double_t  ErrorDistanceXYToVertex(AliAODVertex *vtx) const
+     {return TMath::Sqrt(Error2DistanceXYToVertex(vtx));}
   
   void     PrintIndices() const;
   void     Print(Option_t* option = "") const;