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)
105 /******************************************************************/
106 /******************************************************************/
107 /******************************************************************/
109 //____________________
110 ///////////////////////////////////////////////////////
112 // AliHBTTwoPairFctn //
114 // Abstract Base Calss for Functions that need //
115 // two pairs to fill function, //
116 // one reconstructed track and corresponding //
118 // Basically resolution functions //
119 // Lednicky's algorithm uses that as well //
121 // Piotr.Skowronski@cern.ch //
122 // http://alisoft.cern.ch/people/skowron/analyzer //
124 ///////////////////////////////////////////////////////
126 class AliHBTTwoPairFctn
129 AliHBTTwoPairFctn(){};
130 virtual ~AliHBTTwoPairFctn(){};
133 ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) = 0;
135 ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) = 0;
137 virtual void Init() = 0;
138 virtual void Write() = 0;
142 ClassDef(AliHBTTwoPairFctn,2)
145 /******************************************************************/
146 /******************************************************************/
147 /******************************************************************/
149 //____________________
150 ///////////////////////////////////////////////////////
152 // AliHBTFunction1D //
154 // Base Calss for 1-dimensinal Functions //
156 // Piotr.Skowronski@cern.ch //
157 // http://alisoft.cern.ch/people/skowron/analyzer //
159 ///////////////////////////////////////////////////////
162 class AliHBTFunction1D: public AliHBTFunction
165 //this must be declared before constructors because they are used as a default arguments
166 static const Int_t fgkDefaultNBins;//default number of Bins in histograms
167 static const Float_t fgkDefaultMin;//Default min value of histograms
168 static const Float_t fgkDefaultMax;//Default max value of histograms
169 static const UInt_t fgkDefaultNBinsToScale;//Default number of bins used for scaling to tale
172 AliHBTFunction1D();//default conmstructor
173 AliHBTFunction1D(Int_t nbins, Float_t maxXval, Float_t minXval);
174 AliHBTFunction1D(const Char_t *name, const Char_t *title);
175 AliHBTFunction1D(const Char_t *name, const Char_t *title,
176 Int_t nbins, Float_t maxXval, Float_t minXval);
177 virtual ~AliHBTFunction1D();
179 TH1* GetNumerator() const {return fNumerator;}//returns numerator histogram
180 TH1* GetDenominator() const {return fDenominator;}//returns denominator histogram
183 void SetNumberOfBinsToScale(Int_t n = fgkDefaultNBinsToScale){fNBinsToScale = n;}
186 //retruns velue to be histogrammed
187 virtual void BuildHistos(Int_t nbins, Float_t max, Float_t min);
188 virtual void BuildHistos();
189 Double_t Scale(TH1D* num,TH1D* den);
193 UInt_t fNBinsToScale;
196 ClassDef(AliHBTFunction1D,2)
199 /******************************************************************/
200 /******************************************************************/
201 /******************************************************************/
203 //____________________
204 ///////////////////////////////////////////////////////
206 // AliHBTFunction2D //
208 // Base Calss for 2-dimensinal Functions //
210 // Piotr.Skowronski@cern.ch //
211 // http://alisoft.cern.ch/people/skowron/analyzer //
213 ///////////////////////////////////////////////////////
215 class AliHBTFunction2D: public AliHBTFunction
218 //this must be declared before constructors because they are used as a default arguments
219 static const Int_t fgkDefaultNBinsX;//default number of Bins in X axis in histograms
220 static const Float_t fgkDefaultMinX;//Default min value of X axis in histograms
221 static const Float_t fgkDefaultMaxX;//Default max value of X axis inhistograms
222 static const Int_t fgkDefaultNBinsY;//default number of Bins in histograms
223 static const Float_t fgkDefaultMinY;//Default min value of histograms
224 static const Float_t fgkDefaultMaxY;//Default max value of histograms
226 static const UInt_t fgkDefaultNBinsToScaleX;//Default number of X bins used for scaling to tale
227 static const UInt_t fgkDefaultNBinsToScaleY;//Default number of bins used for scaling to tale
232 AliHBTFunction2D(const Char_t *name, const Char_t *title);
234 AliHBTFunction2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
235 Int_t nYbins, Double_t maxYval, Double_t minYval);
237 AliHBTFunction2D(const Char_t *name, const Char_t *title,
238 Int_t nXbins, Double_t maxXval, Double_t minXval,
239 Int_t nYbins, Double_t maxYval, Double_t minYval);
241 virtual ~AliHBTFunction2D();
243 TH1* GetNumerator() const {return fNumerator;}
244 TH1* GetDenominator() const {return fDenominator;}
246 void SetNumberOfBinsToScale(UInt_t xn = fgkDefaultNBinsToScaleX,
247 UInt_t yn = fgkDefaultNBinsToScaleY);
251 virtual void BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin,
252 Int_t nybins, Float_t ymax, Float_t ymin);
253 virtual void BuildHistos();
258 //definition of area used for scaling -> Scale is calculated this
259 //way that after division tale is on 1
260 UInt_t fNBinsToScaleX;//number of bins on X axis
261 UInt_t fNBinsToScaleY;//number of bins on Y axis
264 ClassDef(AliHBTFunction2D,2)
266 /******************************************************************/
267 /******************************************************************/
268 /******************************************************************/
270 //____________________
271 ///////////////////////////////////////////////////////
273 // AliHBTFunction3D //
275 // Base Calss for 3-dimensinal Functions that need //
276 // one pair to fill function //
278 // Piotr.Skowronski@cern.ch //
279 // http://alisoft.cern.ch/people/skowron/analyzer //
281 ///////////////////////////////////////////////////////
283 class AliHBTFunction3D: public AliHBTFunction
286 //this must be declared before constructors because they are used as a default arguments
287 static const Int_t fgkDefaultNBinsX;//default number of Bins in X axis in histograms
288 static const Float_t fgkDefaultMinX;//Default min value of X axis in histograms
289 static const Float_t fgkDefaultMaxX;//Default max value of X axis inhistograms
290 static const Int_t fgkDefaultNBinsY;//default number of Bins in Y axis in histograms
291 static const Float_t fgkDefaultMinY;//Default min value of Y axis in histograms
292 static const Float_t fgkDefaultMaxY;//Default max value of Y axis inhistograms
293 static const Int_t fgkDefaultNBinsZ;//default number of Bins in Z axis in histograms
294 static const Float_t fgkDefaultMinZ;//Default min value of Z axis in histograms
295 static const Float_t fgkDefaultMaxZ;//Default max value of Z axis inhistograms
297 static const UInt_t fgkDefaultNBinsToScaleX;//Default number of X bins used for scaling to tale
298 static const UInt_t fgkDefaultNBinsToScaleY;//Default number of Y bins used for scaling to tale
299 static const UInt_t fgkDefaultNBinsToScaleZ;//Default number of Z bins used for scaling to tale
304 AliHBTFunction3D(const Char_t *name, const Char_t *title);
306 AliHBTFunction3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
307 Int_t nYbins, Double_t maxYval, Double_t minYval,
308 Int_t nZbins, Double_t maxZval, Double_t minZval);
310 AliHBTFunction3D(const Char_t *name, const Char_t *title,
311 Int_t nXbins, Double_t maxXval, Double_t minXval,
312 Int_t nYbins, Double_t maxYval, Double_t minYval,
313 Int_t nZbins, Double_t maxZval, Double_t minZval);
315 virtual ~AliHBTFunction3D();//destructor
317 TH1* GetNumerator() const {return fNumerator;}
318 TH1* GetDenominator() const {return fDenominator;}
321 void SetNumberOfBinsToScale(UInt_t xn = fgkDefaultNBinsToScaleX,
322 UInt_t yn = fgkDefaultNBinsToScaleY,
323 UInt_t zn = fgkDefaultNBinsToScaleZ);
328 virtual void BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin,
329 Int_t nybins, Float_t ymax, Float_t ymin,
330 Int_t nzbins, Float_t zmax, Float_t zmin);
331 virtual void BuildHistos();
336 //definition of area used for scaling -> Scale is calculated this
337 //way that after division tale is on 1
338 UInt_t fNBinsToScaleX;//number of bins on X axis
339 UInt_t fNBinsToScaleY;//number of bins on Y axis
340 UInt_t fNBinsToScaleZ;//number of bins on Z axis
343 ClassDef(AliHBTFunction3D,2)
345 /******************************************************************/
346 /******************************************************************/
347 /******************************************************************/
349 //____________________
350 ///////////////////////////////////////////////////////
352 // AliHBTOnePairFctn1D //
354 // Base Calss for 1-dimensinal Functions that need //
355 // one pair to fill function //
357 // Piotr.Skowronski@cern.ch //
358 // http://alisoft.cern.ch/people/skowron/analyzer //
360 ///////////////////////////////////////////////////////
362 class AliHBTOnePairFctn1D: public AliHBTOnePairFctn, public AliHBTFunction1D
365 AliHBTOnePairFctn1D(){}//default conmstructor
366 AliHBTOnePairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval);
367 AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title);
368 AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title,
369 Int_t nbins, Float_t maxXval, Float_t minXval);
370 virtual ~AliHBTOnePairFctn1D(){}
372 void ProcessSameEventParticles(AliHBTPair* pair);
373 void ProcessDiffEventParticles(AliHBTPair* pair);
374 void Write(){AliHBTFunction::Write();}
375 void Init(){AliHBTFunction::Init();}
377 //retruns velue to be histogrammed
378 virtual Double_t GetValue(AliHBTPair* pair) = 0;
379 ClassDef(AliHBTOnePairFctn1D,2)
381 /******************************************************************/
382 /******************************************************************/
383 /******************************************************************/
385 //____________________
386 ///////////////////////////////////////////////////////
388 // AliHBTOnePairFctn2D //
390 // Base Calss for 2-dimensinal Functions that need //
391 // one pair to fill function //
393 // Piotr.Skowronski@cern.ch //
394 // http://alisoft.cern.ch/people/skowron/analyzer //
396 ///////////////////////////////////////////////////////
398 class AliHBTOnePairFctn2D: public AliHBTOnePairFctn, public AliHBTFunction2D
401 AliHBTOnePairFctn2D(){}
403 AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title);
405 AliHBTOnePairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
406 Int_t nYbins, Double_t maxYval, Double_t minYval);
408 AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title,
409 Int_t nXbins, Double_t maxXval, Double_t minXval,
410 Int_t nYbins, Double_t maxYval, Double_t minYval);
412 virtual ~AliHBTOnePairFctn2D(){}
414 void ProcessSameEventParticles(AliHBTPair* pair);
415 void ProcessDiffEventParticles(AliHBTPair* pair);
416 void Write(){AliHBTFunction::Write();}
417 void Init(){AliHBTFunction::Init();}
419 virtual void GetValues(AliHBTPair* pair, Double_t& x, Double_t& y) = 0;
420 ClassDef(AliHBTOnePairFctn2D,2)
422 /******************************************************************/
423 /******************************************************************/
424 /******************************************************************/
426 //____________________
427 ///////////////////////////////////////////////////////
429 // AliHBTOnePairFctn3D //
431 // Base Calss for 3-dimensinal Functions that need //
432 // one pair to fill function //
434 // Piotr.Skowronski@cern.ch //
435 // http://alisoft.cern.ch/people/skowron/analyzer //
437 ///////////////////////////////////////////////////////
439 class AliHBTOnePairFctn3D: public AliHBTOnePairFctn, public AliHBTFunction3D
442 AliHBTOnePairFctn3D(){}
444 AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title);
446 AliHBTOnePairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
447 Int_t nYbins, Double_t maxYval, Double_t minYval,
448 Int_t nZbins, Double_t maxZval, Double_t minZval);
450 AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title,
451 Int_t nXbins, Double_t maxXval, Double_t minXval,
452 Int_t nYbins, Double_t maxYval, Double_t minYval,
453 Int_t nZbins, Double_t maxZval, Double_t minZval);
455 virtual ~AliHBTOnePairFctn3D(){}//destructor
457 void ProcessSameEventParticles(AliHBTPair* pair);
458 void ProcessDiffEventParticles(AliHBTPair* pair);
459 void Write(){AliHBTFunction::Write();}
460 void Init(){AliHBTFunction::Init();}
462 virtual void GetValues(AliHBTPair* pair, Double_t& x, Double_t& y, Double_t& z) = 0;
463 ClassDef(AliHBTOnePairFctn3D,2)
465 /******************************************************************/
466 /******************************************************************/
467 /******************************************************************/
469 //____________________
470 ///////////////////////////////////////////////////////
472 // AliHBTTwoPairFctn1D //
474 // Base Calss for 1-dimensinal Functions that need //
475 // two pair (simulated and reconstructed) //
476 // to fill function //
478 // Piotr.Skowronski@cern.ch //
479 // http://alisoft.cern.ch/people/skowron/analyzer //
481 ///////////////////////////////////////////////////////
483 class AliHBTTwoPairFctn1D: public AliHBTTwoPairFctn, public AliHBTFunction1D
486 AliHBTTwoPairFctn1D(){}//default conmstructor
487 AliHBTTwoPairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval);
488 AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title);
489 AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title,
490 Int_t nbins, Float_t maxXval, Float_t minXval);
491 virtual ~AliHBTTwoPairFctn1D(){}
493 void ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
494 void ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
495 void Write(){AliHBTFunction::Write();}
496 void Init(){AliHBTFunction::Init();}
498 virtual Double_t GetValue(AliHBTPair* trackpair, AliHBTPair* partpair) = 0;
500 ClassDef(AliHBTTwoPairFctn1D,2)
502 /******************************************************************/
503 /******************************************************************/
504 /******************************************************************/
506 //____________________
507 ///////////////////////////////////////////////////////
509 // AliHBTTwoPairFctn2D //
511 // Base Calss for 2-dimensinal Functions that need //
512 // two pair (simulated and reconstructed) //
513 // to fill function //
515 // Piotr.Skowronski@cern.ch //
516 // http://alisoft.cern.ch/people/skowron/analyzer //
518 ///////////////////////////////////////////////////////
520 class AliHBTTwoPairFctn2D: public AliHBTTwoPairFctn, public AliHBTFunction2D
523 AliHBTTwoPairFctn2D(){}
525 AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title);
527 AliHBTTwoPairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
528 Int_t nYbins, Double_t maxYval, Double_t minYval);
530 AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title,
531 Int_t nXbins, Double_t maxXval, Double_t minXval,
532 Int_t nYbins, Double_t maxYval, Double_t minYval);
534 virtual ~AliHBTTwoPairFctn2D(){}
536 void ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
537 void ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
538 void Write(){AliHBTFunction::Write();}
539 void Init(){AliHBTFunction::Init();}
542 virtual void GetValues(AliHBTPair* trackpair, AliHBTPair* partpair, Double_t& x, Double_t& y) = 0;
545 ClassDef(AliHBTTwoPairFctn2D,2)
547 /******************************************************************/
548 /******************************************************************/
549 /******************************************************************/
551 //____________________
552 ///////////////////////////////////////////////////////
554 // AliHBTTwoPairFctn3D //
556 // Base Calss for 3-dimensinal Functions that need //
557 // two pair (simulated and reconstructed) //
558 // to fill function //
560 // Piotr.Skowronski@cern.ch //
561 // http://alisoft.cern.ch/people/skowron/analyzer //
563 ///////////////////////////////////////////////////////
565 class AliHBTTwoPairFctn3D: public AliHBTTwoPairFctn, public AliHBTFunction3D
568 AliHBTTwoPairFctn3D(){}
570 AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title);
572 AliHBTTwoPairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
573 Int_t nYbins, Double_t maxYval, Double_t minYval,
574 Int_t nZbins, Double_t maxZval, Double_t minZval);
576 AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title,
577 Int_t nXbins, Double_t maxXval, Double_t minXval,
578 Int_t nYbins, Double_t maxYval, Double_t minYval,
579 Int_t nZbins, Double_t maxZval, Double_t minZval);
581 virtual ~AliHBTTwoPairFctn3D(){}//destructor
583 void ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
584 void ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
585 void Write(){AliHBTFunction::Write();}
586 void Init(){AliHBTFunction::Init();}
589 virtual void GetValues(AliHBTPair* trackpair, AliHBTPair* partpair, Double_t& x, Double_t& y, Double_t& z) = 0;
592 ClassDef(AliHBTTwoPairFctn3D,2)