2 // *** Class AliRsnCut ***
4 // Cut base class: all other cuts inherit from it.
5 // The 'core' of the class is the method "IsSelected()" which
6 // must be overloaded by any specific cut implementation.
8 // This class provides some default instruments to check values
9 // agains a reference or an allowed range, in order to permit
10 // a unique way to execute such kind of checks.
12 // authors: Alberto Pulvirenti (alberto.pulvirenti@ct.infn.it)
13 // Martin Vala (martin.vala@cern.ch)
17 #include "AliRsnCut.h"
21 //______________________________________________________________________________
22 AliRsnCut::AliRsnCut(const char *name, RSNTARGET target) :
23 AliRsnTarget(name, target),
38 fPtDepCutMaxFormula(""),
39 fPtDepCutMinFormula(""),
43 // Default constructor.
47 //______________________________________________________________________________
49 (const char *name, RSNTARGET target, Int_t imin, Int_t imax, Double_t dmin, Double_t dmax) :
50 AliRsnTarget(name, target),
65 fPtDepCutMaxFormula(""),
66 fPtDepCutMinFormula(""),
70 // Constructor with arguments.
71 // This is provided to allow a quick setting of all data members.
75 //______________________________________________________________________________
77 (const char *name, RSNTARGET target, Double_t dmin, Double_t dmax, Int_t imin, Int_t imax) :
78 AliRsnTarget(name, target),
93 fPtDepCutMaxFormula(""),
94 fPtDepCutMinFormula(""),
98 // Constructor with arguments.
99 // This is provided to allow a quick setting of all data members.
103 //______________________________________________________________________________
104 AliRsnCut::AliRsnCut(const AliRsnCut ©) :
110 fMinIptdep(copy.fMinIptdep),
111 fMaxIptdep(copy.fMaxIptdep),
112 fMinDptdep(copy.fMinDptdep),
113 fMaxDptdep(copy.fMaxDptdep),
114 fCutValueI(copy.fCutValueI),
115 fCutValueD(copy.fCutValueD),
116 fPtDepCut(copy.fPtDepCut),
117 fRefPtValueD(copy.fRefPtValueD),
120 fPtDepCutMaxFormula(copy.fPtDepCutMaxFormula),
121 fPtDepCutMinFormula(copy.fPtDepCutMinFormula),
122 fCutResult(copy.fCutResult)
126 // Don't duplicate memory occupancy for pointer
130 //______________________________________________________________________________
131 AliRsnCut &AliRsnCut::operator=(const AliRsnCut ©)
134 // Assignment operator.
135 // Don't duplicate memory occupancy for pointer
138 AliRsnTarget::operator=(copy);
146 fMinIptdep = copy.fMinIptdep;
147 fMaxIptdep = copy.fMaxIptdep;
148 fMinDptdep = copy.fMinDptdep;
149 fMaxDptdep = copy.fMaxDptdep;
150 fCutValueI = copy.fCutValueI;
151 fCutValueD = copy.fCutValueD;
152 fPtDepCut = copy.fPtDepCut;
153 fRefPtValueD = copy.fRefPtValueD;
154 fMaxPt = copy.fMaxPt;
155 fMinPt = copy.fMinPt;
156 fPtDepCutMaxFormula = copy.fPtDepCutMaxFormula;
157 fPtDepCutMinFormula = copy.fPtDepCutMinFormula;
158 fCutResult = copy.fCutResult;
163 //______________________________________________________________________________
164 Bool_t AliRsnCut::IsSelected(TObject * /*object*/)
167 // Virtual cut-checking method.
168 // In this implementation, it does nothing, and all classes
169 // inheriting from this, should provide a proper implementation
170 // which must return kTRUE if the cut is passed, and kFALSE otherwise.
173 AliWarning("This virtual function must be implemented properly");
177 //______________________________________________________________________________
178 Bool_t AliRsnCut::OkValueI()
181 // This method is used to compare a value with a reference.
182 // In the case of integers, the equality must be exact.
188 if(fRefPtValueD > fMaxPt) {
189 AliDebug(2,Form("pt = %f (> %f), cutting at %d\n",fRefPtValueD, fMaxPt, fMinI));
190 fCutResult = (fCutValueI == fMinI);
191 } else if (fRefPtValueD < fMinPt){
192 AliDebug(2,Form("pt = %f (< %f), cutting at %d\n",fRefPtValueD, fMinPt, fMinI));
193 fCutResult = (fCutValueI == fMinI);
195 TString str(fPtDepCutMinFormula);
196 str.ReplaceAll("pt", "x");
197 TFormula ptdepcut(Form("%s_ptdepcut", GetName()), str.Data());
198 fMinIptdep = static_cast<int> (ptdepcut.Eval(fRefPtValueD));
199 AliDebug(2,Form("pt = %f (> %f and < %f), cutting at %d\n",fRefPtValueD, fMinPt, fMaxPt, fMinIptdep));
200 fCutResult = (fCutValueI == fMinIptdep);
203 else fCutResult = (fCutValueI == fMinI);
205 // print debug message
206 AliDebug(AliLog::kDebug + 2, "=== CUT DEBUG ========================================================");
207 AliDebug(AliLog::kDebug + 2, Form("Cut name : %s", GetName()));
208 AliDebug(AliLog::kDebug + 2, Form("Checked value: %d", fCutValueI));
209 AliDebug(AliLog::kDebug + 2, Form("Cut value : %d", fMinI));
210 AliDebug(AliLog::kDebug + 2, Form("Cut result : %s", (fCutResult ? "PASSED" : "NOT PASSED")));
211 AliDebug(AliLog::kDebug + 2, "=== END CUT DEBUG ====================================================");
216 //______________________________________________________________________________
217 Bool_t AliRsnCut::OkValueD()
220 // This method is used to compare a value with a reference.
221 // In the case of doubles, the equality consists in being very close.
227 if(fRefPtValueD > fMaxPt) {
228 AliDebug(2,Form("pt = %f (> %f), cutting at %f\n",fRefPtValueD, fMaxPt, fMinD));
229 fCutResult = (TMath::Abs(fCutValueD - fMinD) < 1E-6);
230 } else if (fRefPtValueD < fMinPt){
231 AliDebug(2,Form("pt = %f (< %f), cutting at %f\n",fRefPtValueD, fMinPt, fMinD));
232 fCutResult = (TMath::Abs(fCutValueD - fMinD) < 1E-6);
234 TString str(fPtDepCutMinFormula);
235 str.ReplaceAll("pt", "x");
236 TFormula ptdepcut(Form("%s_ptdepcut", GetName()), str.Data());
237 fMinDptdep = ptdepcut.Eval(fRefPtValueD);
238 AliDebug(2,Form("pt = %f (> %f and < %f), cutting at %f\n",fRefPtValueD, fMinPt, fMaxPt, fMinDptdep));
239 fCutResult = (TMath::Abs(fCutValueD - fMinDptdep) < 1E-6);
242 else fCutResult = (TMath::Abs(fCutValueD - fMinD) < 1E-6);
244 // print debug message
245 AliDebug(AliLog::kDebug + 2, "=== CUT DEBUG =======================================================");
246 AliDebug(AliLog::kDebug + 2, Form("Cut name : %s", GetName()));
247 AliDebug(AliLog::kDebug + 2, Form("Checked value: %f", fCutValueD));
248 AliDebug(AliLog::kDebug + 2, Form("Cut value : %f", fMinD));
249 AliDebug(AliLog::kDebug + 2, Form("Cut result : %s", (fCutResult ? "PASSED" : "NOT PASSED")));
250 AliDebug(AliLog::kDebug + 2, "=== END CUT DEBUG ===================================================");
255 //______________________________________________________________________________
256 Bool_t AliRsnCut::OkRangeI()
259 // This method is used to compare a value with an integer range.
264 if(fRefPtValueD > fMaxPt) {
265 AliDebug(2,Form("pt = %f (> %f), cutting between [%d, %d]\n",fRefPtValueD, fMaxPt, fMinI, fMaxI));
266 fCutResult = ((fCutValueI >= fMinI) && (fCutValueD <= fMaxI));
267 } else if (fRefPtValueD < fMinPt){
268 AliDebug(2,Form("pt = %f (< %f), cutting between [%d, %d]\n",fRefPtValueD, fMinPt, fMinI, fMaxI));
269 fCutResult = ((fCutValueI >= fMinI) && (fCutValueD <= fMaxI));
271 TString str(fPtDepCutMinFormula);
272 str.ReplaceAll("pt", "x");
273 TFormula ptdepcut(Form("%s_ptdepcut", GetName()), str.Data());
274 fMinIptdep = static_cast<int> (ptdepcut.Eval(fRefPtValueD));
276 TString str2(fPtDepCutMaxFormula);
277 str2.ReplaceAll("pt", "x");
278 TFormula ptdepcut2(Form("%s_ptdepcut", GetName()), str2.Data());
279 fMaxIptdep = static_cast<int> (ptdepcut2.Eval(fRefPtValueD));
281 AliDebug(2,Form("pt = %f (> %f and < %f), cutting according to the fiducial zone [%d, %d]\n",fRefPtValueD, fMinPt, fMaxPt, fMinIptdep, fMaxIptdep));
282 fCutResult = ((fCutValueI >= fMinIptdep) && (fCutValueI <= fMaxIptdep));
285 else fCutResult = ((fCutValueI >= fMinI) && (fCutValueI <= fMaxI));
287 // print debug message
288 AliDebug(AliLog::kDebug + 2, "=== CUT DEBUG ========================================================");
289 AliDebug(AliLog::kDebug + 2, Form("Cut name : %s", GetName()));
290 AliDebug(AliLog::kDebug + 2, Form("Checked value: %d", fCutValueI));
291 AliDebug(AliLog::kDebug + 2, Form("Cut range : %d , %d", fMinI, fMaxI));
292 AliDebug(AliLog::kDebug + 2, Form("Cut result : %s", (fCutResult ? "PASSED" : "NOT PASSED")));
293 AliDebug(AliLog::kDebug + 2, "=== END CUT DEBUG ====================================================");
298 //______________________________________________________________________________
299 Bool_t AliRsnCut::OkRangeD()
302 // This method is used to compare a value with a double-float range.
308 if(fRefPtValueD > fMaxPt) {
309 AliDebug(2,Form("pt = %f (> %f), cutting between [%f, %f]\n",fRefPtValueD, fMaxPt, fMinD, fMaxD));
310 fCutResult = ((fCutValueD >= fMinD) && (fCutValueD <= fMaxD));
311 } else if (fRefPtValueD < fMinPt) {
312 AliDebug(2,Form("pt = %f (< %f), cutting between [%f, %f]\n",fRefPtValueD, fMinPt, fMinD, fMaxD));
313 fCutResult = ((fCutValueD >= fMinD) && (fCutValueD <= fMaxD));
315 TString str(fPtDepCutMinFormula);
316 str.ReplaceAll("pt", "x");
317 TFormula ptdepcut(Form("%s_ptdepcut", GetName()), str.Data());
318 fMinDptdep = ptdepcut.Eval(fRefPtValueD);
320 TString str2(fPtDepCutMaxFormula);
321 str2.ReplaceAll("pt", "x");
322 TFormula ptdepcut2(Form("%s_ptdepcut", GetName()), str2.Data());
323 fMaxDptdep = ptdepcut2.Eval(fRefPtValueD);
325 AliDebug(2,Form("pt = %f (> %f and < %f), cutting according to the fiducial zone [%f, %f]\n",fRefPtValueD, fMinPt, fMaxPt, fMinDptdep, fMaxDptdep));
326 fCutResult = ((fCutValueD >= fMinDptdep) && (fCutValueD <= fMaxDptdep));
329 else fCutResult = ((fCutValueD >= fMinD) && (fCutValueD <= fMaxD));
331 // print debug message
332 AliDebug(AliLog::kDebug + 2, "=== CUT DEBUG ========================================================");
333 AliDebug(AliLog::kDebug + 2, Form("Cut name : %s", GetName()));
334 AliDebug(AliLog::kDebug + 2, Form("Checked value: %f", fCutValueD));
335 AliDebug(AliLog::kDebug + 2, Form("Cut range : %f , %f", fMinD, fMaxD));
336 AliDebug(AliLog::kDebug + 2, Form("Cut result : %s", (fCutResult ? "PASSED" : "NOT PASSED")));
337 AliDebug(AliLog::kDebug + 2, "=== END CUT DEBUG ====================================================");
343 //______________________________________________________________________________
344 void AliRsnCut::Print(Option_t *) const
347 // Override TObject::Print() method,
348 // and print some useful info about the cut general parameters.
351 AliInfo("=== CUT DETAILS ====================================");
352 AliInfo(Form("Cut name : [%s]", GetName()));
353 AliInfo(Form("Cut target : [%s]", GetTargetTypeName()));
354 AliInfo(Form("Cut edges [D]: [%f - %f]", fMinD, fMaxD));
355 AliInfo(Form("Cut edges [I]: [%d - %d]", fMinI, fMaxI));
356 AliInfo(Form("Cut pt dependent: %s", (fPtDepCut ? "YES" : "NO")));
357 AliInfo("====================================================");