(really an issue in PbPb).
A. Dainese
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
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
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
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());}
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);}
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));}
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
}
//______________________________________________________________________________
-Double_t AliAODVertex::DistanceToVertex(AliAODVertex *vtx) const
+Double_t AliAODVertex::Distance2ToVertex(AliAODVertex *vtx) const
{
// distance in 3D to another AliAODVertex
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
// 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
// error2 due to vtx vertex
Double_t error2vtx = vtx->RotatedCovMatrixXX(phi);
- return TMath::Sqrt(error2+error2vtx);
+ return error2+error2vtx;
}
//______________________________________________________________________________
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;