1 #ifndef AliAODPairCUT_H
2 #define AliAODPairCUT_H
6 //Piotr Skowronski@cern.ch
7 //Class implements cut on the pair of particles
9 //more info: http://alisoft.cern.ch/people/skowron/analyzer/index.html
12 #include "AliAODPair.h"
14 class AliAODParticleCut;
15 class AliAODPairBaseCut;
17 enum EAODPairCutProperty
19 kHbtPairCutPropQInv, //Q invariant
22 kHbtPairCutPropQSideLCMS,
23 kHbtPairCutPropQOutLCMS,
24 kHbtPairCutPropQLongLCMS,
25 kHbtPairCutPropDeltaPhi,
26 kHbtPairCutPropDeltaTheta,
27 kHbtPairCutPropDeltaP,
28 kHbtPairCutPropDeltaPt,
29 kHbtPairCutPropAvSepar,
31 kHbtPairCutPropClOverlap,
32 kHbtPairCutPropPixelSepar,
35 /******************************************************************/
37 class AliAODPairCut: public TNamed
41 AliAODPairCut(const AliAODPairCut& in);
42 AliAODPairCut& operator = (const AliAODPairCut& in);
44 virtual ~AliAODPairCut();
45 virtual Bool_t Rejected(AliAODPair* pair) const;
46 virtual Bool_t PassPairProp(AliAODPair* pair) const;
48 virtual Bool_t IsEmpty() const {return kFALSE;}
49 void SetFirstPartCut(AliAODParticleCut* cut); //sets the cut on the first particle
50 void SetSecondPartCut(AliAODParticleCut* cut); //sets the cut on the second particle
52 void SetPartCut(AliAODParticleCut* cut);//sets the the same cut on both particles
54 virtual void AddBasePairCut(AliAODPairBaseCut* cut);
58 void SetQInvRange(Double_t min, Double_t max);
59 void SetKtRange(Double_t min, Double_t max);
60 void SetKStarRange(Double_t min, Double_t max);
61 void SetQOutCMSLRange(Double_t min, Double_t max);
62 void SetQSideCMSLRange(Double_t min, Double_t max);
63 void SetQLongCMSLRange(Double_t min, Double_t max);
64 void SetAvSeparationRange(Double_t min,Double_t max = 10e5);//Anti-Merging Cut
65 void SetITSSeparation(Int_t layer, Double_t drphi=0.01,Double_t dz = 0.08);//Anti-Merging Cut for first pixel layer
66 void SetClusterOverlapRange(Double_t min,Double_t max);//Anti-Splitting Max range -0.5 1.0
68 AliAODParticleCut* GetFirstPartCut() const {return fFirstPartCut;}
69 AliAODParticleCut* GetSecondPartCut() const {return fSecondPartCut;}
72 AliAODParticleCut* fFirstPartCut;//cut on first particle in pair
73 AliAODParticleCut* fSecondPartCut;//cut on second particle in pair
75 AliAODPairBaseCut** fCuts; //! array of poiters to base cuts
76 Int_t fNCuts;//Number of cuts in fCuts array
79 AliAODPairBaseCut* FindCut(EAODPairCutProperty cut);
81 static const Int_t fgkMaxCuts; // Max number of cuts
82 ClassDef(AliAODPairCut,2)
84 /******************************************************************/
85 /******************************************************************/
86 /******************************************************************/
88 class AliAODPairEmptyCut: public AliAODPairCut
90 //Empty - it passes possitively all particles - it means returns always False
91 //Class describing cut on pairs of particles
93 AliAODPairEmptyCut(){};
94 AliAODPairEmptyCut(const AliAODPairEmptyCut& in):AliAODPairCut(in){};
95 virtual ~AliAODPairEmptyCut(){};
97 Bool_t Rejected(AliAODPair*) const {return kFALSE;} //accpept everything
98 Bool_t IsEmpty() const {return kTRUE;}
100 ClassDef(AliAODPairEmptyCut,1)
105 /******************************************************************/
106 /******************************************************************/
107 /******************************************************************/
109 class AliAODPairBaseCut: public TObject
111 //This class defines the range of some property - pure virtual
112 //Property is coded by AliAODCutTypes type
116 AliAODPairBaseCut(Double_t min = 0.0, Double_t max = 0.0, EAODPairCutProperty prop= kHbtPairCutPropNone):
117 fMin(min),fMax(max),fProperty(prop){}
119 virtual ~AliAODPairBaseCut(){}
121 virtual Bool_t Rejected(AliAODPair* pair) const;
123 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
125 void SetMinimum(Double_t min){fMin = min;}
126 void SetMaximum(Double_t max){fMax = max;}
128 Double_t GetMinimum() const {return fMin;}
129 Double_t GetMaximum() const {return fMax;}
131 EAODPairCutProperty GetProperty() const {return fProperty;}
134 virtual Double_t GetValue(AliAODPair* pair) const = 0;
136 Double_t fMin; // Lower boundary of the range
137 Double_t fMax; // Upper boundary of the range
139 EAODPairCutProperty fProperty; // The property itself
141 ClassDef(AliAODPairBaseCut,1)
144 /******************************************************************/
146 inline Bool_t AliAODPairBaseCut::Rejected(AliAODPair* pair) const
148 //checks if pair proprty is in range
149 //null pointer check is made by AliAODPairCut, so here is unnecesary
151 Double_t value = GetValue(pair);
152 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
153 else return kTRUE; //rejected
155 /******************************************************************/
156 /******************************************************************/
157 /******************************************************************/
159 class AliAODQInvCut: public AliAODPairBaseCut
162 AliAODQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropQInv){}
163 virtual ~AliAODQInvCut(){}
165 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetQInv();}
167 ClassDef(AliAODQInvCut,1)
169 /******************************************************************/
171 class AliAODKtCut: public AliAODPairBaseCut {
173 AliAODKtCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKt){}
174 virtual ~AliAODKtCut(){}
176 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetKt();}
178 ClassDef(AliAODKtCut,1)
180 /******************************************************************/
182 class AliAODKStarCut: public AliAODPairBaseCut
185 AliAODKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliAODPairBaseCut(min,max,kHbtPairCutPropKStar){}
186 virtual ~AliAODKStarCut(){}
188 virtual Double_t GetValue(AliAODPair* pair) const {return pair->GetKStar();}
190 ClassDef(AliAODKStarCut,1)
192 /******************************************************************/
194 class AliAODQSideLCMSCut: public AliAODPairBaseCut
197 AliAODQSideLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
198 AliAODPairBaseCut(min,max,kHbtPairCutPropQSideLCMS){}
199 virtual ~AliAODQSideLCMSCut(){}
201 virtual Double_t GetValue(AliAODPair* pair) const
202 {return pair->GetQSideLCMS();}
204 ClassDef(AliAODQSideLCMSCut,1)
206 /******************************************************************/
209 class AliAODQOutLCMSCut: public AliAODPairBaseCut
212 AliAODQOutLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
213 AliAODPairBaseCut(min,max,kHbtPairCutPropQOutLCMS){}
214 virtual ~AliAODQOutLCMSCut(){}
216 virtual Double_t GetValue(AliAODPair* pair) const
217 {return pair->GetQOutLCMS();}
219 ClassDef(AliAODQOutLCMSCut,1)
221 /******************************************************************/
223 class AliAODQLongLCMSCut: public AliAODPairBaseCut
226 AliAODQLongLCMSCut(Double_t min = 0.0, Double_t max = 0.0):
227 AliAODPairBaseCut(min,max,kHbtPairCutPropQLongLCMS){}
228 virtual ~AliAODQLongLCMSCut(){}
230 virtual Double_t GetValue(AliAODPair* pair) const
231 {return pair->GetQLongLCMS();}
233 ClassDef(AliAODQLongLCMSCut,1)
235 /******************************************************************/
237 class AliAODDeltaPhiCut: public AliAODPairBaseCut
240 AliAODDeltaPhiCut(Double_t min = 0.0, Double_t max = 0.0):
241 AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaPhi){}
242 virtual ~AliAODDeltaPhiCut(){}
244 virtual Double_t GetValue(AliAODPair* pair) const
245 {return TMath::Abs(pair->GetDeltaPhi());}
247 ClassDef(AliAODDeltaPhiCut,1)
249 /******************************************************************/
251 class AliAODDeltaThetaCut: public AliAODPairBaseCut
254 AliAODDeltaThetaCut(Double_t min = 0.0, Double_t max = 0.0):
255 AliAODPairBaseCut(min,max,kHbtPairCutPropDeltaTheta){}
256 virtual ~AliAODDeltaThetaCut(){}
258 virtual Double_t GetValue(AliAODPair* pair) const
259 {return TMath::Abs(pair->GetDeltaTheta());}
261 ClassDef(AliAODDeltaThetaCut,1)
263 /******************************************************************/
265 class AliAODCluterOverlapCut: public AliAODPairBaseCut
268 AliAODCluterOverlapCut(Double_t min = 0.0, Double_t max = 1e5):
269 AliAODPairBaseCut(min,max,kHbtPairCutPropClOverlap){}
270 virtual ~AliAODCluterOverlapCut(){}
273 virtual Double_t GetValue(AliAODPair* pair) const;
274 ClassDef(AliAODCluterOverlapCut,1)
276 /******************************************************************/
278 class AliAODAvSeparationCut: public AliAODPairBaseCut
281 AliAODAvSeparationCut(Double_t min = 0.0, Double_t max = 1e5):
282 AliAODPairBaseCut(min,max,kHbtPairCutPropAvSepar){}
283 virtual ~AliAODAvSeparationCut(){}
286 virtual Double_t GetValue(AliAODPair* pair) const;
287 ClassDef(AliAODAvSeparationCut,1)
289 /******************************************************************/
291 class AliAODSeparationCut: public AliAODPairBaseCut
294 AliAODSeparationCut(Double_t min = 0.0, Double_t max = 1e5, Int_t point = 0):
295 AliAODPairBaseCut(min,max,kHbtPairCutPropSepar),fPoint(point){}
296 virtual ~AliAODSeparationCut(){}
299 Int_t fPoint;//index of the point that distance should be measured
300 virtual Double_t GetValue(AliAODPair* pair) const;
301 ClassDef(AliAODSeparationCut,1)
303 /******************************************************************/
305 class AliAODITSSeparationCut: public AliAODPairBaseCut
307 //Anti merging cut for the first layer of pixels
309 AliAODITSSeparationCut(Int_t layer = 0, Double_t deltarphi = 0.01, Double_t deltaz = 0.08):
310 AliAODPairBaseCut(deltarphi,deltaz,kHbtPairCutPropPixelSepar),fLayer(layer){}
311 virtual ~AliAODITSSeparationCut(){}
312 Bool_t Rejected(AliAODPair* pair) const;
313 Int_t GetLayer() const {return fLayer;}
315 Int_t fLayer;//index of the layer that distance should be measured 0: 1st pixels
316 virtual Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}//not used
317 ClassDef(AliAODITSSeparationCut,1)
319 /******************************************************************/
321 class AliAODOutSideSameSignCut: public AliAODPairBaseCut
324 AliAODOutSideSameSignCut(){}
325 virtual ~AliAODOutSideSameSignCut(){}
326 virtual Bool_t Rejected(AliAODPair *p) const;
328 virtual Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}
329 ClassDef(AliAODOutSideSameSignCut,1)
331 /******************************************************************/
333 class AliAODOutSideDiffSignCut: public AliAODPairBaseCut
336 AliAODOutSideDiffSignCut(){}
337 virtual ~AliAODOutSideDiffSignCut(){}
338 virtual Bool_t Rejected(AliAODPair *p) const;
340 virtual Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}
341 ClassDef(AliAODOutSideDiffSignCut,1)
343 /******************************************************************/
345 class AliAODLogicalOperPairCut: public AliAODPairBaseCut
348 AliAODLogicalOperPairCut();
349 AliAODLogicalOperPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second);
350 virtual ~AliAODLogicalOperPairCut();
352 Double_t GetValue(AliAODPair * /*pair*/) const {MayNotUse("GetValue");return 0.0;}
354 AliAODPairBaseCut* fFirst; //second cut
355 AliAODPairBaseCut* fSecond; //first cut
357 class AliAODDummyBasePairCut: public AliAODPairBaseCut
359 Double_t GetValue(AliAODPair* /*pair*/) const {return 0.0;}
360 Bool_t Rejected(AliAODPair* /*pair*/) const;
363 ClassDef(AliAODLogicalOperPairCut,1)
365 /******************************************************************/
367 class AliAODOrPairCut: public AliAODLogicalOperPairCut
371 AliAODOrPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second):AliAODLogicalOperPairCut(first,second){}
372 virtual ~AliAODOrPairCut(){}
373 Bool_t Rejected(AliAODPair *p) const;
374 ClassDef(AliAODOrPairCut,1)
376 /******************************************************************/
378 class AliAODAndPairCut: public AliAODLogicalOperPairCut
382 AliAODAndPairCut(AliAODPairBaseCut* first, AliAODPairBaseCut* second):AliAODLogicalOperPairCut(first,second){}
383 virtual ~AliAODAndPairCut(){}
384 Bool_t Rejected(AliAODPair *p) const;
385 ClassDef(AliAODAndPairCut,1)