#ifndef ALIESDV0_H
#define ALIESDV0_H
#include <TPDGCode.h>
#include "AliExternalTrackParam.h"
#include "AliVParticle.h"
class AliESDV0Params;
class AliESDv0 : public AliVParticle {
public:
AliESDv0();
AliESDv0(const AliExternalTrackParam &t1, Int_t i1,
const AliExternalTrackParam &t2, Int_t i2);
AliESDv0(const AliESDv0& v0);
virtual ~AliESDv0();
AliESDv0& operator=(const AliESDv0& v0);
virtual void Copy(TObject &obj) const;
virtual Double_t Px() const { return fNmom[0]+fPmom[0]; }
virtual Double_t Py() const { return fNmom[1]+fPmom[1]; }
virtual Double_t Pz() const { return fNmom[2]+fPmom[2]; }
virtual Double_t Pt() const { return TMath::Sqrt(Px()*Px()+Py()*Py()); }
virtual Double_t P() const {
return TMath::Sqrt(Px()*Px()+Py()*Py()+Pz()*Pz());
}
virtual Bool_t PxPyPz(Double_t p[3]) const { p[0] = Px(); p[1] = Py(); p[2] = Pz(); return kTRUE; }
virtual Double_t Xv() const { return fPos[0]; }
virtual Double_t Yv() const { return fPos[1]; }
virtual Double_t Zv() const { return fPos[2]; }
virtual Bool_t XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }
virtual Double_t OneOverPt() const { return (Pt() != 0.) ? 1./Pt() : -999.; }
virtual Double_t Phi() const {return TMath::Pi()+TMath::ATan2(-Py(),-Px()); }
virtual Double_t Theta() const {return 0.5*TMath::Pi()-TMath::ATan(Pz()/(Pt()+1.e-13)); }
virtual Double_t E() const;
virtual Double_t M() const { return GetEffMass(); }
virtual Double_t Eta() const { return 0.5*TMath::Log((P()+Pz())/(P()-Pz()+1.e-13)); }
virtual Double_t Y() const;
virtual Short_t Charge() const { return 0; }
virtual Int_t GetLabel() const { return -1; }
virtual const Double_t *PID() const { return 0; }
Double_t E(Int_t pdg) const;
Double_t Y(Int_t pdg) const;
Double_t RapK0Short() const;
Double_t RapLambda() const;
Double_t AlphaV0() const;
Double_t PtArmV0() const;
Double_t ChangeMassHypothesis(Int_t code=kK0Short);
Int_t GetPdgCode() const {return fPdgCode;}
Double_t GetEffMass(UInt_t p1, UInt_t p2) const;
Double_t GetEffMass() const {return fEffMass;}
Double_t GetChi2V0() const {return fChi2V0;}
void GetPxPyPz(Double_t &px, Double_t &py, Double_t &pz) const;
void GetNPxPyPz(Double_t &px, Double_t &py, Double_t &pz) const;
void GetPPxPyPz(Double_t &px, Double_t &py, Double_t &pz) const;
void GetXYZ(Double_t &x, Double_t &y, Double_t &z) const;
Float_t GetD(Double_t x0,Double_t y0) const;
Float_t GetD(Double_t x0,Double_t y0,Double_t z0) const;
Int_t GetNindex() const {return fNidx;}
Int_t GetPindex() const {return fPidx;}
void SetDcaV0Daughters(Double_t rDcaV0Daughters=0.);
Double_t GetDcaV0Daughters() const {return fDcaV0Daughters;}
Float_t GetV0CosineOfPointingAngle(Double_t refPointX, Double_t refPointY, Double_t refPointZ) const;
Double_t GetV0CosineOfPointingAngle() const {return fPointAngle;}
void SetV0CosineOfPointingAngle(Double_t cpa) {fPointAngle=cpa;}
void SetOnFlyStatus(Bool_t status){fOnFlyStatus=status;}
Bool_t GetOnFlyStatus() const {return fOnFlyStatus;}
const AliExternalTrackParam *GetParamP() const {return &fParamP;}
const AliExternalTrackParam *GetParamN() const {return &fParamN;}
void GetPosCov(Double_t cov[6])const ;
Double_t GetSigmaY();
Double_t GetSigmaZ();
Double_t GetSigmaAP0();
Double_t GetSigmaD0();
Double_t GetEffectiveSigmaAP0();
Double_t GetEffectiveSigmaD0();
Double_t GetMinimaxSigmaAP0();
Double_t GetMinimaxSigmaD0();
Double_t GetLikelihoodAP(Int_t mode0, Int_t mode1);
Double_t GetLikelihoodD(Int_t mode0, Int_t mode1);
Double_t GetLikelihoodC(Int_t mode0, Int_t mode1) const;
static const AliESDV0Params & GetParameterization(){return fgkParams;}
void SetParamP(const AliExternalTrackParam & paramP) {fParamP = paramP;}
void SetParamN(const AliExternalTrackParam & paramN) {fParamN = paramN;}
void SetStatus(Int_t status){fStatus=status;}
ULong_t GetStatus() const {return ULong_t(fStatus);}
Int_t GetIndex(Int_t i) const {return (i==0) ? fNidx : fPidx;}
void SetIndex(Int_t i, Int_t ind);
const Double_t *GetAnglep() const {return fAngle;}
Double_t GetRr() const {return fRr;}
Double_t GetDistSigma() const {return fDistSigma;}
void SetDistSigma(Double_t ds) {fDistSigma=ds;}
Float_t GetChi2Before() const {return fChi2Before;}
void SetChi2Before(Float_t cb) {fChi2Before=cb;}
Float_t GetChi2After() const {return fChi2After;}
void SetChi2After(Float_t ca) {fChi2After=ca;}
Float_t GetNAfter() const {return fNAfter;}
void SetNAfter(Short_t na) {fNAfter=na;}
Short_t GetNBefore() const {return fNBefore;}
void SetNBefore(Short_t nb) {fNBefore=nb;}
void SetCausality(Float_t pb0, Float_t pb1, Float_t pa0, Float_t pa1);
const Double_t * GetCausalityP() const {return fCausality;}
void SetClusters(const Int_t *clp, const Int_t *clm);
const Int_t * GetClusters(Int_t i) const {return fClusters[i];}
void SetNormDCAPrim(Float_t nd0, Float_t nd1){fNormDCAPrim[0] = nd0; fNormDCAPrim[1]=nd1;}
const Double_t *GetNormDCAPrimP() const {return fNormDCAPrim;}
Int_t PdgCode() const {return 0;}
virtual void SetID(Short_t ) {;}
Double_t GetKFInfo(UInt_t p1, UInt_t p2, Int_t type) const;
Double_t GetKFInfoScale(UInt_t p1, UInt_t p2, Int_t type, Double_t d1pt, Double_t s1pt) const;
protected:
AliExternalTrackParam fParamN;
AliExternalTrackParam fParamP;
Double32_t fEffMass;
Double32_t fDcaV0Daughters;
Double32_t fChi2V0;
Double32_t fPos[3];
Double32_t fPosCov[6];
Double32_t fNmom[3];
Double32_t fPmom[3];
Double32_t fNormDCAPrim[2];
Double32_t fRr;
Double32_t fDistSigma;
Double32_t fChi2Before;
Double32_t fChi2After;
Double32_t fCausality[4];
Double32_t fAngle[3];
Double32_t fPointAngleFi;
Double32_t fPointAngleTh;
Double32_t fPointAngle;
Int_t fPdgCode;
Int_t fClusters[2][6];
Int_t fNidx;
Int_t fPidx;
Short_t fStatus;
Short_t fNBefore;
Short_t fNAfter;
Bool_t fOnFlyStatus;
static const AliESDV0Params fgkParams;
private:
ClassDef(AliESDv0,6)
};
inline
void AliESDv0::GetNPxPyPz(Double_t &px, Double_t &py, Double_t &pz) const {
px=fNmom[0]; py=fNmom[1]; pz=fNmom[2];
}
inline
void AliESDv0::GetPPxPyPz(Double_t &px, Double_t &py, Double_t &pz) const {
px=fPmom[0]; py=fPmom[1]; pz=fPmom[2];
}
inline
void AliESDv0::SetDcaV0Daughters(Double_t rDcaV0Daughters){
fDcaV0Daughters=rDcaV0Daughters;
}
inline
void AliESDv0::SetIndex(Int_t i, Int_t ind) {
if(i==0)
fNidx=ind;
else
fPidx=ind;
}
#endif