Changes for #93916 EMCAL commit attached patch and port to the release
[u/mrichter/AliRoot.git] / ANALYSIS / AliESDv0KineCuts.h
1 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
2  * See cxx source for full Copyright notice                               */\r
3 /*\r
4  * plesae see source file for more details\r
5  */\r
6 #ifndef ALIESDV0KINECUTS_H\r
7 #define ALIESDV0KINECUTS_H\r
8 \r
9 #include <TObject.h>\r
10 \r
11 class AliESDv0;\r
12 class AliESDEvent;\r
13 class AliVEvent;\r
14 class AliESDtrack;\r
15 class AliVTrack;\r
16 class AliKFParticle;\r
17 class AliKFVertex;\r
18 \r
19 class AliESDv0KineCuts : public TObject{\r
20  public:\r
21   enum{ // Reconstructed V0\r
22     kUndef = -1,\r
23       kGamma = 0,\r
24       kK0 = 1,\r
25       kLambda = 2,\r
26       kALambda = 3\r
27       };\r
28   enum{ // data types\r
29     kPP = 0,\r
30       kPbPb = 1,  // not yet implemented\r
31       };\r
32   enum{ // operation modes\r
33     kPurity = 0, // purely kinematical selection\r
34       kEffGamma = 1  // !!! involves TPC dEdx or nSimga cuts !!!\r
35       };\r
36   \r
37   AliESDv0KineCuts();\r
38   virtual ~AliESDv0KineCuts();\r
39 \r
40   AliESDv0KineCuts(const AliESDv0KineCuts &ref);\r
41   AliESDv0KineCuts &operator=(const AliESDv0KineCuts &ref);\r
42 \r
43   // main selection function - called once per V0 candidate\r
44   Bool_t ProcessV0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const;\r
45   Bool_t ProcessV0(AliESDv0* const v0, Int_t &pdgP, Int_t &pdgN) const;\r
46 \r
47   // must be called by the user\r
48   void SetEvent(AliESDEvent* const event);\r
49   void SetEvent(AliVEvent* const event);\r
50   void SetPrimaryVertex(AliKFVertex* const v);\r
51 \r
52   // user can select an operation modes [see .cxx for details]\r
53   void   SetMode(Int_t mode, Int_t type);\r
54   void   SetMode(Int_t mode, const char* type);\r
55   void   UseExternalVertex(Bool_t use_external=kTRUE);\r
56   AliKFParticle *CreateMotherParticle(const AliVTrack* const pdaughter, const AliVTrack* const ndaughter, Int_t pspec, Int_t nspec) const;\r
57   void      SetCuts();                          // setup cuts for selected fMode and fType, see source file for details\r
58   //\r
59   // setter functions for V0 cut values\r
60   // for default values see the constructor\r
61   // see the default contructor for comments\r
62   //\r
63 \r
64   // single track cuts\r
65   void   SetNTPCclusters(Int_t n) { fTPCNcls = n; };\r
66   void   SetTPCrefit(Bool_t r = kTRUE) { fTPCrefit = r; };\r
67   void   SetTPCchi2perCls(Float_t chi2) { fTPCchi2perCls = chi2; };\r
68   void   SetTPCclusterratio(Float_t r) { fTPCclsRatio = r; };\r
69   void   SetNoKinks(Bool_t k = kTRUE) { fNoKinks = k; };\r
70 \r
71   // gamma cuts\r
72   void   SetGammaCutChi2NDF(Float_t val)  { fGcutChi2NDF = val; };\r
73   void   SetGammaCutCosPoint(Float_t * const val) { \r
74     fGcutCosPoint[0] = val[0];\r
75     fGcutCosPoint[1] = val[1];\r
76   };\r
77   void   SetGammaCutDCA(Float_t * const val){\r
78     fGcutDCA[0] = val[0];\r
79     fGcutDCA[1] = val[1];\r
80   };\r
81   void   SetGammaCutVertexR(Float_t * const val){\r
82     fGcutVertexR[0] = val[0];\r
83     fGcutVertexR[1] = val[1];\r
84   };\r
85   void   SetGammaCutPsiPair(Float_t * const val){\r
86     fGcutPsiPair[0] = val[0];\r
87     fGcutPsiPair[1] = val[1];\r
88   };\r
89   void   SetGammaCutInvMass(Float_t val){\r
90     fGcutInvMass = val;\r
91   };\r
92   // K0 cuts\r
93   void   SetK0CutChi2NDF(Float_t val)  { fK0cutChi2NDF = val; };\r
94   void   SetK0CutCosPoint(Float_t * const val) { \r
95     fK0cutCosPoint[0] = val[0];\r
96     fK0cutCosPoint[1] = val[1];\r
97   };\r
98   void   SetK0CutDCA(Float_t * const val){\r
99     fK0cutDCA[0] = val[0];\r
100     fK0cutDCA[1] = val[1];\r
101   };\r
102   void   SetK0CutVertexR(Float_t * const val){\r
103     fK0cutVertexR[0] = val[0];\r
104     fK0cutVertexR[1] = val[1];\r
105   };\r
106   void   SetK0CutInvMass(Float_t * const val){\r
107     fK0cutInvMass[0] = val[0];\r
108     fK0cutInvMass[1] = val[1];\r
109   };\r
110   // lambda & anti-lambda cuts\r
111   void   SetLambdaCutChi2NDF(Float_t val)  { fLcutChi2NDF = val; };\r
112   void   SetLambdaCutCosPoint(Float_t * const val) { \r
113     fLcutCosPoint[0] = val[0];\r
114     fLcutCosPoint[1] = val[1];\r
115   };\r
116   void   SetLambdaCutDCA(Float_t * const val){\r
117     fLcutDCA[0] = val[0];\r
118     fLcutDCA[1] = val[1];\r
119   };\r
120   void   SetLambdaCutVertexR(Float_t * const val){\r
121     fLcutVertexR[0] = val[0];\r
122     fLcutVertexR[1] = val[1];\r
123   };\r
124   void   SetLambdaCutInvMass(Float_t * const val){\r
125     fLcutInvMass[0] = val[0];\r
126     fLcutInvMass[1] = val[1];\r
127   };\r
128   \r
129 \r
130   Int_t  PreselectV0(AliESDv0* const v0) const;\r
131 \r
132   Bool_t CaseGamma(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const;\r
133   Bool_t CaseK0(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN) const;\r
134   Bool_t CaseLambda(AliESDv0* const v0, Int_t &pdgV0, Int_t &pdgP, Int_t &pdgN, Int_t id) const;\r
135 \r
136   Bool_t V0CutsCommon(const AliESDv0 * const v0) const;\r
137   Bool_t SingleTrackCuts(AliESDv0 * const v0) const;\r
138   void   Armenteros(AliESDv0* const v0, Float_t val[2]) const;\r
139   Bool_t CheckSigns(AliESDv0* const v0) const;\r
140 \r
141   Double_t PsiPair(AliESDv0* const v0) const;\r
142   Bool_t   GetConvPosXY(AliESDtrack * const ptrack, AliESDtrack * const ntrack, Double_t convpos[2]) const;\r
143   Bool_t   GetHelixCenter(AliESDtrack * const track, Double_t b, Int_t charge, Double_t center[2]) const;\r
144 \r
145  protected:\r
146   void Copy(TObject &ref) const;\r
147 \r
148  private:\r
149   Bool_t    GammaEffCuts(AliESDv0 * const v0);  // set of cuts optimized for high gamma efficiency\r
150 \r
151  private:\r
152   AliESDEvent           *fEvent;          // current event\r
153   AliKFVertex           *fPrimaryVertex;  // primary vertex\r
154 \r
155   Int_t                 fType;            // data type: p-p or Pb-Pb\r
156   Int_t                 fMode;            // current operation mode\r
157 \r
158   // single track cuts\r
159   Int_t                 fTPCNcls;          // number of TPC clusters\r
160   Bool_t                fTPCrefit;         // TPC refit - yes [kTRUE] or do not care [kFALSE]\r
161   Float_t               fTPCchi2perCls;    // max. chi2 per TPC cluster\r
162   Float_t               fTPCclsRatio;      // min. TPC cluster ratio\r
163   Bool_t                fNoKinks;          // kinks - no [kTRUE] or do not care [kFalse]\r
164 \r
165   // gamma cut values\r
166   Float_t               fGcutChi2NDF;      // Chi2NF cut value for the AliKFparticle gamma\r
167   Float_t               fGcutCosPoint[2];  // cos of the pointing angle [min, max]\r
168   Float_t               fGcutDCA[2];       // DCA between the daughter tracks [min, max]\r
169   Float_t               fGcutVertexR[2];   // radius of the conversion point [min, max]\r
170   Float_t               fGcutPsiPair[2];   // value of the psi pair cut [min, max]\r
171   Float_t               fGcutInvMass;      // upper value on the gamma invariant mass\r
172   // K0 cut values\r
173   Float_t               fK0cutChi2NDF;     // Chi2NF cut value for the AliKFparticle K0\r
174   Float_t               fK0cutCosPoint[2]; // cos of the pointing angle [min, max]\r
175   Float_t               fK0cutDCA[2];      // DCA between the daughter tracks [min, max]\r
176   Float_t               fK0cutVertexR[2];  // radius of the decay point [min, max]\r
177   Float_t               fK0cutInvMass[2];  // invariant mass window\r
178   // Lambda & anti-Lambda cut values\r
179   Float_t               fLcutChi2NDF;      // Chi2NF cut value for the AliKFparticle K0\r
180   Float_t               fLcutCosPoint[2];  // cos of the pointing angle [min, max]\r
181   Float_t               fLcutDCA[2];       // DCA between the daughter tracks [min, max]\r
182   Float_t               fLcutVertexR[2];   // radius of the decay point [min, max]\r
183   Float_t               fLcutInvMass[2];   // invariant mass window\r
184   Bool_t                fUseExternalVertex; // Is kTRUE if Vertex is set via SetPrimaryVertex()\r
185   Bool_t                fDeleteVertex;      // Is kTRUE if Vertex has been created in SetEvent() function\r
186   \r
187   ClassDef(AliESDv0KineCuts, 0);\r
188 \r
189 };\r
190 \r
191 #endif\r