]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HBTAN/AliHBTPairCut.h
Bug Correction
[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,
9616170a 24 kHbtPairCutPropAvSepar,
66d1d1a4 25 kHbtPairCutPropClOverlap,
1b446896 26 kHbtPairCutPropNone
ea197c3e 27};
49d1e071 28/******************************************************************/
1b446896 29
80482463 30class AliHBTPairCut: public TNamed
1b446896 31{
ea197c3e 32 public:
33 AliHBTPairCut();
34 AliHBTPairCut(const AliHBTPairCut& in);
35 AliHBTPairCut& operator = (const AliHBTPairCut& in);
36
37 virtual ~AliHBTPairCut();
38 virtual Bool_t Pass(AliHBTPair* pair) const;
39 virtual Bool_t PassPairProp(AliHBTPair* pair) const;
48704f50 40
ea197c3e 41 virtual Bool_t IsEmpty() const {return kFALSE;}
42 void SetFirstPartCut(AliHBTParticleCut* cut); //sets the cut on the first particle
43 void SetSecondPartCut(AliHBTParticleCut* cut); //sets the cut on the second particle
44
45 void SetPartCut(AliHBTParticleCut* cut);//sets the the same cut on both particles
46
28cf76fa 47 virtual void AddBasePairCut(AliHbtBasePairCut* cut);
ea197c3e 48
49 void SetQInvRange(Double_t min, Double_t max);
50 void SetKtRange(Double_t min, Double_t max);
51 void SetKStarRange(Double_t min, Double_t max);
52 void SetQOutCMSLRange(Double_t min, Double_t max);
53 void SetQSideCMSLRange(Double_t min, Double_t max);
54 void SetQLongCMSLRange(Double_t min, Double_t max);
66d1d1a4 55 void SetAvSeparationRange(Double_t min,Double_t max = 10e5);//Anti-Merging Cut
56 void SetClusterOverlapRange(Double_t min,Double_t max);//Anti-Splitting Max range -0.5 1.0
9616170a 57
ea197c3e 58 AliHBTParticleCut* GetFirstPartCut() const {return fFirstPartCut;}
59 AliHBTParticleCut* GetSecondPartCut() const {return fSecondPartCut;}
60
61 protected:
62 AliHBTParticleCut* fFirstPartCut;//cut on first particle in pair
63 AliHBTParticleCut* fSecondPartCut;//cut on second particle in pair
64
65 AliHbtBasePairCut** fCuts; //! array of poiters to base cuts
66 Int_t fNCuts;//Number of cuts in fCuts array
67
68
69 AliHbtBasePairCut* FindCut(AliHBTPairCutProperty cut);
70 private:
71 static const Int_t fgkMaxCuts; // Max number of cuts
ea197c3e 72 ClassDef(AliHBTPairCut,2)
1b446896 73};
74/******************************************************************/
75/******************************************************************/
76/******************************************************************/
77
78class AliHBTEmptyPairCut: public AliHBTPairCut
79{
ea197c3e 80 //Empty - it passes possitively all particles - it means returns always False
81 //Class describing cut on pairs of particles
82 public:
83 AliHBTEmptyPairCut(){};
28cf76fa 84 AliHBTEmptyPairCut(const AliHBTEmptyPairCut& in):AliHBTPairCut(in){};
ea197c3e 85 virtual ~AliHBTEmptyPairCut(){};
86
87 Bool_t Pass(AliHBTPair*) const {return kFALSE;} //accpept everything
88 Bool_t IsEmpty() const {return kTRUE;}
89
90 ClassDef(AliHBTEmptyPairCut,1)
1b446896 91};
92
93
94
95/******************************************************************/
96/******************************************************************/
97/******************************************************************/
98
99class AliHbtBasePairCut: public TObject
ea197c3e 100{
101 //This class defines the range of some property - pure virtual
102 //Property is coded by AliHBTCutTypes type
1b446896 103
ea197c3e 104 public:
1b446896 105
ea197c3e 106 AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone):
107 fMin(min),fMax(max),fProperty(prop){}
108
109 virtual ~AliHbtBasePairCut(){}
1b446896 110
49d1e071 111 virtual Bool_t Pass(AliHBTPair* pair) const;
ea197c3e 112
113 void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;}
114
115 void SetMinimum(Double_t min){fMin = min;}
116 void SetMaximum(Double_t max){fMax = max;}
117
118 Double_t GetMinimum() const {return fMin;}
119 Double_t GetMaximum() const {return fMax;}
120
121 AliHBTPairCutProperty GetProperty() const {return fProperty;}
122
123 protected:
124 virtual Double_t GetValue(AliHBTPair* pair) const = 0;
125
126 Double_t fMin; // Lower boundary of the range
127 Double_t fMax; // Upper boundary of the range
128
129 AliHBTPairCutProperty fProperty; // The property itself
130
131 ClassDef(AliHbtBasePairCut,1)
132
1b446896 133 };
49d1e071 134/******************************************************************/
1b446896 135
ea197c3e 136inline Bool_t AliHbtBasePairCut::Pass(AliHBTPair* pair) const
137{
9616170a 138 //checks if pair proprty is in range
139 //null pointer check is made by AliHBTPairCut, so here is unnecesary
140
ea197c3e 141 Double_t value = GetValue(pair);
142 if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted
143 else return kTRUE; //rejected
144}
1b446896 145/******************************************************************/
146/******************************************************************/
147/******************************************************************/
49d1e071 148
1b446896 149class AliHBTQInvCut: public AliHbtBasePairCut
ea197c3e 150{
151 public:
152 AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){}
153 virtual ~AliHBTQInvCut(){}
154 protected:
155 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetQInv();}
156
157 ClassDef(AliHBTQInvCut,1)
1b446896 158 };
49d1e071 159/******************************************************************/
bce80f3b 160
ea197c3e 161class AliHBTKtCut: public AliHbtBasePairCut {
162 public:
163 AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){}
164 virtual ~AliHBTKtCut(){}
165 protected:
166 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetKt();}
167
168 ClassDef(AliHBTKtCut,1)
bce80f3b 169 };
49d1e071 170/******************************************************************/
bce80f3b 171
e3131968 172class AliHBTKStarCut: public AliHbtBasePairCut
ea197c3e 173{
174 public:
175 AliHBTKStarCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKStar){}
176 virtual ~AliHBTKStarCut(){}
177 protected:
178 virtual Double_t GetValue(AliHBTPair* pair) const {return pair->GetKStar();}
179
180 ClassDef(AliHBTKStarCut,1)
181};
49d1e071 182/******************************************************************/
2d5d4d7d 183
184class AliHBTQSideCMSLCCut: public AliHbtBasePairCut
ea197c3e 185{
186 public:
187 AliHBTQSideCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
188 AliHbtBasePairCut(min,max,kHbtPairCutPropQSideCMSLC){}
189 virtual ~AliHBTQSideCMSLCCut(){}
190 protected:
191 virtual Double_t GetValue(AliHBTPair* pair) const
192 {return pair->GetQSideCMSLC();}
193
194 ClassDef(AliHBTQSideCMSLCCut,1)
195};
49d1e071 196/******************************************************************/
2d5d4d7d 197
198
199class AliHBTQOutCMSLCCut: public AliHbtBasePairCut
ea197c3e 200{
201 public:
202 AliHBTQOutCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
203 AliHbtBasePairCut(min,max,kHbtPairCutPropQOutCMSLC){}
204 virtual ~AliHBTQOutCMSLCCut(){}
205 protected:
206 virtual Double_t GetValue(AliHBTPair* pair) const
207 {return pair->GetQOutCMSLC();}
208
209 ClassDef(AliHBTQOutCMSLCCut,1)
210};
49d1e071 211/******************************************************************/
2d5d4d7d 212
213class AliHBTQLongCMSLCCut: public AliHbtBasePairCut
ea197c3e 214{
215 public:
216 AliHBTQLongCMSLCCut(Double_t min = 0.0, Double_t max = 0.0):
217 AliHbtBasePairCut(min,max,kHbtPairCutPropQLongCMSLC){}
218 virtual ~AliHBTQLongCMSLCCut(){}
219 protected:
220 virtual Double_t GetValue(AliHBTPair* pair) const
221 {return pair->GetQLongCMSLC();}
222
223 ClassDef(AliHBTQLongCMSLCCut,1)
224};
49d1e071 225/******************************************************************/
ed20b0ba 226
227class AliHBTCluterOverlapCut: public AliHbtBasePairCut
228{
229 public:
230 AliHBTCluterOverlapCut(Double_t min = 0.0, Double_t max = 1e5):
231 AliHbtBasePairCut(min,max,kHbtPairCutPropClOverlap){}
232 virtual ~AliHBTCluterOverlapCut(){}
233
234 protected:
235 virtual Double_t GetValue(AliHBTPair* pair) const;
236 ClassDef(AliHBTCluterOverlapCut,1)
237};
238/******************************************************************/
9616170a 239
240class AliHBTAvSeparationCut: public AliHbtBasePairCut
241{
242 public:
243 AliHBTAvSeparationCut(Double_t min = 0.0, Double_t max = 1e5):
244 AliHbtBasePairCut(min,max,kHbtPairCutPropAvSepar){}
245 virtual ~AliHBTAvSeparationCut(){}
246
247 protected:
248 virtual Double_t GetValue(AliHBTPair* pair) const;
249 ClassDef(AliHBTAvSeparationCut,1)
250};
49d1e071 251/******************************************************************/
66d1d1a4 252
ed20b0ba 253class AliHBTOutSideSameSignCut: public AliHbtBasePairCut
66d1d1a4 254{
255 public:
ed20b0ba 256 AliHBTOutSideSameSignCut(){}
257 virtual ~AliHBTOutSideSameSignCut(){}
258 virtual Bool_t Pass(AliHBTPair *p) const;
66d1d1a4 259 protected:
f9bf3968 260 virtual Double_t GetValue(AliHBTPair* /*pair*/) const {return 0.0;}
ed20b0ba 261 ClassDef(AliHBTOutSideSameSignCut,1)
262};
263/******************************************************************/
264
265class AliHBTOutSideDiffSignCut: public AliHbtBasePairCut
266{
267 public:
268 AliHBTOutSideDiffSignCut(){}
269 virtual ~AliHBTOutSideDiffSignCut(){}
270 virtual Bool_t Pass(AliHBTPair *p) const;
271 protected:
f9bf3968 272 virtual Double_t GetValue(AliHBTPair* /*pair*/) const {return 0.0;}
ed20b0ba 273 ClassDef(AliHBTOutSideDiffSignCut,1)
66d1d1a4 274};
49d1e071 275/******************************************************************/
276
277class AliHBTLogicalOperPairCut: public AliHbtBasePairCut
278 {
279 public:
280 AliHBTLogicalOperPairCut();
281 AliHBTLogicalOperPairCut(AliHbtBasePairCut* first, AliHbtBasePairCut* second);
282 virtual ~AliHBTLogicalOperPairCut();
283 protected:
284 Double_t GetValue(AliHBTPair * /*pair*/) const {MayNotUse("GetValue");return 0.0;}
285
286 AliHbtBasePairCut* fFirst; //second cut
287 AliHbtBasePairCut* fSecond; //first cut
288 private:
289 class AliHBTDummyBasePairCut: public AliHbtBasePairCut
290 {
291 Double_t GetValue(AliHBTPair* /*pair*/) const {return 0.0;}
292 Bool_t Pass(AliHBTPair* /*pair*/) const;
293 };
294
295 ClassDef(AliHBTLogicalOperPairCut,1)
296 };
297/******************************************************************/
298
299class AliHBTOrPairCut: public AliHBTLogicalOperPairCut
300{
301 public:
302 AliHBTOrPairCut(){}
303 AliHBTOrPairCut(AliHbtBasePairCut* first, AliHbtBasePairCut* second):AliHBTLogicalOperPairCut(first,second){}
304 virtual ~AliHBTOrPairCut(){}
305 Bool_t Pass(AliHBTPair *p) const;
306 ClassDef(AliHBTOrPairCut,1)
307};
308/******************************************************************/
309
310class AliHBTAndPairCut: public AliHBTLogicalOperPairCut
311{
312 public:
313 AliHBTAndPairCut(){}
314 AliHBTAndPairCut(AliHbtBasePairCut* first, AliHbtBasePairCut* second):AliHBTLogicalOperPairCut(first,second){}
315 virtual ~AliHBTAndPairCut(){}
316 Bool_t Pass(AliHBTPair *p) const;
317 ClassDef(AliHBTAndPairCut,1)
318};
319
1b446896 320#endif