]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HBTAN/AliHBTPairCut.h
Double counting for phi removed (D. Stocco).
[u/mrichter/AliRoot.git] / HBTAN / AliHBTPairCut.h
CommitLineData
1b446896 1#ifndef ALIHBTPAIRCUT_H
2#define ALIHBTPAIRCUT_H
3
ea197c3e 4/* $Id$ */
1b446896 5
ea197c3e 6//Piotr Skowronski@cern.ch
7//Class implements cut on the pair of particles
8//
9//more info: http://alisoft.cern.ch/people/skowron/analyzer/index.html
10
1b446896 11#include "AliHBTPair.h"
12
ea197c3e 13class AliHBTParticleCut;
1b446896 14class AliHbtBasePairCut;
15
16enum AliHBTPairCutProperty
ea197c3e 17{
1b446896 18 kHbtPairCutPropQInv, //Q invariant
bce80f3b 19 kHbtPairCutPropKt,
e3131968 20 kHbtPairCutPropKStar,
2d5d4d7d 21 kHbtPairCutPropQSideCMSLC,
22 kHbtPairCutPropQOutCMSLC,
23 kHbtPairCutPropQLongCMSLC,
879e0c18 24 kHbtPairCutPropDeltaPhi,
25 kHbtPairCutPropDeltaTheta,
26 kHbtPairCutPropDeltaP,
27 kHbtPairCutPropDeltaPt,
9616170a 28 kHbtPairCutPropAvSepar,
6e8b6371 29 kHbtPairCutPropSepar,
66d1d1a4 30 kHbtPairCutPropClOverlap,
8cb21125 31 kHbtPairCutPropPixelSepar,
1b446896 32 kHbtPairCutPropNone
ea197c3e 33};
49d1e071 34/******************************************************************/
1b446896 35
80482463 36class AliHBTPairCut: public TNamed
1b446896 37{
ea197c3e 38 public:
39 AliHBTPairCut();
40 AliHBTPairCut(const AliHBTPairCut& in);
41 AliHBTPairCut& operator = (const AliHBTPairCut& in);
42
43 virtual ~AliHBTPairCut();
44 virtual Bool_t Pass(AliHBTPair* pair) const;
45 virtual Bool_t PassPairProp(AliHBTPair* pair) const;
48704f50 46
ea197c3e 47 virtual Bool_t IsEmpty() const {return kFALSE;}
48 void SetFirstPartCut(AliHBTParticleCut* cut); //sets the cut on the first particle
49 void SetSecondPartCut(AliHBTParticleCut* cut); //sets the cut on the second particle
50
51 void SetPartCut(AliHBTParticleCut* cut);//sets the the same cut on both particles
52
28cf76fa 53 virtual void AddBasePairCut(AliHbtBasePairCut* cut);
ea197c3e 54
8cb21125 55 virtual void Print();
56
ea197c3e 57 void SetQInvRange(Double_t min, Double_t max);
58 void SetKtRange(Double_t min, Double_t max);
59 void SetKStarRange(Double_t min, Double_t max);
60 void SetQOutCMSLRange(Double_t min, Double_t max);
61 void SetQSideCMSLRange(Double_t min, Double_t max);
62 void SetQLongCMSLRange(Double_t min, Double_t max);
66d1d1a4 63 void SetAvSeparationRange(Double_t min,Double_t max = 10e5);//Anti-Merging Cut
650aa30d 64 void SetITSSeparation(Int_t layer, Double_t drphi=0.01,Double_t dz = 0.08);//Anti-Merging Cut for first pixel layer
66d1d1a4 65 void SetClusterOverlapRange(Double_t min,Double_t max);//Anti-Splitting Max range -0.5 1.0
9616170a 66
ea197c3e 67 AliHBTParticleCut* GetFirstPartCut() const {return fFirstPartCut;}
68 AliHBTParticleCut* GetSecondPartCut() const {return fSecondPartCut;}
69
70 protected:
71 AliHBTParticleCut* fFirstPartCut;//cut on first particle in pair
72 AliHBTParticleCut* fSecondPartCut;//cut on second particle in pair
73
74 AliHbtBasePairCut** fCuts; //! array of poiters to base cuts
75 Int_t fNCuts;//Number of cuts in fCuts array
76
77
78 AliHbtBasePairCut* FindCut(AliHBTPairCutProperty cut);
79 private:
80 static const Int_t fgkMaxCuts; // Max number of cuts
ea197c3e 81 ClassDef(AliHBTPairCut,2)
1b446896 82};
83/******************************************************************/
84/******************************************************************/
85/******************************************************************/
86
87class AliHBTEmptyPairCut: public AliHBTPairCut
88{
ea197c3e 89 //Empty - it passes possitively all particles - it means returns always False
90 //Class describing cut on pairs of particles
91 public:
92 AliHBTEmptyPairCut(){};
28cf76fa 93 AliHBTEmptyPairCut(const AliHBTEmptyPairCut& in):AliHBTPairCut(in){};
ea197c3e 94 virtual ~AliHBTEmptyPairCut(){};
95
96 Bool_t Pass(AliHBTPair*) const {return kFALSE;} //accpept everything
97 Bool_t IsEmpty() const {return kTRUE;}
98
99 ClassDef(AliHBTEmptyPairCut,1)
1b446896 100};
101
102
103
104/******************************************************************/
105/******************************************************************/
106/******************************************************************/
107
108class AliHbtBasePairCut: public TObject
ea197c3e 109{
110 //This class defines the range of some property - pure virtual
111 //Property is coded by AliHBTCutTypes type
1b446896 112
ea197c3e 113 public:
1b446896 114
ea197c3e 115 AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone):
116 fMin(min),fMax(max),fProperty(prop){}
117
118 virtual ~AliHbtBasePairCut(){}
1b446896 119
49d1e071 120 virtual Bool_t Pass(AliHBTPair* pair) const;
ea197c3e 121
122 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
123
124 void SetMinimum(Double_t min){fMin = min;}
125 void SetMaximum(Double_t max){fMax = max;}
126
127 Double_t GetMinimum() const {return fMin;}
128 Double_t GetMaximum() const {return fMax;}
129
130 AliHBTPairCutProperty GetProperty() const {return fProperty;}
131
132 protected:
133 virtual Double_t GetValue(AliHBTPair* pair) const = 0;
134
135 Double_t fMin; // Lower boundary of the range
136 Double_t fMax; // Upper boundary of the range
137
138 AliHBTPairCutProperty fProperty; // The property itself
139
140 ClassDef(AliHbtBasePairCut,1)
141
1b446896 142 };
49d1e071 143/******************************************************************/
1b446896 144
ea197c3e 145inline Bool_t AliHbtBasePairCut::Pass(AliHBTPair* pair) const
146{
9616170a 147 //checks if pair proprty is in range
148 //null pointer check is made by AliHBTPairCut, so here is unnecesary
149
ea197c3e 150 Double_t value = GetValue(pair);
151 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
152 else return kTRUE; //rejected
153}
1b446896 154/******************************************************************/
155/******************************************************************/
156/******************************************************************/
49d1e071 157
1b446896 158class AliHBTQInvCut: public AliHbtBasePairCut
ea197c3e 159{
160 public:
161 AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){}
162 virtual ~AliHBTQInvCut(){}
163 protected:
164 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetQInv();}
165
166 ClassDef(AliHBTQInvCut,1)
1b446896 167 };
49d1e071 168/******************************************************************/
bce80f3b 169
ea197c3e 170class AliHBTKtCut: public AliHbtBasePairCut {
171 public:
172 AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){}
173 virtual ~AliHBTKtCut(){}
174 protected:
175 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetKt();}
176
177 ClassDef(AliHBTKtCut,1)
bce80f3b 178 };
49d1e071 179/******************************************************************/
bce80f3b 180
e3131968 181class AliHBTKStarCut: public AliHbtBasePairCut
ea197c3e 182{
183 public:
184 AliHBTKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKStar){}
185 virtual ~AliHBTKStarCut(){}
186 protected:
187 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetKStar();}
188
189 ClassDef(AliHBTKStarCut,1)
190};
49d1e071 191/******************************************************************/
2d5d4d7d 192
193class AliHBTQSideCMSLCCut: public AliHbtBasePairCut
ea197c3e 194{
195 public:
196 AliHBTQSideCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
197 AliHbtBasePairCut(min,max,kHbtPairCutPropQSideCMSLC){}
198 virtual ~AliHBTQSideCMSLCCut(){}
199 protected:
200 virtual Double_t GetValue(AliHBTPair* pair) const
201 {return pair->GetQSideCMSLC();}
202
203 ClassDef(AliHBTQSideCMSLCCut,1)
204};
49d1e071 205/******************************************************************/
2d5d4d7d 206
207
208class AliHBTQOutCMSLCCut: public AliHbtBasePairCut
ea197c3e 209{
210 public:
211 AliHBTQOutCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
212 AliHbtBasePairCut(min,max,kHbtPairCutPropQOutCMSLC){}
213 virtual ~AliHBTQOutCMSLCCut(){}
214 protected:
215 virtual Double_t GetValue(AliHBTPair* pair) const
216 {return pair->GetQOutCMSLC();}
217
218 ClassDef(AliHBTQOutCMSLCCut,1)
219};
49d1e071 220/******************************************************************/
2d5d4d7d 221
222class AliHBTQLongCMSLCCut: public AliHbtBasePairCut
ea197c3e 223{
224 public:
225 AliHBTQLongCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
226 AliHbtBasePairCut(min,max,kHbtPairCutPropQLongCMSLC){}
227 virtual ~AliHBTQLongCMSLCCut(){}
228 protected:
229 virtual Double_t GetValue(AliHBTPair* pair) const
230 {return pair->GetQLongCMSLC();}
231
232 ClassDef(AliHBTQLongCMSLCCut,1)
233};
49d1e071 234/******************************************************************/
879e0c18 235
236class AliHBTDeltaPhiCut: public AliHbtBasePairCut
237{
238 public:
239 AliHBTDeltaPhiCut(Double_t min = 0.0, Double_t max = 0.0):
240 AliHbtBasePairCut(min,max,kHbtPairCutPropDeltaPhi){}
241 virtual ~AliHBTDeltaPhiCut(){}
242 protected:
243 virtual Double_t GetValue(AliHBTPair* pair) const
244 {return TMath::Abs(pair->GetDeltaPhi());}
245
246 ClassDef(AliHBTDeltaPhiCut,1)
247};
248/******************************************************************/
249
250class AliHBTDeltaThetaCut: public AliHbtBasePairCut
251{
252 public:
253 AliHBTDeltaThetaCut(Double_t min = 0.0, Double_t max = 0.0):
254 AliHbtBasePairCut(min,max,kHbtPairCutPropDeltaTheta){}
255 virtual ~AliHBTDeltaThetaCut(){}
256 protected:
257 virtual Double_t GetValue(AliHBTPair* pair) const
258 {return TMath::Abs(pair->GetDeltaTheta());}
259
260 ClassDef(AliHBTDeltaThetaCut,1)
261};
262/******************************************************************/
ed20b0ba 263
264class AliHBTCluterOverlapCut: public AliHbtBasePairCut
265{
266 public:
267 AliHBTCluterOverlapCut(Double_t min = 0.0, Double_t max = 1e5):
268 AliHbtBasePairCut(min,max,kHbtPairCutPropClOverlap){}
269 virtual ~AliHBTCluterOverlapCut(){}
270
271 protected:
272 virtual Double_t GetValue(AliHBTPair* pair) const;
273 ClassDef(AliHBTCluterOverlapCut,1)
274};
275/******************************************************************/
9616170a 276
277class AliHBTAvSeparationCut: public AliHbtBasePairCut
278{
279 public:
280 AliHBTAvSeparationCut(Double_t min = 0.0, Double_t max = 1e5):
281 AliHbtBasePairCut(min,max,kHbtPairCutPropAvSepar){}
282 virtual ~AliHBTAvSeparationCut(){}
283
284 protected:
285 virtual Double_t GetValue(AliHBTPair* pair) const;
286 ClassDef(AliHBTAvSeparationCut,1)
287};
49d1e071 288/******************************************************************/
8cb21125 289
6e8b6371 290class AliHBTSeparationCut: public AliHbtBasePairCut
291{
292 public:
293 AliHBTSeparationCut(Double_t min = 0.0, Double_t max = 1e5, Int_t point = 0):
294 AliHbtBasePairCut(min,max,kHbtPairCutPropSepar),fPoint(point){}
295 virtual ~AliHBTSeparationCut(){}
296
297 protected:
298 Int_t fPoint;//index of the point that distance should be measured
299 virtual Double_t GetValue(AliHBTPair* pair) const;
300 ClassDef(AliHBTSeparationCut,1)
301};
302/******************************************************************/
303
650aa30d 304class AliHBTITSSeparationCut: public AliHbtBasePairCut
8cb21125 305{
306//Anti merging cut for the first layer of pixels
307 public:
92d472ba 308 AliHBTITSSeparationCut(Int_t layer = 0, Double_t deltarphi = 0.01, Double_t deltaz = 0.08):
650aa30d 309 AliHbtBasePairCut(deltarphi,deltaz,kHbtPairCutPropPixelSepar),fLayer(layer){}
310 virtual ~AliHBTITSSeparationCut(){}
8cb21125 311 Bool_t Pass(AliHBTPair* pair) const;
650aa30d 312 Int_t GetLayer() const {return fLayer;}
8cb21125 313 protected:
650aa30d 314 Int_t fLayer;//index of the layer that distance should be measured 0: 1st pixels
8cb21125 315 virtual Double_t GetValue(AliHBTPair* /*pair*/) const {return 0.0;}//not used
650aa30d 316 ClassDef(AliHBTITSSeparationCut,1)
8cb21125 317};
318/******************************************************************/
66d1d1a4 319
ed20b0ba 320class AliHBTOutSideSameSignCut: public AliHbtBasePairCut
66d1d1a4 321{
322 public:
ed20b0ba 323 AliHBTOutSideSameSignCut(){}
324 virtual ~AliHBTOutSideSameSignCut(){}
325 virtual Bool_t Pass(AliHBTPair *p) const;
66d1d1a4 326 protected:
f9bf3968 327 virtual Double_t GetValue(AliHBTPair* /*pair*/) const {return 0.0;}
ed20b0ba 328 ClassDef(AliHBTOutSideSameSignCut,1)
329};
330/******************************************************************/
331
332class AliHBTOutSideDiffSignCut: public AliHbtBasePairCut
333{
334 public:
335 AliHBTOutSideDiffSignCut(){}
336 virtual ~AliHBTOutSideDiffSignCut(){}
337 virtual Bool_t Pass(AliHBTPair *p) const;
338 protected:
f9bf3968 339 virtual Double_t GetValue(AliHBTPair* /*pair*/) const {return 0.0;}
ed20b0ba 340 ClassDef(AliHBTOutSideDiffSignCut,1)
66d1d1a4 341};
49d1e071 342/******************************************************************/
343
344class AliHBTLogicalOperPairCut: public AliHbtBasePairCut
345 {
346 public:
347 AliHBTLogicalOperPairCut();
348 AliHBTLogicalOperPairCut(AliHbtBasePairCut* first, AliHbtBasePairCut* second);
349 virtual ~AliHBTLogicalOperPairCut();
350 protected:
351 Double_t GetValue(AliHBTPair * /*pair*/) const {MayNotUse("GetValue");return 0.0;}
352
353 AliHbtBasePairCut* fFirst; //second cut
354 AliHbtBasePairCut* fSecond; //first cut
355 private:
356 class AliHBTDummyBasePairCut: public AliHbtBasePairCut
357 {
358 Double_t GetValue(AliHBTPair* /*pair*/) const {return 0.0;}
359 Bool_t Pass(AliHBTPair* /*pair*/) const;
360 };
361
362 ClassDef(AliHBTLogicalOperPairCut,1)
363 };
364/******************************************************************/
365
366class AliHBTOrPairCut: public AliHBTLogicalOperPairCut
367{
368 public:
369 AliHBTOrPairCut(){}
370 AliHBTOrPairCut(AliHbtBasePairCut* first, AliHbtBasePairCut* second):AliHBTLogicalOperPairCut(first,second){}
371 virtual ~AliHBTOrPairCut(){}
372 Bool_t Pass(AliHBTPair *p) const;
373 ClassDef(AliHBTOrPairCut,1)
374};
375/******************************************************************/
376
377class AliHBTAndPairCut: public AliHBTLogicalOperPairCut
378{
379 public:
380 AliHBTAndPairCut(){}
381 AliHBTAndPairCut(AliHbtBasePairCut* first, AliHbtBasePairCut* second):AliHBTLogicalOperPairCut(first,second){}
382 virtual ~AliHBTAndPairCut(){}
383 Bool_t Pass(AliHBTPair *p) const;
384 ClassDef(AliHBTAndPairCut,1)
385};
386
1b446896 387#endif