#ifndef ALIESDV0KINECUTS_H
#define ALIESDV0KINECUTS_H
#include <TObject.h>
class AliESDv0;
class AliESDEvent;
class AliVEvent;
class AliESDtrack;
class AliVTrack;
class AliKFParticle;
class AliKFVertex;
class AliESDv0KineCuts : public TObject{
public:
enum{
kUndef = -1,
kGamma = 0,
kK0 = 1,
kLambda = 2,
kALambda = 3
};
enum{
kPP = 0,
kPbPb = 1,
};
enum{
kPurity = 0,
kEffGamma = 1
};
AliESDv0KineCuts();
virtual ~AliESDv0KineCuts();
AliESDv0KineCuts(const AliESDv0KineCuts &ref);
AliESDv0KineCuts &operator=(const AliESDv0KineCuts &ref);
Bool_t ProcessV0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const;
Bool_t ProcessV0(AliESDv0* const v0, Int_t &pdgP, Int_t &pdgN) const;
void SetEvent(AliESDEvent* const event);
void SetEvent(AliVEvent* const event);
void SetPrimaryVertex(AliKFVertex* const v);
void SetMode(Int_t mode, Int_t type);
void SetMode(Int_t mode, const char* type);
void UseExternalVertex(Bool_t use_external=kTRUE);
AliKFParticle *CreateMotherParticle(const AliVTrack* const pdaughter, const AliVTrack* const ndaughter, Int_t pspec, Int_t nspec) const;
void SetCuts();
void SetNTPCclusters(Int_t n) { fTPCNcls = n; };
void SetTPCrefit(Bool_t r = kTRUE) { fTPCrefit = r; };
void SetTPCchi2perCls(Float_t chi2) { fTPCchi2perCls = chi2; };
void SetTPCclusterratio(Float_t r) { fTPCclsRatio = r; };
void SetNoKinks(Bool_t k = kTRUE) { fNoKinks = k; };
void SetGammaCutChi2NDF(Float_t val) { fGcutChi2NDF = val; };
void SetGammaCutCosPoint(Float_t * const val) {
fGcutCosPoint[0] = val[0];
fGcutCosPoint[1] = val[1];
};
void SetGammaCutDCA(Float_t * const val){
fGcutDCA[0] = val[0];
fGcutDCA[1] = val[1];
};
void SetGammaCutVertexR(Float_t * const val){
fGcutVertexR[0] = val[0];
fGcutVertexR[1] = val[1];
};
void SetGammaCutPsiPair(Float_t * const val){
fGcutPsiPair[0] = val[0];
fGcutPsiPair[1] = val[1];
};
void SetGammaCutInvMass(Float_t val){
fGcutInvMass = val;
};
void SetK0CutChi2NDF(Float_t val) { fK0cutChi2NDF = val; };
void SetK0CutCosPoint(Float_t * const val) {
fK0cutCosPoint[0] = val[0];
fK0cutCosPoint[1] = val[1];
};
void SetK0CutDCA(Float_t * const val){
fK0cutDCA[0] = val[0];
fK0cutDCA[1] = val[1];
};
void SetK0CutVertexR(Float_t * const val){
fK0cutVertexR[0] = val[0];
fK0cutVertexR[1] = val[1];
};
void SetK0CutInvMass(Float_t * const val){
fK0cutInvMass[0] = val[0];
fK0cutInvMass[1] = val[1];
};
void SetLambdaCutChi2NDF(Float_t val) { fLcutChi2NDF = val; };
void SetLambdaCutCosPoint(Float_t * const val) {
fLcutCosPoint[0] = val[0];
fLcutCosPoint[1] = val[1];
};
void SetLambdaCutDCA(Float_t * const val){
fLcutDCA[0] = val[0];
fLcutDCA[1] = val[1];
};
void SetLambdaCutVertexR(Float_t * const val){
fLcutVertexR[0] = val[0];
fLcutVertexR[1] = val[1];
};
void SetLambdaCutInvMass(Float_t * const val){
fLcutInvMass[0] = val[0];
fLcutInvMass[1] = val[1];
};
Int_t PreselectV0(AliESDv0* const v0) const;
Bool_t CaseGamma(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const;
Bool_t CaseK0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const;
Bool_t CaseLambda(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN, Int_t id) const;
Bool_t V0CutsCommon(const AliESDv0 * const v0) const;
Bool_t SingleTrackCuts(AliESDv0 * const v0) const;
void Armenteros(AliESDv0* const v0, Float_t val[2]) const;
Bool_t CheckSigns(AliESDv0* const v0) const;
Double_t PsiPair(AliESDv0* const v0) const;
Bool_t GetConvPosXY(AliESDtrack * const ptrack, AliESDtrack * const ntrack, Double_t convpos[2]) const;
Bool_t GetHelixCenter(AliESDtrack * const track, Double_t b, Int_t charge, Double_t center[2]) const;
protected:
void Copy(TObject &ref) const;
private:
Bool_t GammaEffCuts(AliESDv0 * const v0);
private:
AliESDEvent *fEvent;
AliKFVertex *fPrimaryVertex;
Int_t fType;
Int_t fMode;
Int_t fTPCNcls;
Bool_t fTPCrefit;
Float_t fTPCchi2perCls;
Float_t fTPCclsRatio;
Bool_t fNoKinks;
Float_t fGcutChi2NDF;
Float_t fGcutCosPoint[2];
Float_t fGcutDCA[2];
Float_t fGcutVertexR[2];
Float_t fGcutPsiPair[2];
Float_t fGcutInvMass;
Float_t fK0cutChi2NDF;
Float_t fK0cutCosPoint[2];
Float_t fK0cutDCA[2];
Float_t fK0cutVertexR[2];
Float_t fK0cutInvMass[2];
Float_t fLcutChi2NDF;
Float_t fLcutCosPoint[2];
Float_t fLcutDCA[2];
Float_t fLcutVertexR[2];
Float_t fLcutInvMass[2];
Bool_t fUseExternalVertex;
Bool_t fDeleteVertex;
ClassDef(AliESDv0KineCuts, 0);
};
#endif