1 //Piotr Skowronski@cern.ch
3 #ifndef ALIHBTFUNCTION_H
4 #define ALIHBTFUNCTION_H
6 #include "AliHBTParticleCut.h"
7 #include "AliHBTPairCut.h"
8 #include "AliHBTPair.h"
15 //____________________
16 ///////////////////////////////////////////////////////
20 // Abstract Base Calss for all the function classes //
22 // Piotr.Skowronski@cern.ch //
23 // http://alisoft.cern.ch/people/skowron/analyzer //
25 ///////////////////////////////////////////////////////
27 class AliHBTFunction: public TNamed
31 AliHBTFunction(const char* name,const char* title);
32 virtual ~AliHBTFunction();
34 virtual TH1* GetNumerator() const = 0;
35 virtual TH1* GetDenominator() const = 0;
36 virtual TH1* GetResult() = 0;
41 TH1* GetRatio(Double_t normfactor = 1.0);
42 void Rename(const Char_t * name); //renames the function and histograms ==title is the same that name
43 void Rename(const Char_t * name, const Char_t * title); //renames and retitle the function and histograms
45 void SetPairCut(AliHBTPairCut*);
47 virtual AliHBTPair* CheckPair(AliHBTPair* pair);
50 virtual void BuildHistos() = 0;//builds default histograms
51 AliHBTPairCut* fPairCut;
54 ClassDef(AliHBTFunction,2)
56 /******************************************************************/
57 inline AliHBTPair* AliHBTFunction::CheckPair(AliHBTPair* pair)
59 //check if pair and both particles meets the cut criteria
60 if(fPairCut->Pass(pair)) //if the pair is BAD
62 pair = pair->GetSwapedPair();
64 if(fPairCut->Pass(pair)) //so try reverse combination
66 return 0x0;//it is BAD as well - so return
72 /******************************************************************/
73 /******************************************************************/
74 /******************************************************************/
76 //____________________
77 ///////////////////////////////////////////////////////
79 // AliHBTOnePairFctn //
81 // Abstract Base Calss for Functions that need //
82 // one pair to fill function //
84 // Piotr.Skowronski@cern.ch //
85 // http://alisoft.cern.ch/people/skowron/analyzer //
87 ///////////////////////////////////////////////////////
89 class AliHBTOnePairFctn
93 virtual ~AliHBTOnePairFctn(){}
95 virtual void ProcessSameEventParticles(AliHBTPair* pair) = 0;
96 virtual void ProcessDiffEventParticles(AliHBTPair* pair) = 0;
98 virtual void Init() = 0;
99 virtual void Write() = 0;
103 ClassDef(AliHBTOnePairFctn,2)
106 /******************************************************************/
107 /******************************************************************/
108 /******************************************************************/
110 //____________________
111 ///////////////////////////////////////////////////////
113 // AliHBTTwoPairFctn //
115 // Abstract Base Calss for Functions that need //
116 // two pairs to fill function, //
117 // one reconstructed track and corresponding //
119 // Basically resolution functions //
120 // Lednicky's algorithm uses that as well //
122 // Piotr.Skowronski@cern.ch //
123 // http://alisoft.cern.ch/people/skowron/analyzer //
125 ///////////////////////////////////////////////////////
127 class AliHBTTwoPairFctn
130 AliHBTTwoPairFctn(){};
131 virtual ~AliHBTTwoPairFctn(){};
134 ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) = 0;
136 ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) = 0;
138 virtual void Init() = 0;
139 virtual void Write() = 0;
143 ClassDef(AliHBTTwoPairFctn,2)
146 /******************************************************************/
147 /******************************************************************/
148 /******************************************************************/
150 //____________________
151 ///////////////////////////////////////////////////////
153 // AliHBTFunction1D //
155 // Base Calss for 1-dimensinal Functions //
157 // Piotr.Skowronski@cern.ch //
158 // http://alisoft.cern.ch/people/skowron/analyzer //
160 ///////////////////////////////////////////////////////
163 class AliHBTFunction1D: public AliHBTFunction
166 //this must be declared before constructors because they are used as a default arguments
167 static const Int_t fgkDefaultNBins;//default number of Bins in histograms
168 static const Float_t fgkDefaultMin;//Default min value of histograms
169 static const Float_t fgkDefaultMax;//Default max value of histograms
170 static const UInt_t fgkDefaultNBinsToScale;//Default number of bins used for scaling to tale
173 AliHBTFunction1D();//default conmstructor
174 AliHBTFunction1D(Int_t nbins, Float_t maxXval, Float_t minXval);
175 AliHBTFunction1D(const Char_t *name, const Char_t *title);
176 AliHBTFunction1D(const Char_t *name, const Char_t *title,
177 Int_t nbins, Float_t maxXval, Float_t minXval);
178 virtual ~AliHBTFunction1D();
180 TH1* GetNumerator() const {return fNumerator;}//returns numerator histogram
181 TH1* GetDenominator() const {return fDenominator;}//returns denominator histogram
184 void SetNumberOfBinsToScale(Int_t n = fgkDefaultNBinsToScale){fNBinsToScale = n;}
187 //retruns velue to be histogrammed
188 virtual void BuildHistos(Int_t nbins, Float_t max, Float_t min);
189 virtual void BuildHistos();
190 Double_t Scale(TH1D* num,TH1D* den);
194 UInt_t fNBinsToScale;
197 ClassDef(AliHBTFunction1D,2)
200 /******************************************************************/
201 /******************************************************************/
202 /******************************************************************/
204 //____________________
205 ///////////////////////////////////////////////////////
207 // AliHBTFunction2D //
209 // Base Calss for 2-dimensinal Functions //
211 // Piotr.Skowronski@cern.ch //
212 // http://alisoft.cern.ch/people/skowron/analyzer //
214 ///////////////////////////////////////////////////////
216 class AliHBTFunction2D: public AliHBTFunction
219 //this must be declared before constructors because they are used as a default arguments
220 static const Int_t fgkDefaultNBinsX;//default number of Bins in X axis in histograms
221 static const Float_t fgkDefaultMinX;//Default min value of X axis in histograms
222 static const Float_t fgkDefaultMaxX;//Default max value of X axis inhistograms
223 static const Int_t fgkDefaultNBinsY;//default number of Bins in histograms
224 static const Float_t fgkDefaultMinY;//Default min value of histograms
225 static const Float_t fgkDefaultMaxY;//Default max value of histograms
227 static const UInt_t fgkDefaultNBinsToScaleX;//Default number of X bins used for scaling to tale
228 static const UInt_t fgkDefaultNBinsToScaleY;//Default number of bins used for scaling to tale
233 AliHBTFunction2D(const Char_t *name, const Char_t *title);
235 AliHBTFunction2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
236 Int_t nYbins, Double_t maxYval, Double_t minYval);
238 AliHBTFunction2D(const Char_t *name, const Char_t *title,
239 Int_t nXbins, Double_t maxXval, Double_t minXval,
240 Int_t nYbins, Double_t maxYval, Double_t minYval);
242 virtual ~AliHBTFunction2D();
244 TH1* GetNumerator() const {return fNumerator;}
245 TH1* GetDenominator() const {return fDenominator;}
247 void SetNumberOfBinsToScale(UInt_t xn = fgkDefaultNBinsToScaleX,
248 UInt_t yn = fgkDefaultNBinsToScaleY);
252 virtual void BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin,
253 Int_t nybins, Float_t ymax, Float_t ymin);
254 virtual void BuildHistos();
259 //definition of area used for scaling -> Scale is calculated this
260 //way that after division tale is on 1
261 UInt_t fNBinsToScaleX;//number of bins on X axis
262 UInt_t fNBinsToScaleY;//number of bins on Y axis
265 ClassDef(AliHBTFunction2D,2)
267 /******************************************************************/
268 /******************************************************************/
269 /******************************************************************/
271 //____________________
272 ///////////////////////////////////////////////////////
274 // AliHBTFunction3D //
276 // Base Calss for 3-dimensinal Functions that need //
277 // one pair to fill function //
279 // Piotr.Skowronski@cern.ch //
280 // http://alisoft.cern.ch/people/skowron/analyzer //
282 ///////////////////////////////////////////////////////
284 class AliHBTFunction3D: public AliHBTFunction
287 //this must be declared before constructors because they are used as a default arguments
288 static const Int_t fgkDefaultNBinsX;//default number of Bins in X axis in histograms
289 static const Float_t fgkDefaultMinX;//Default min value of X axis in histograms
290 static const Float_t fgkDefaultMaxX;//Default max value of X axis inhistograms
291 static const Int_t fgkDefaultNBinsY;//default number of Bins in Y axis in histograms
292 static const Float_t fgkDefaultMinY;//Default min value of Y axis in histograms
293 static const Float_t fgkDefaultMaxY;//Default max value of Y axis inhistograms
294 static const Int_t fgkDefaultNBinsZ;//default number of Bins in Z axis in histograms
295 static const Float_t fgkDefaultMinZ;//Default min value of Z axis in histograms
296 static const Float_t fgkDefaultMaxZ;//Default max value of Z axis inhistograms
298 static const UInt_t fgkDefaultNBinsToScaleX;//Default number of X bins used for scaling to tale
299 static const UInt_t fgkDefaultNBinsToScaleY;//Default number of Y bins used for scaling to tale
300 static const UInt_t fgkDefaultNBinsToScaleZ;//Default number of Z bins used for scaling to tale
305 AliHBTFunction3D(const Char_t *name, const Char_t *title);
307 AliHBTFunction3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
308 Int_t nYbins, Double_t maxYval, Double_t minYval,
309 Int_t nZbins, Double_t maxZval, Double_t minZval);
311 AliHBTFunction3D(const Char_t *name, const Char_t *title,
312 Int_t nXbins, Double_t maxXval, Double_t minXval,
313 Int_t nYbins, Double_t maxYval, Double_t minYval,
314 Int_t nZbins, Double_t maxZval, Double_t minZval);
316 virtual ~AliHBTFunction3D();//destructor
318 TH1* GetNumerator() const {return fNumerator;}
319 TH1* GetDenominator() const {return fDenominator;}
322 void SetNumberOfBinsToScale(UInt_t xn = fgkDefaultNBinsToScaleX,
323 UInt_t yn = fgkDefaultNBinsToScaleY,
324 UInt_t zn = fgkDefaultNBinsToScaleZ);
329 virtual void BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin,
330 Int_t nybins, Float_t ymax, Float_t ymin,
331 Int_t nzbins, Float_t zmax, Float_t zmin);
332 virtual void BuildHistos();
337 //definition of area used for scaling -> Scale is calculated this
338 //way that after division tale is on 1
339 UInt_t fNBinsToScaleX;//number of bins on X axis
340 UInt_t fNBinsToScaleY;//number of bins on Y axis
341 UInt_t fNBinsToScaleZ;//number of bins on Z axis
344 ClassDef(AliHBTFunction3D,2)
346 /******************************************************************/
347 /******************************************************************/
348 /******************************************************************/
350 //____________________
351 ///////////////////////////////////////////////////////
353 // AliHBTOnePairFctn1D //
355 // Base Calss for 1-dimensinal Functions that need //
356 // one pair to fill function //
358 // Piotr.Skowronski@cern.ch //
359 // http://alisoft.cern.ch/people/skowron/analyzer //
361 ///////////////////////////////////////////////////////
363 class AliHBTOnePairFctn1D: public AliHBTOnePairFctn, public AliHBTFunction1D
366 AliHBTOnePairFctn1D(){}//default conmstructor
367 AliHBTOnePairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval);
368 AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title);
369 AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title,
370 Int_t nbins, Float_t maxXval, Float_t minXval);
371 virtual ~AliHBTOnePairFctn1D(){}
373 void ProcessSameEventParticles(AliHBTPair* pair);
374 void ProcessDiffEventParticles(AliHBTPair* pair);
375 void Write(){AliHBTFunction::Write();}
376 void Init(){AliHBTFunction::Init();}
378 //retruns velue to be histogrammed
379 virtual Double_t GetValue(AliHBTPair* pair) = 0;
380 ClassDef(AliHBTOnePairFctn1D,2)
382 /******************************************************************/
383 /******************************************************************/
384 /******************************************************************/
386 //____________________
387 ///////////////////////////////////////////////////////
389 // AliHBTOnePairFctn2D //
391 // Base Calss for 2-dimensinal Functions that need //
392 // one pair to fill function //
394 // Piotr.Skowronski@cern.ch //
395 // http://alisoft.cern.ch/people/skowron/analyzer //
397 ///////////////////////////////////////////////////////
399 class AliHBTOnePairFctn2D: public AliHBTOnePairFctn, public AliHBTFunction2D
402 AliHBTOnePairFctn2D(){}
404 AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title);
406 AliHBTOnePairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
407 Int_t nYbins, Double_t maxYval, Double_t minYval);
409 AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title,
410 Int_t nXbins, Double_t maxXval, Double_t minXval,
411 Int_t nYbins, Double_t maxYval, Double_t minYval);
413 virtual ~AliHBTOnePairFctn2D(){}
415 void ProcessSameEventParticles(AliHBTPair* pair);
416 void ProcessDiffEventParticles(AliHBTPair* pair);
417 void Write(){AliHBTFunction::Write();}
418 void Init(){AliHBTFunction::Init();}
420 virtual void GetValues(AliHBTPair* pair, Double_t& x, Double_t& y) = 0;
421 ClassDef(AliHBTOnePairFctn2D,2)
423 /******************************************************************/
424 /******************************************************************/
425 /******************************************************************/
427 //____________________
428 ///////////////////////////////////////////////////////
430 // AliHBTOnePairFctn3D //
432 // Base Calss for 3-dimensinal Functions that need //
433 // one pair to fill function //
435 // Piotr.Skowronski@cern.ch //
436 // http://alisoft.cern.ch/people/skowron/analyzer //
438 ///////////////////////////////////////////////////////
440 class AliHBTOnePairFctn3D: public AliHBTOnePairFctn, public AliHBTFunction3D
443 AliHBTOnePairFctn3D(){}
445 AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title);
447 AliHBTOnePairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
448 Int_t nYbins, Double_t maxYval, Double_t minYval,
449 Int_t nZbins, Double_t maxZval, Double_t minZval);
451 AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title,
452 Int_t nXbins, Double_t maxXval, Double_t minXval,
453 Int_t nYbins, Double_t maxYval, Double_t minYval,
454 Int_t nZbins, Double_t maxZval, Double_t minZval);
456 virtual ~AliHBTOnePairFctn3D(){}//destructor
458 void ProcessSameEventParticles(AliHBTPair* pair);
459 void ProcessDiffEventParticles(AliHBTPair* pair);
460 void Write(){AliHBTFunction::Write();}
461 void Init(){AliHBTFunction::Init();}
463 virtual void GetValues(AliHBTPair* pair, Double_t& x, Double_t& y, Double_t& z) = 0;
464 ClassDef(AliHBTOnePairFctn3D,2)
466 /******************************************************************/
467 /******************************************************************/
468 /******************************************************************/
470 //____________________
471 ///////////////////////////////////////////////////////
473 // AliHBTTwoPairFctn1D //
475 // Base Calss for 1-dimensinal Functions that need //
476 // two pair (simulated and reconstructed) //
477 // to fill function //
479 // Piotr.Skowronski@cern.ch //
480 // http://alisoft.cern.ch/people/skowron/analyzer //
482 ///////////////////////////////////////////////////////
484 class AliHBTTwoPairFctn1D: public AliHBTTwoPairFctn, public AliHBTFunction1D
487 AliHBTTwoPairFctn1D(){}//default conmstructor
488 AliHBTTwoPairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval);
489 AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title);
490 AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title,
491 Int_t nbins, Float_t maxXval, Float_t minXval);
492 virtual ~AliHBTTwoPairFctn1D(){}
494 void ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
495 void ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
496 void Write(){AliHBTFunction::Write();}
497 void Init(){AliHBTFunction::Init();}
499 virtual Double_t GetValue(AliHBTPair* trackpair, AliHBTPair* partpair) = 0;
501 ClassDef(AliHBTTwoPairFctn1D,2)
503 /******************************************************************/
504 /******************************************************************/
505 /******************************************************************/
507 //____________________
508 ///////////////////////////////////////////////////////
510 // AliHBTTwoPairFctn2D //
512 // Base Calss for 2-dimensinal Functions that need //
513 // two pair (simulated and reconstructed) //
514 // to fill function //
516 // Piotr.Skowronski@cern.ch //
517 // http://alisoft.cern.ch/people/skowron/analyzer //
519 ///////////////////////////////////////////////////////
521 class AliHBTTwoPairFctn2D: public AliHBTTwoPairFctn, public AliHBTFunction2D
524 AliHBTTwoPairFctn2D(){}
526 AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title);
528 AliHBTTwoPairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
529 Int_t nYbins, Double_t maxYval, Double_t minYval);
531 AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title,
532 Int_t nXbins, Double_t maxXval, Double_t minXval,
533 Int_t nYbins, Double_t maxYval, Double_t minYval);
535 virtual ~AliHBTTwoPairFctn2D(){}
537 void ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
538 void ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
539 void Write(){AliHBTFunction::Write();}
540 void Init(){AliHBTFunction::Init();}
543 virtual void GetValues(AliHBTPair* trackpair, AliHBTPair* partpair, Double_t& x, Double_t& y) = 0;
546 ClassDef(AliHBTTwoPairFctn2D,2)
548 /******************************************************************/
549 /******************************************************************/
550 /******************************************************************/
552 //____________________
553 ///////////////////////////////////////////////////////
555 // AliHBTTwoPairFctn3D //
557 // Base Calss for 3-dimensinal Functions that need //
558 // two pair (simulated and reconstructed) //
559 // to fill function //
561 // Piotr.Skowronski@cern.ch //
562 // http://alisoft.cern.ch/people/skowron/analyzer //
564 ///////////////////////////////////////////////////////
566 class AliHBTTwoPairFctn3D: public AliHBTTwoPairFctn, public AliHBTFunction3D
569 AliHBTTwoPairFctn3D(){}
571 AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title);
573 AliHBTTwoPairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
574 Int_t nYbins, Double_t maxYval, Double_t minYval,
575 Int_t nZbins, Double_t maxZval, Double_t minZval);
577 AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title,
578 Int_t nXbins, Double_t maxXval, Double_t minXval,
579 Int_t nYbins, Double_t maxYval, Double_t minYval,
580 Int_t nZbins, Double_t maxZval, Double_t minZval);
582 virtual ~AliHBTTwoPairFctn3D(){}//destructor
584 void ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
585 void ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
586 void Write(){AliHBTFunction::Write();}
587 void Init(){AliHBTFunction::Init();}
590 virtual void GetValues(AliHBTPair* trackpair, AliHBTPair* partpair, Double_t& x, Double_t& y, Double_t& z) = 0;
593 ClassDef(AliHBTTwoPairFctn3D,2)