fix mem leak and compiler warning
[u/mrichter/AliRoot.git] / ANALYSIS / AliAODPairBaseCut.h
1 #ifndef ALIAODPAIRBASECUT_H
2 #define ALIAODPAIRBASECUT_H
3 // Base class AliAODPairBaseCut:
4 // This class defines the range of some property - pure virtual
5 // Property is coded by AliAODCutTypes type
6 // Derived classes:
7 //       AliAODQInvCut
8 //       AliAODKtCut
9 //       AliAODKStarCut
10 //       AliAODKStarOutCut
11 //       AliAODKStarSideCut
12 //       AliAODKStarLongCut
13 //       AliAODQSideLCMSCut
14 //       AliAODQOutLCMSCut
15 //       AliAODQLongLCMSCut
16 //       AliAODDeltaECut
17 //       AliAODDeltaPCut
18 //       AliAODDeltaPvectorCut
19 //       AliAODDeltaPhiCut
20 //       AliAODDeltaThetaCut
21 //       AliAODCluterOverlapCut
22 //       AliAODAvSeparationCut
23 //       AliAODSeparationCut
24 //       AliAODITSSeparationCut
25 //       AliAODOutSideSameSignCut
26 //       AliAODOutSideDiffSignCut
27 //       AliAODLogicalOperPairCut
28 //       AliAODOrPairCut
29 //       AliAODAndPairCut
30
31 #include <TObject.h> 
32 #include "AliAODPair.h"
33
34
35 class AliAODPairBaseCut: public TObject
36 {
37  public:
38
39   enum EAODPairCutProperty
40     {
41       kHbtPairCutPropQInv, //Q invariant
42       kHbtPairCutPropKt,
43       kHbtPairCutPropKStar,
44       kHbtPairCutPropKStarOut,
45       kHbtPairCutPropKStarSide,
46       kHbtPairCutPropKStarLong,
47       kHbtPairCutPropQSideLCMS,
48       kHbtPairCutPropQOutLCMS,
49       kHbtPairCutPropQLongLCMS,
50       kHbtPairCutPropDeltaPhi,
51       kHbtPairCutPropDeltaTheta,
52       kHbtPairCutPropDeltaE,
53       kHbtPairCutPropDeltaP,//scalar difference
54       kHbtPairCutPropDeltaPvector,//legth of the momenta difference vector
55       kHbtPairCutPropDeltaPt,
56       kHbtPairCutPropAvSepar,
57       kHbtPairCutPropSepar,
58       kHbtPairCutPropClOverlap,
59       kHbtPairCutPropPixelSepar,
60       kHbtPairCutPropNone
61     };
62
63   AliAODPairBaseCut(Double_t min = 0.0, Double_t max = 0.0, EAODPairCutProperty prop= kHbtPairCutPropNone):
64     fMin(min),fMax(max),fProperty(prop){}
65   
66   virtual   ~AliAODPairBaseCut(){}
67      
68   virtual Bool_t    Rejected(AliAODPair* pair) const;
69   
70   void      SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
71   
72   void      SetMinimum(Double_t min){fMin = min;}
73   void      SetMaximum(Double_t max){fMax = max;}
74   
75   Double_t  GetMinimum() const {return fMin;}
76   Double_t  GetMaximum() const {return fMax;}
77   
78   EAODPairCutProperty GetProperty() const {return fProperty;}
79   
80  protected:
81   virtual Double_t  GetValue(AliAODPair* pair) const = 0;
82   
83   Double_t fMin; // Lower boundary of the range
84   Double_t fMax; // Upper boundary of the range
85   
86   EAODPairCutProperty fProperty; // The property itself
87   
88   ClassDef(AliAODPairBaseCut,1)
89  
90  };
91 /******************************************************************/
92
93 inline Bool_t AliAODPairBaseCut::Rejected(AliAODPair* pair) const
94 {
95   //checks if pair proprty is in range
96   //null pointer check is made by AliAODPairCut, so here is unnecesary
97   
98   Double_t value = GetValue(pair);
99   if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
100   else return kTRUE; //rejected
101 }
102 /******************************************************************/
103 /******************************************************************/
104 /******************************************************************/
105
106 class AliAODQInvCut: public AliAODPairBaseCut
107 {
108  public:
109   AliAODQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropQInv){}
110   virtual ~AliAODQInvCut(){}
111  protected:
112   virtual Double_t  GetValue(AliAODPair* pair) const {return pair->GetQInv();}
113   
114   ClassDef(AliAODQInvCut,1)
115  };
116 /******************************************************************/
117
118 class AliAODKtCut: public AliAODPairBaseCut {
119  public:
120   AliAODKtCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKt){}
121   virtual ~AliAODKtCut(){}
122  protected:
123   virtual Double_t  GetValue(AliAODPair* pair) const {return pair->GetKt();}
124
125   ClassDef(AliAODKtCut,1)
126  };
127 /******************************************************************/
128
129 class AliAODKStarCut: public AliAODPairBaseCut
130 {
131  public:
132   AliAODKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKStar){}
133   virtual ~AliAODKStarCut(){}
134  protected:
135   virtual Double_t  GetValue(AliAODPair* pair) const {return pair->GetKStar();}
136
137   ClassDef(AliAODKStarCut,1)
138 };
139 /******************************************************************/
140
141 class AliAODKStarOutCut: public AliAODPairBaseCut
142 {
143  public:
144   AliAODKStarOutCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKStarOut){}
145   virtual ~AliAODKStarOutCut(){}
146  protected:
147   virtual Double_t  GetValue(AliAODPair* pair) const {return pair->GetKStarOut();}
148
149   ClassDef(AliAODKStarOutCut,1)
150 };
151 /******************************************************************/
152 class AliAODKStarSideCut: public AliAODPairBaseCut
153 {
154  public:
155   AliAODKStarSideCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKStarSide){}
156   virtual ~AliAODKStarSideCut(){}
157  protected:
158   virtual Double_t  GetValue(AliAODPair* pair) const {return pair->GetKStarSide();}
159
160   ClassDef(AliAODKStarSideCut,1)
161 };
162
163 /******************************************************************/
164
165 class AliAODKStarLongCut: public AliAODPairBaseCut
166 {
167  public:
168   AliAODKStarLongCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKStarLong){}
169   virtual ~AliAODKStarLongCut(){}
170  protected:
171   virtual Double_t  GetValue(AliAODPair* pair) const {return pair->GetKStarLong();}
172
173   ClassDef(AliAODKStarLongCut,1)
174 };
175 /******************************************************************/
176
177 class AliAODQSideLCMSCut: public AliAODPairBaseCut
178 {
179  public:
180   AliAODQSideLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
181     AliAODPairBaseCut(min,max,kHbtPairCutPropQSideLCMS){}
182   virtual ~AliAODQSideLCMSCut(){}
183  protected:
184   virtual Double_t  GetValue(AliAODPair* pair) const 
185     {return pair->GetQSideLCMS();}
186
187   ClassDef(AliAODQSideLCMSCut,1)
188 };
189 /******************************************************************/
190
191
192 class AliAODQOutLCMSCut: public AliAODPairBaseCut
193 {
194  public:
195   AliAODQOutLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
196     AliAODPairBaseCut(min,max,kHbtPairCutPropQOutLCMS){}
197   virtual ~AliAODQOutLCMSCut(){}
198  protected:
199   virtual Double_t  GetValue(AliAODPair* pair) const 
200     {return pair->GetQOutLCMS();}
201   
202   ClassDef(AliAODQOutLCMSCut,1)
203 };
204 /******************************************************************/
205
206 class AliAODQLongLCMSCut: public AliAODPairBaseCut
207 {
208  public:
209   AliAODQLongLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
210     AliAODPairBaseCut(min,max,kHbtPairCutPropQLongLCMS){}
211   virtual ~AliAODQLongLCMSCut(){}
212  protected:
213   virtual Double_t  GetValue(AliAODPair* pair) const 
214     {return pair->GetQLongLCMS();}
215
216   ClassDef(AliAODQLongLCMSCut,1)
217 };
218 /******************************************************************/
219
220 class AliAODDeltaECut: public AliAODPairBaseCut
221 {
222  public:
223   AliAODDeltaECut(Double_t min = 0.0, Double_t max = 0.0):
224     AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaE){}
225   virtual ~AliAODDeltaECut(){}
226  protected:
227   virtual Double_t  GetValue(AliAODPair* pair) const 
228     {return pair->GetDeltaE();}
229
230   ClassDef(AliAODDeltaECut,1)
231 };
232 /******************************************************************/
233
234 class AliAODDeltaPCut: public AliAODPairBaseCut
235 {
236  public:
237   AliAODDeltaPCut(Double_t min = 0.0, Double_t max = 0.0):
238     AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaP){}
239   virtual ~AliAODDeltaPCut(){}
240  protected:
241   virtual Double_t  GetValue(AliAODPair* pair) const 
242     {return pair->GetDeltaP();}
243
244   ClassDef(AliAODDeltaPCut,1)
245 };
246 /******************************************************************/
247
248 class AliAODDeltaPvectorCut: public AliAODPairBaseCut
249 {
250  public:
251   AliAODDeltaPvectorCut(Double_t min = 0.0, Double_t max = 0.0):
252     AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaPvector){}
253   virtual ~AliAODDeltaPvectorCut(){}
254  protected:
255   virtual Double_t  GetValue(AliAODPair* pair) const 
256     {return pair->GetDeltaPvector();}
257
258   ClassDef(AliAODDeltaPvectorCut,1)
259 };
260 /******************************************************************/
261
262 class AliAODDeltaPhiCut: public AliAODPairBaseCut
263 {
264  public:
265   AliAODDeltaPhiCut(Double_t min = 0.0, Double_t max = 0.0):
266     AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaPhi){}
267   virtual ~AliAODDeltaPhiCut(){}
268  protected:
269   virtual Double_t  GetValue(AliAODPair* pair) const 
270     {return TMath::Abs(pair->GetDeltaPhi());}
271
272   ClassDef(AliAODDeltaPhiCut,1)
273 };
274 /******************************************************************/
275
276 class AliAODDeltaThetaCut: public AliAODPairBaseCut
277 {
278  public:
279   AliAODDeltaThetaCut(Double_t min = 0.0, Double_t max = 0.0):
280     AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaTheta){}
281   virtual ~AliAODDeltaThetaCut(){}
282  protected:
283   virtual Double_t  GetValue(AliAODPair* pair) const 
284     {return TMath::Abs(pair->GetDeltaTheta());}
285
286   ClassDef(AliAODDeltaThetaCut,1)
287 };
288 /******************************************************************/
289
290 class AliAODCluterOverlapCut: public AliAODPairBaseCut
291 {
292  public:
293   AliAODCluterOverlapCut(Double_t min = 0.0, Double_t max = 1e5):
294     AliAODPairBaseCut(min,max,kHbtPairCutPropClOverlap){}
295   virtual ~AliAODCluterOverlapCut(){}
296
297  protected:
298   virtual Double_t  GetValue(AliAODPair* pair) const;
299   ClassDef(AliAODCluterOverlapCut,1)
300 };
301 /******************************************************************/
302   
303 class AliAODAvSeparationCut: public AliAODPairBaseCut
304 {
305  public:
306   AliAODAvSeparationCut(Double_t min = 0.0, Double_t max = 1e5):
307     AliAODPairBaseCut(min,max,kHbtPairCutPropAvSepar){}
308   virtual ~AliAODAvSeparationCut(){}
309   
310  protected:
311   virtual Double_t  GetValue(AliAODPair* pair) const;
312   ClassDef(AliAODAvSeparationCut,1)
313 };
314 /******************************************************************/
315   
316 class AliAODSeparationCut: public AliAODPairBaseCut
317 {
318  public:
319   AliAODSeparationCut(Double_t min = 0.0, Double_t max = 1e5, Int_t point = 0):
320     AliAODPairBaseCut(min,max,kHbtPairCutPropSepar),fPoint(point){}
321   virtual ~AliAODSeparationCut(){}
322   
323  protected:
324   Int_t fPoint;//index of the point that distance should be measured
325   virtual Double_t  GetValue(AliAODPair* pair) const;
326   ClassDef(AliAODSeparationCut,1)
327 };
328 /******************************************************************/
329   
330 class AliAODITSSeparationCut: public AliAODPairBaseCut
331 {
332 //Anti merging cut for the first layer of pixels
333  public:
334   AliAODITSSeparationCut(Int_t layer = 0, Double_t deltarphi = 0.01, Double_t deltaz = 0.08):
335     AliAODPairBaseCut(deltarphi,deltaz,kHbtPairCutPropPixelSepar),fLayer(layer){}
336   virtual ~AliAODITSSeparationCut(){}
337   Bool_t   Rejected(AliAODPair* pair) const;
338   Int_t    GetLayer() const {return fLayer;}
339  protected:
340   Int_t fLayer;//index of the layer that distance should be measured 0: 1st pixels
341   virtual Double_t  GetValue(AliAODPair* /*pair*/) const {return 0.0;}//not used
342   ClassDef(AliAODITSSeparationCut,1)
343 };
344 /******************************************************************/
345
346 class AliAODOutSideSameSignCut: public AliAODPairBaseCut
347 {
348  public:
349   AliAODOutSideSameSignCut(){}
350   virtual ~AliAODOutSideSameSignCut(){}
351   virtual Bool_t Rejected(AliAODPair *p) const;
352  protected:
353   virtual Double_t  GetValue(AliAODPair* /*pair*/) const {return 0.0;}
354   ClassDef(AliAODOutSideSameSignCut,1)
355 };
356 /******************************************************************/
357
358 class AliAODOutSideDiffSignCut: public AliAODPairBaseCut
359 {
360  public:
361   AliAODOutSideDiffSignCut(){}
362   virtual ~AliAODOutSideDiffSignCut(){}
363   virtual Bool_t Rejected(AliAODPair *p) const;
364  protected:
365   virtual Double_t  GetValue(AliAODPair* /*pair*/) const {return 0.0;}
366   ClassDef(AliAODOutSideDiffSignCut,1)
367 };
368 /******************************************************************/
369
370 class AliAODLogicalOperPairCut:  public AliAODPairBaseCut
371  {
372    public:
373      AliAODLogicalOperPairCut();
374      AliAODLogicalOperPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second);
375      virtual   ~AliAODLogicalOperPairCut();
376    protected:
377      Double_t  GetValue(AliAODPair * /*pair*/) const {MayNotUse("GetValue");return 0.0;}
378
379      AliAODPairBaseCut* fFirst;   //second cut
380      AliAODPairBaseCut* fSecond;  //first cut
381    private:
382      AliAODLogicalOperPairCut(const AliAODLogicalOperPairCut & src);
383      AliAODLogicalOperPairCut & operator=(const AliAODLogicalOperPairCut & src);
384     class  AliAODDummyBasePairCut: public AliAODPairBaseCut
385      {
386        Double_t  GetValue(AliAODPair* /*pair*/) const {return 0.0;}
387        Bool_t    Rejected(AliAODPair* /*pair*/) const;
388      };
389
390     ClassDef(AliAODLogicalOperPairCut,1)
391  };
392 /******************************************************************/
393
394 class AliAODOrPairCut: public AliAODLogicalOperPairCut
395 {
396    public:
397      AliAODOrPairCut(){}
398      AliAODOrPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second):AliAODLogicalOperPairCut(first,second){}
399      virtual   ~AliAODOrPairCut(){}
400      Bool_t    Rejected(AliAODPair *p) const;
401      ClassDef(AliAODOrPairCut,1)
402 };
403 /******************************************************************/
404
405 class AliAODAndPairCut: public AliAODLogicalOperPairCut
406 {
407    public:
408      AliAODAndPairCut(){}
409      AliAODAndPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second):AliAODLogicalOperPairCut(first,second){}
410      virtual   ~AliAODAndPairCut(){}
411      Bool_t    Rejected(AliAODPair *p) const;
412      ClassDef(AliAODAndPairCut,1)
413 };
414
415 #endif