From 6766c80514ff468690e14c0c754733fc649dc0b5 Mon Sep 17 00:00:00 2001 From: morsch Date: Thu, 10 Feb 2011 20:19:11 +0000 Subject: [PATCH] I added some methods that return squared distances in order to avoid sqrt calculations and go faster (really an issue in PbPb). A. Dainese --- STEER/AliAODRecoDecay.cxx | 38 +++++++++++++++++++++++++------------- STEER/AliAODRecoDecay.h | 28 +++++++++++++++++++--------- STEER/AliAODVertex.cxx | 16 ++++++++-------- STEER/AliAODVertex.h | 16 ++++++++++++---- 4 files changed, 64 insertions(+), 34 deletions(-) diff --git a/STEER/AliAODRecoDecay.cxx b/STEER/AliAODRecoDecay.cxx index 343ca42690b..d8cd6335237 100644 --- a/STEER/AliAODRecoDecay.cxx +++ b/STEER/AliAODRecoDecay.cxx @@ -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 diff --git a/STEER/AliAODRecoDecay.h b/STEER/AliAODRecoDecay.h index 917a16fbb6a..f4a822bb3ea 100644 --- a/STEER/AliAODRecoDecay.h +++ b/STEER/AliAODRecoDecay.h @@ -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 diff --git a/STEER/AliAODVertex.cxx b/STEER/AliAODVertex.cxx index 64285e7532c..fedfa70dde7 100644 --- a/STEER/AliAODVertex.cxx +++ b/STEER/AliAODVertex.cxx @@ -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; } //______________________________________________________________________________ diff --git a/STEER/AliAODVertex.h b/STEER/AliAODVertex.h index 1c4c386f00c..061014681f7 100644 --- a/STEER/AliAODVertex.h +++ b/STEER/AliAODVertex.h @@ -119,10 +119,18 @@ class AliAODVertex : public AliVVertex { Double_t RotatedCovMatrixZZ(Double_t phi = 0., Double_t theta = 0.) const; template 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; -- 2.43.0