#ifndef ALIAODV0KINECUTS_H
#define ALIAODV0KINECUTS_H
#include <TObject.h>
#include <TArrayI.h>
class AliAODv0;
class AliAODEvent;
class AliVEvent;
class AliAODTrack;
class AliVTrack;
class AliKFParticle;
class AliKFVertex;
class AliAODv0KineCuts : public TObject{
public:
enum{
kUndef = -1,
kGamma = 0,
kK0 = 1,
kLambda = 2,
kALambda = 3
};
enum{
kPP = 0,
kPbPb = 1,
};
enum{
kPurity = 0,
kEffGamma = 1
};
AliAODv0KineCuts();
virtual ~AliAODv0KineCuts();
AliAODv0KineCuts(const AliAODv0KineCuts &ref);
AliAODv0KineCuts &operator=(const AliAODv0KineCuts &ref);
Bool_t ProcessV0(AliAODv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const;
Bool_t ProcessV0(AliAODv0* const v0, Int_t &pdgP, Int_t &pdgN) const;
void SetEvent(AliAODEvent* 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 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(AliAODv0* const v0) const;
Bool_t CaseGamma(AliAODv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const;
Bool_t CaseK0(AliAODv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const;
Bool_t CaseLambda(AliAODv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN, Int_t id) const;
Bool_t V0CutsCommon(const AliAODv0 * const v0) const;
Bool_t SingleTrackCuts(AliAODv0 * const v0) const;
Bool_t CheckSigns(AliAODv0* const v0) const;
Double_t PsiPair(AliAODv0* const v0) const;
Bool_t GetConvPosXY(AliAODTrack * const ptrack, AliAODTrack * const ntrack, Double_t convpos[2]) const;
Bool_t GetHelixCenter(AliAODTrack * const track, Double_t b, Int_t charge, Double_t center[2]) const;
protected:
void Copy(TObject &ref) const;
private:
Bool_t GammaEffCuts(AliAODv0 * const v0);
Bool_t IsKinkMother(const AliAODTrack * const track) const;
Bool_t IsKinkDaughter(const AliAODTrack * const track) const;
private:
AliAODEvent *fEvent;
AliKFVertex *fPrimaryVertex;
Int_t fType;
Int_t fMode;
Int_t fTPCNcls;
Bool_t fTPCrefit;
Float_t fTPCclsRatio;
Bool_t fNoKinks;
TArrayI fKinkMotherList;
Int_t fNumberKinkMothers;
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(AliAODv0KineCuts, 0);
};
#endif