]>
Commit | Line | Data |
---|---|---|
1 | //Piotr Skowronski@cern.ch | |
2 | //Class implemnts cut on the pair of particles | |
3 | // | |
4 | //more info: http://alisoft.cern.ch/people/skowron/analyzer/index.html | |
5 | ||
6 | #ifndef ALIHBTPAIRCUT_H | |
7 | #define ALIHBTPAIRCUT_H | |
8 | ||
9 | ||
10 | #include "AliHBTParticleCut.h" | |
11 | #include "AliHBTPair.h" | |
12 | ||
13 | class AliHbtBasePairCut; | |
14 | ||
15 | enum AliHBTPairCutProperty | |
16 | { | |
17 | kHbtPairCutPropQInv, //Q invariant | |
18 | kHbtPairCutPropKt, | |
19 | kHbtPairCutPropQSideCMSLC, | |
20 | kHbtPairCutPropQOutCMSLC, | |
21 | kHbtPairCutPropQLongCMSLC, | |
22 | kHbtPairCutPropNone | |
23 | }; | |
24 | ||
25 | class AliHBTPairCut: public TObject | |
26 | { | |
27 | public: | |
28 | AliHBTPairCut(); | |
29 | AliHBTPairCut(const AliHBTPairCut&); | |
30 | ||
31 | virtual ~AliHBTPairCut(); | |
32 | virtual Bool_t Pass(AliHBTPair*); | |
33 | ||
34 | void SetFirstPartCut(AliHBTParticleCut*); //sets the cut on the first particle | |
35 | void SetSecondPartCut(AliHBTParticleCut*); //sets the cut on the first particle | |
36 | ||
37 | void SetPartCut(AliHBTParticleCut*);//sets the the same cut on both particles | |
38 | ||
39 | void AddBasePairCut(AliHbtBasePairCut*); | |
40 | ||
41 | void SetQInvRange(Double_t min, Double_t max); | |
42 | void SetKtRange(Double_t min, Double_t max); | |
43 | void SetQOutCMSLRange(Double_t min, Double_t max); | |
44 | void SetQSideCMSLRange(Double_t min, Double_t max); | |
45 | void SetQLongCMSLRange(Double_t min, Double_t max); | |
46 | ||
47 | const AliHBTParticleCut* GetFirstPartCut() const {return fFirstPartCut;} | |
48 | const AliHBTParticleCut* GetSecondPartCut() const {return fSecondPartCut;} | |
49 | ||
50 | protected: | |
51 | AliHBTParticleCut* fFirstPartCut; | |
52 | AliHBTParticleCut* fSecondPartCut; | |
53 | ||
54 | AliHbtBasePairCut** fCuts; //! | |
55 | Int_t fNCuts; | |
56 | ||
57 | ||
58 | AliHbtBasePairCut* FindCut(AliHBTPairCutProperty); | |
59 | private: | |
60 | static const Int_t fkgMaxCuts; | |
61 | public: | |
62 | ClassDef(AliHBTPairCut,1) | |
63 | ||
64 | }; | |
65 | /******************************************************************/ | |
66 | /******************************************************************/ | |
67 | /******************************************************************/ | |
68 | ||
69 | class AliHBTEmptyPairCut: public AliHBTPairCut | |
70 | { | |
71 | //Empty - it passes possitively all particles - it means returns always False | |
72 | //Class describing cut on pairs of particles | |
73 | public: | |
74 | AliHBTEmptyPairCut(){}; | |
75 | AliHBTEmptyPairCut(const AliHBTEmptyPairCut&){}; | |
76 | virtual ~AliHBTEmptyPairCut(){}; | |
77 | ||
78 | Bool_t Pass(AliHBTPair*) {return kFALSE;} //accpept everything | |
79 | ||
80 | ClassDef(AliHBTEmptyPairCut,1) | |
81 | ||
82 | }; | |
83 | ||
84 | ||
85 | ||
86 | /******************************************************************/ | |
87 | /******************************************************************/ | |
88 | /******************************************************************/ | |
89 | ||
90 | class AliHbtBasePairCut: public TObject | |
91 | { | |
92 | //This class defines the range of some property - pure virtual | |
93 | //Property is coded by AliHBTCutTypes type | |
94 | ||
95 | public: | |
96 | ||
97 | AliHbtBasePairCut(Double_t min = 0.0, Double_t max = 0.0, AliHBTPairCutProperty prop= kHbtPairCutPropNone): | |
98 | fMin(min),fMax(max),fProperty(prop){} | |
99 | ||
100 | virtual ~AliHbtBasePairCut(){} | |
101 | ||
102 | Bool_t Pass(AliHBTPair*); | |
103 | ||
104 | void SetRange(Double_t min, Double_t max){fMin = min; fMax = max;} | |
105 | ||
106 | void SetMinimum(Double_t min){fMin = min;} | |
107 | void SetMaximum(Double_t max){fMax = max;} | |
108 | ||
109 | Double_t GetMinimum() const {return fMin;} | |
110 | Double_t GetMaximum() const {return fMax;} | |
111 | ||
112 | AliHBTPairCutProperty GetProperty() const {return fProperty;} | |
113 | ||
114 | protected: | |
115 | virtual Double_t GetValue(AliHBTPair*) = 0; | |
116 | ||
117 | Double_t fMin; | |
118 | Double_t fMax; | |
119 | ||
120 | AliHBTPairCutProperty fProperty; | |
121 | ||
122 | private: | |
123 | public: | |
124 | ClassDef(AliHbtBasePairCut,1) | |
125 | ||
126 | }; | |
127 | ||
128 | inline Bool_t | |
129 | AliHbtBasePairCut::Pass(AliHBTPair* pair) | |
130 | { | |
131 | Double_t value = GetValue(pair); | |
132 | if ( (value > fMin) && (value <fMax ) ) return kFALSE; //accepted | |
133 | else return kTRUE; //rejected | |
134 | } | |
135 | /******************************************************************/ | |
136 | /******************************************************************/ | |
137 | /******************************************************************/ | |
138 | class AliHBTQInvCut: public AliHbtBasePairCut | |
139 | { | |
140 | public: | |
141 | AliHBTQInvCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropQInv){} | |
142 | virtual ~AliHBTQInvCut(){} | |
143 | protected: | |
144 | virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQInv();} | |
145 | private: | |
146 | public: | |
147 | ClassDef(AliHBTQInvCut,1) | |
148 | }; | |
149 | ||
150 | ||
151 | class AliHBTKtCut: public AliHbtBasePairCut | |
152 | { | |
153 | public: | |
154 | AliHBTKtCut(Double_t min = 0.0, Double_t max = 0.0):AliHbtBasePairCut(min,max,kHbtPairCutPropKt){} | |
155 | virtual ~AliHBTKtCut(){} | |
156 | protected: | |
157 | virtual Double_t GetValue(AliHBTPair* pair){return pair->GetKt();} | |
158 | private: | |
159 | public: | |
160 | ClassDef(AliHBTKtCut,1) | |
161 | }; | |
162 | ||
163 | ||
164 | class AliHBTQSideCMSLCCut: public AliHbtBasePairCut | |
165 | { | |
166 | public: | |
167 | AliHBTQSideCMSLCCut(Double_t min = 0.0, Double_t max = 0.0): | |
168 | AliHbtBasePairCut(min,max,kHbtPairCutPropQSideCMSLC){} | |
169 | virtual ~AliHBTQSideCMSLCCut(){} | |
170 | protected: | |
171 | virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQSideCMSLC();} | |
172 | private: | |
173 | public: | |
174 | ClassDef(AliHBTQSideCMSLCCut,1) | |
175 | }; | |
176 | ||
177 | ||
178 | class AliHBTQOutCMSLCCut: public AliHbtBasePairCut | |
179 | { | |
180 | public: | |
181 | AliHBTQOutCMSLCCut(Double_t min = 0.0, Double_t max = 0.0): | |
182 | AliHbtBasePairCut(min,max,kHbtPairCutPropQOutCMSLC){} | |
183 | virtual ~AliHBTQOutCMSLCCut(){} | |
184 | protected: | |
185 | virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQOutCMSLC();} | |
186 | private: | |
187 | public: | |
188 | ClassDef(AliHBTQOutCMSLCCut,1) | |
189 | }; | |
190 | ||
191 | class AliHBTQLongCMSLCCut: public AliHbtBasePairCut | |
192 | { | |
193 | public: | |
194 | AliHBTQLongCMSLCCut(Double_t min = 0.0, Double_t max = 0.0): | |
195 | AliHbtBasePairCut(min,max,kHbtPairCutPropQLongCMSLC){} | |
196 | virtual ~AliHBTQLongCMSLCCut(){} | |
197 | protected: | |
198 | virtual Double_t GetValue(AliHBTPair* pair){return pair->GetQLongCMSLC();} | |
199 | private: | |
200 | public: | |
201 | ClassDef(AliHBTQLongCMSLCCut,1) | |
202 | }; | |
203 | ||
204 | #endif |