-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
- * See cxx source for full Copyright notice */\r
-/*\r
- * plesae see source file for more details\r
- */\r
-#ifndef ALIESDV0KINECUTS_H\r
-#define ALIESDV0KINECUTS_H\r
-\r
-#include <TObject.h>\r
-\r
-class AliESDv0;\r
-class AliESDEvent;\r
-class AliVEvent;\r
-class AliESDtrack;\r
-class AliVTrack;\r
-class AliKFParticle;\r
-class AliKFVertex;\r
-\r
-class AliESDv0KineCuts : public TObject{\r
- public:\r
- enum{ // Reconstructed V0\r
- kUndef = -1,\r
- kGamma = 0,\r
- kK0 = 1,\r
- kLambda = 2,\r
- kALambda = 3\r
- };\r
- enum{ // data types\r
- kPP = 0,\r
- kPbPb = 1, // not yet implemented\r
- };\r
- enum{ // operation modes\r
- kPurity = 0, // purely kinematical selection\r
- kEffGamma = 1 // !!! involves TPC dEdx or nSimga cuts !!!\r
- };\r
- \r
- AliESDv0KineCuts();\r
- virtual ~AliESDv0KineCuts();\r
-\r
- AliESDv0KineCuts(const AliESDv0KineCuts &ref);\r
- AliESDv0KineCuts &operator=(const AliESDv0KineCuts &ref);\r
-\r
- // main selection function - called once per V0 candidate\r
- Bool_t const ProcessV0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN);\r
- Bool_t const ProcessV0(AliESDv0* const v0, Int_t &pdgP, Int_t &pdgN);\r
-\r
- // must be called by the user\r
- void SetEvent(AliESDEvent* const event);\r
- void SetEvent(AliVEvent* const event);\r
- void SetPrimaryVertex(AliKFVertex* const v);\r
-\r
- // user can select an operation modes [see .cxx for details]\r
- void SetMode(Int_t mode, Int_t type);\r
- void SetMode(Int_t mode, const char* type);\r
-\r
- //\r
- // setter functions for V0 cut values\r
- // for default values see the constructor\r
- // see the default contructor for comments\r
- //\r
-\r
- // single track cuts\r
- void SetNTPCclusters(Int_t n) { fTPCNcls = n; };\r
- void SetTPCrefit(Bool_t r = kTRUE) { fTPCrefit = r; };\r
- void SetTPCchi2perCls(Float_t chi2) { fTPCchi2perCls = chi2; };\r
- void SetTPCclusterratio(Float_t r) { fTPCclsRatio = r; };\r
- void SetNoKinks(Bool_t k = kTRUE) { fNoKinks = k; };\r
-\r
- // gamma cuts\r
- void SetGammaCutChi2NDF(Float_t val) { fGcutChi2NDF = val; };\r
- void SetGammaCutCosPoint(Float_t * const val) { \r
- fGcutCosPoint[0] = val[0];\r
- fGcutCosPoint[1] = val[1];\r
- };\r
- void SetGammaCutDCA(Float_t * const val){\r
- fGcutDCA[0] = val[0];\r
- fGcutDCA[1] = val[1];\r
- };\r
- void SetGammaCutVertexR(Float_t * const val){\r
- fGcutVertexR[0] = val[0];\r
- fGcutVertexR[1] = val[1];\r
- };\r
- void SetGammaCutPsiPair(Float_t * const val){\r
- fGcutPsiPair[0] = val[0];\r
- fGcutPsiPair[1] = val[1];\r
- };\r
- void SetGammaCutInvMass(Float_t val){\r
- fGcutInvMass = val;\r
- };\r
- // K0 cuts\r
- void SetK0CutChi2NDF(Float_t val) { fK0cutChi2NDF = val; };\r
- void SetK0CutCosPoint(Float_t * const val) { \r
- fK0cutCosPoint[0] = val[0];\r
- fK0cutCosPoint[1] = val[1];\r
- };\r
- void SetK0CutDCA(Float_t * const val){\r
- fK0cutDCA[0] = val[0];\r
- fK0cutDCA[1] = val[1];\r
- };\r
- void SetK0CutVertexR(Float_t * const val){\r
- fK0cutVertexR[0] = val[0];\r
- fK0cutVertexR[1] = val[1];\r
- };\r
- void SetK0CutInvMass(Float_t * const val){\r
- fK0cutInvMass[0] = val[0];\r
- fK0cutInvMass[1] = val[1];\r
- };\r
- // lambda & anti-lambda cuts\r
- void SetLambdaCutChi2NDF(Float_t val) { fLcutChi2NDF = val; };\r
- void SetLambdaCutCosPoint(Float_t * const val) { \r
- fLcutCosPoint[0] = val[0];\r
- fLcutCosPoint[1] = val[1];\r
- };\r
- void SetLambdaCutDCA(Float_t * const val){\r
- fLcutDCA[0] = val[0];\r
- fLcutDCA[1] = val[1];\r
- };\r
- void SetLambdaCutVertexR(Float_t * const val){\r
- fLcutVertexR[0] = val[0];\r
- fLcutVertexR[1] = val[1];\r
- };\r
- void SetLambdaCutInvMass(Float_t * const val){\r
- fLcutInvMass[0] = val[0];\r
- fLcutInvMass[1] = val[1];\r
- };\r
- \r
-\r
- Int_t const PreselectV0(AliESDv0* const v0);\r
-\r
- Bool_t const CaseGamma(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN);\r
- Bool_t const CaseK0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN);\r
- Bool_t const CaseLambda(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN, Int_t id);\r
-\r
- Bool_t const V0CutsCommon(AliESDv0 * const v0);\r
- Bool_t const SingleTrackCuts(AliESDv0 * const v0);\r
- void const Armenteros(AliESDv0* const v0, Float_t val[2]);\r
- Bool_t const CheckSigns(AliESDv0* const v0);\r
-\r
- Double_t const PsiPair(AliESDv0* const v0);\r
- Bool_t const GetConvPosXY(AliESDtrack * const ptrack, AliESDtrack * const ntrack, Double_t convpos[2]);\r
- Bool_t const GetHelixCenter(AliESDtrack * const track, Double_t b, Int_t charge, Double_t center[2]);\r
-\r
- protected:\r
- void Copy(TObject &ref) const;\r
-\r
- private:\r
-\r
- AliKFParticle *CreateMotherParticle(const AliVTrack* const pdaughter, const AliVTrack* const ndaughter, Int_t pspec, Int_t nspec);\r
- void SetCuts(); // setup cuts for selected fMode and fType, see source file for details\r
- Bool_t GammaEffCuts(AliESDv0 * const v0); // set of cuts optimized for high gamma efficiency\r
-\r
- private:\r
- AliESDEvent *fEvent; // current event\r
- AliKFVertex *fPrimaryVertex; // primary vertex\r
-\r
- Int_t fType; // data type: p-p or Pb-Pb\r
- Int_t fMode; // current operation mode\r
-\r
- // single track cuts\r
- Int_t fTPCNcls; // number of TPC clusters\r
- Bool_t fTPCrefit; // TPC refit - yes [kTRUE] or do not care [kFALSE]\r
- Float_t fTPCchi2perCls; // max. chi2 per TPC cluster\r
- Float_t fTPCclsRatio; // min. TPC cluster ratio\r
- Bool_t fNoKinks; // kinks - no [kTRUE] or do not care [kFalse]\r
-\r
- // gamma cut values\r
- Float_t fGcutChi2NDF; // Chi2NF cut value for the AliKFparticle gamma\r
- Float_t fGcutCosPoint[2]; // cos of the pointing angle [min, max]\r
- Float_t fGcutDCA[2]; // DCA between the daughter tracks [min, max]\r
- Float_t fGcutVertexR[2]; // radius of the conversion point [min, max]\r
- Float_t fGcutPsiPair[2]; // value of the psi pair cut [min, max]\r
- Float_t fGcutInvMass; // upper value on the gamma invariant mass\r
- // K0 cut values\r
- Float_t fK0cutChi2NDF; // Chi2NF cut value for the AliKFparticle K0\r
- Float_t fK0cutCosPoint[2]; // cos of the pointing angle [min, max]\r
- Float_t fK0cutDCA[2]; // DCA between the daughter tracks [min, max]\r
- Float_t fK0cutVertexR[2]; // radius of the decay point [min, max]\r
- Float_t fK0cutInvMass[2]; // invariant mass window\r
- // Lambda & anti-Lambda cut values\r
- Float_t fLcutChi2NDF; // Chi2NF cut value for the AliKFparticle K0\r
- Float_t fLcutCosPoint[2]; // cos of the pointing angle [min, max]\r
- Float_t fLcutDCA[2]; // DCA between the daughter tracks [min, max]\r
- Float_t fLcutVertexR[2]; // radius of the decay point [min, max]\r
- Float_t fLcutInvMass[2]; // invariant mass window\r
- \r
- \r
- ClassDef(AliESDv0KineCuts, 0);\r
-\r
-};\r
-\r
-#endif\r
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+/*
+ * plesae see source file for more details
+ */
+#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{ // Reconstructed V0
+ kUndef = -1,
+ kGamma = 0,
+ kK0 = 1,
+ kLambda = 2,
+ kALambda = 3
+ };
+ enum{ // data types
+ kPP = 0,
+ kPbPb = 1, // not yet implemented
+ };
+ enum{ // operation modes
+ kPurity = 0, // purely kinematical selection
+ kEffGamma = 1 // !!! involves TPC dEdx or nSimga cuts !!!
+ };
+
+ AliESDv0KineCuts();
+ virtual ~AliESDv0KineCuts();
+
+ AliESDv0KineCuts(const AliESDv0KineCuts &ref);
+ AliESDv0KineCuts &operator=(const AliESDv0KineCuts &ref);
+
+ // main selection function - called once per V0 candidate
+ 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;
+
+ // must be called by the user
+ void SetEvent(AliESDEvent* const event);
+ void SetEvent(AliVEvent* const event);
+ void SetPrimaryVertex(AliKFVertex* const v);
+
+ // user can select an operation modes [see .cxx for details]
+ 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(); // setup cuts for selected fMode and fType, see source file for details
+ //
+ // setter functions for V0 cut values
+ // for default values see the constructor
+ // see the default contructor for comments
+ //
+
+ // single track cuts
+ 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; };
+
+ // gamma cuts
+ 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;
+ };
+ // K0 cuts
+ 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];
+ };
+ // lambda & anti-lambda cuts
+ 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); // set of cuts optimized for high gamma efficiency
+
+ private:
+ AliESDEvent *fEvent; // current event
+ AliKFVertex *fPrimaryVertex; // primary vertex
+
+ Int_t fType; // data type: p-p or Pb-Pb
+ Int_t fMode; // current operation mode
+
+ // single track cuts
+ Int_t fTPCNcls; // number of TPC clusters
+ Bool_t fTPCrefit; // TPC refit - yes [kTRUE] or do not care [kFALSE]
+ Float_t fTPCchi2perCls; // max. chi2 per TPC cluster
+ Float_t fTPCclsRatio; // min. TPC cluster ratio
+ Bool_t fNoKinks; // kinks - no [kTRUE] or do not care [kFalse]
+
+ // gamma cut values
+ Float_t fGcutChi2NDF; // Chi2NF cut value for the AliKFparticle gamma
+ Float_t fGcutCosPoint[2]; // cos of the pointing angle [min, max]
+ Float_t fGcutDCA[2]; // DCA between the daughter tracks [min, max]
+ Float_t fGcutVertexR[2]; // radius of the conversion point [min, max]
+ Float_t fGcutPsiPair[2]; // value of the psi pair cut [min, max]
+ Float_t fGcutInvMass; // upper value on the gamma invariant mass
+ // K0 cut values
+ Float_t fK0cutChi2NDF; // Chi2NF cut value for the AliKFparticle K0
+ Float_t fK0cutCosPoint[2]; // cos of the pointing angle [min, max]
+ Float_t fK0cutDCA[2]; // DCA between the daughter tracks [min, max]
+ Float_t fK0cutVertexR[2]; // radius of the decay point [min, max]
+ Float_t fK0cutInvMass[2]; // invariant mass window
+ // Lambda & anti-Lambda cut values
+ Float_t fLcutChi2NDF; // Chi2NF cut value for the AliKFparticle K0
+ Float_t fLcutCosPoint[2]; // cos of the pointing angle [min, max]
+ Float_t fLcutDCA[2]; // DCA between the daughter tracks [min, max]
+ Float_t fLcutVertexR[2]; // radius of the decay point [min, max]
+ Float_t fLcutInvMass[2]; // invariant mass window
+ Bool_t fUseExternalVertex; // Is kTRUE if Vertex is set via SetPrimaryVertex()
+ Bool_t fDeleteVertex; // Is kTRUE if Vertex has been created in SetEvent() function
+
+ ClassDef(AliESDv0KineCuts, 0);
+
+};
+
+#endif