1 #ifndef ALIHBTFUNCTION_H
2 #define ALIHBTFUNCTION_H
6 ///////////////////////////////////////////////////////
10 // Abstract Base Calss for all the function classes //
12 // Piotr.Skowronski@cern.ch //
13 // http://alisoft.cern.ch/people/skowron/analyzer //
15 ///////////////////////////////////////////////////////
21 #include "AliHBTPairCut.h"
22 #include "AliHBTPair.h"
26 class AliHBTParticleCut;
28 class AliHBTFunction: public TNamed
32 AliHBTFunction(const char* name,const char* title);
33 virtual ~AliHBTFunction();
35 AliHBTFunction(const AliHBTFunction & source) {
36 // Copy constructor needed by the coding conventions byt not used
37 Fatal("AliHBTFunction(const AliHBTFunction & source)",
41 AliHBTFunction & operator= (const AliHBTFunction & source) {
42 // Assignment needed by the coding conventions byt not used
43 Fatal("Assignment operator","not implemented");
47 virtual TH1* GetNumerator() const = 0;
48 virtual TH1* GetDenominator() const = 0;
49 virtual TH1* GetResult() = 0;
51 virtual void WriteFunction();
52 virtual void InitFunction();
54 TH1* GetRatio(Double_t normfactor = 1.0);
55 void Rename(const Char_t * name); //renames the function and histograms ==title is the same that name
56 void Rename(const Char_t * name, const Char_t * title); //renames and retitle the function and histograms
58 void SetPairCut(AliHBTPairCut* cut);
60 virtual AliHBTPair* CheckPair(AliHBTPair* pair);
63 virtual void BuildHistos() = 0;//builds default histograms
64 AliHBTPairCut* fPairCut; //pair cut
66 ClassDef(AliHBTFunction,2)
68 /******************************************************************/
69 inline AliHBTPair* AliHBTFunction::CheckPair(AliHBTPair* pair)
71 //check if pair and both particles meets the cut criteria
72 if(fPairCut->Pass(pair)) //if the pair is BAD
74 pair = pair->GetSwapedPair();
76 if(fPairCut->Pass(pair)) //so try reverse combination
78 return 0x0;//it is BAD as well - so return
84 /******************************************************************/
85 /******************************************************************/
86 /******************************************************************/
88 //____________________
89 ///////////////////////////////////////////////////////
91 // AliHBTOnePairFctn //
93 // Abstract Base Calss for Functions that need //
94 // one pair to fill function //
96 // Piotr.Skowronski@cern.ch //
97 // http://alisoft.cern.ch/people/skowron/analyzer //
99 ///////////////////////////////////////////////////////
101 class AliHBTOnePairFctn
104 AliHBTOnePairFctn(){}
105 virtual ~AliHBTOnePairFctn(){}
107 virtual void ProcessSameEventParticles(AliHBTPair* pair) = 0;
108 virtual void ProcessDiffEventParticles(AliHBTPair* pair) = 0;
110 virtual void Init() = 0;
111 virtual void Write() = 0;
113 ClassDef(AliHBTOnePairFctn,2)
115 /******************************************************************/
116 /******************************************************************/
117 /******************************************************************/
119 //____________________
120 ///////////////////////////////////////////////////////
122 // AliHBTTwoPairFctn //
124 // Abstract Base Calss for Functions that need //
125 // two pairs to fill function, //
126 // one reconstructed track and corresponding //
128 // Basically resolution functions //
129 // Lednicky's algorithm uses that as well //
131 // Piotr.Skowronski@cern.ch //
132 // http://alisoft.cern.ch/people/skowron/analyzer //
134 ///////////////////////////////////////////////////////
136 class AliHBTTwoPairFctn
139 AliHBTTwoPairFctn(){};
140 virtual ~AliHBTTwoPairFctn(){};
143 ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) = 0;
145 ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) = 0;
147 virtual void Init() = 0;
148 virtual void Write() = 0;
150 ClassDef(AliHBTTwoPairFctn,2)
153 /******************************************************************/
154 /******************************************************************/
155 /******************************************************************/
157 //____________________
158 ///////////////////////////////////////////////////////
160 // AliHBTFunction1D //
162 // Base Calss for 1-dimensinal Functions //
164 // Piotr.Skowronski@cern.ch //
165 // http://alisoft.cern.ch/people/skowron/analyzer //
167 ///////////////////////////////////////////////////////
170 class AliHBTFunction1D: public AliHBTFunction
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 AliHBTFunction1D(const AliHBTFunction1D & source) {
179 // Copy constructor needed by the coding conventions byt not used
180 Fatal("AliHBTFunction1D(const AliHBTFunction1D & source)",
183 AliHBTFunction1D & operator= (const AliHBTFunction1D & source) {
184 // Assignment needed by the coding conventions byt not used
185 Fatal("Assignment operator","not implemented");
189 virtual ~AliHBTFunction1D();
191 TH1* GetNumerator() const {return fNumerator;}//returns numerator histogram
192 TH1* GetDenominator() const {return fDenominator;}//returns denominator histogram
195 void SetNumberOfBinsToScale(Int_t n = fgkDefaultNBinsToScale){fNBinsToScale = n;}
198 //returns value to be histogrammed
199 virtual void BuildHistos(Int_t nbins, Float_t max, Float_t min);
200 virtual void BuildHistos();
201 Double_t Scale(TH1D* num,TH1D* den);
203 TH1D* fNumerator; // Numerator histogram
204 TH1D* fDenominator; // Denumerator histogram
205 UInt_t fNBinsToScale; // Number of bins to scale
208 //this must be declared before constructors because they are used as a default arguments
209 static const Int_t fgkDefaultNBins;//default number of Bins in histograms
210 static const Float_t fgkDefaultMin;//Default min value of histograms
211 static const Float_t fgkDefaultMax;//Default max value of histograms
212 static const UInt_t fgkDefaultNBinsToScale;//Default number of bins used for scaling to tale
214 ClassDef(AliHBTFunction1D,2)
217 /******************************************************************/
218 /******************************************************************/
219 /******************************************************************/
221 //____________________
222 ///////////////////////////////////////////////////////
224 // AliHBTFunction2D //
226 // Base Calss for 2-dimensinal Functions //
228 // Piotr.Skowronski@cern.ch //
229 // http://alisoft.cern.ch/people/skowron/analyzer //
231 ///////////////////////////////////////////////////////
233 class AliHBTFunction2D: public AliHBTFunction
238 AliHBTFunction2D(const Char_t *name, const Char_t *title);
240 AliHBTFunction2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
241 Int_t nYbins, Double_t maxYval, Double_t minYval);
243 AliHBTFunction2D(const Char_t *name, const Char_t *title,
244 Int_t nXbins, Double_t maxXval, Double_t minXval,
245 Int_t nYbins, Double_t maxYval, Double_t minYval);
247 AliHBTFunction2D(const AliHBTFunction2D & source) {
248 // Copy constructor needed by the coding conventions byt not used
249 Fatal("AliHBTFunction2D(const AliHBTFunction2D & source)",
253 AliHBTFunction2D & operator= (const AliHBTFunction2D & source) {
254 // Assignment needed by the coding conventions byt not used
255 Fatal("Assignment operator","not implemented");
259 virtual ~AliHBTFunction2D();
261 TH1* GetNumerator() const {return fNumerator;}
262 TH1* GetDenominator() const {return fDenominator;}
264 void SetNumberOfBinsToScale(UInt_t xn = fgkDefaultNBinsToScaleX,
265 UInt_t yn = fgkDefaultNBinsToScaleY);
269 virtual void BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin,
270 Int_t nybins, Float_t ymax, Float_t ymin);
271 virtual void BuildHistos();
273 TH2D* fNumerator; // Numerator histogram
274 TH2D* fDenominator; // Denominator histogram
276 //definition of area used for scaling -> Scale is calculated this
277 //way that after division tale is on 1
278 UInt_t fNBinsToScaleX;//number of bins on X axis
279 UInt_t fNBinsToScaleY;//number of bins on Y axis
282 //this must be declared before constructors because they are used as a default arguments
283 static const Int_t fgkDefaultNBinsX;//default number of Bins in X axis in histograms
284 static const Float_t fgkDefaultMinX;//Default min value of X axis in histograms
285 static const Float_t fgkDefaultMaxX;//Default max value of X axis inhistograms
286 static const Int_t fgkDefaultNBinsY;//default number of Bins in histograms
287 static const Float_t fgkDefaultMinY;//Default min value of histograms
288 static const Float_t fgkDefaultMaxY;//Default max value of histograms
290 static const UInt_t fgkDefaultNBinsToScaleX;//Default number of X bins used for scaling to tale
291 static const UInt_t fgkDefaultNBinsToScaleY;//Default number of bins used for scaling to tale
293 ClassDef(AliHBTFunction2D,2)
295 /******************************************************************/
296 /******************************************************************/
297 /******************************************************************/
299 //____________________
300 ///////////////////////////////////////////////////////
302 // AliHBTFunction3D //
304 // Base Calss for 3-dimensinal Functions that need //
305 // one pair to fill function //
307 // Piotr.Skowronski@cern.ch //
308 // http://alisoft.cern.ch/people/skowron/analyzer //
310 ///////////////////////////////////////////////////////
312 class AliHBTFunction3D: public AliHBTFunction
317 AliHBTFunction3D(const Char_t *name, const Char_t *title);
319 AliHBTFunction3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
320 Int_t nYbins, Double_t maxYval, Double_t minYval,
321 Int_t nZbins, Double_t maxZval, Double_t minZval);
323 AliHBTFunction3D(const Char_t *name, const Char_t *title,
324 Int_t nXbins, Double_t maxXval, Double_t minXval,
325 Int_t nYbins, Double_t maxYval, Double_t minYval,
326 Int_t nZbins, Double_t maxZval, Double_t minZval);
328 AliHBTFunction3D(const AliHBTFunction3D & source) {
329 // Copy constructor needed by the coding conventions byt not used
330 Fatal("AliHBTFunction3D(const AliHBTFunction3D & source)",
334 AliHBTFunction3D & operator= (const AliHBTFunction3D & source) {
335 // Assignment needed by the coding conventions byt not used
336 Fatal("Assignment operator","not implemented");
340 virtual ~AliHBTFunction3D();//destructor
342 TH1* GetNumerator() const {return fNumerator;}
343 TH1* GetDenominator() const {return fDenominator;}
346 void SetNumberOfBinsToScale(UInt_t xn = fgkDefaultNBinsToScaleX,
347 UInt_t yn = fgkDefaultNBinsToScaleY,
348 UInt_t zn = fgkDefaultNBinsToScaleZ);
353 virtual void BuildHistos(Int_t nxbins, Float_t xmax, Float_t xmin,
354 Int_t nybins, Float_t ymax, Float_t ymin,
355 Int_t nzbins, Float_t zmax, Float_t zmin);
356 virtual void BuildHistos();
358 TH3D* fNumerator; // Numerator histogram
359 TH3D* fDenominator; // Denominator histogram
361 //definition of area used for scaling -> Scale is calculated this
362 //way that after division tale is on 1
363 UInt_t fNBinsToScaleX;//number of bins on X axis
364 UInt_t fNBinsToScaleY;//number of bins on Y axis
365 UInt_t fNBinsToScaleZ;//number of bins on Z axis
368 //this must be declared before constructors because they are used as a default arguments
369 static const Int_t fgkDefaultNBinsX;//default number of Bins in X axis in histograms
370 static const Float_t fgkDefaultMinX;//Default min value of X axis in histograms
371 static const Float_t fgkDefaultMaxX;//Default max value of X axis inhistograms
372 static const Int_t fgkDefaultNBinsY;//default number of Bins in Y axis in histograms
373 static const Float_t fgkDefaultMinY;//Default min value of Y axis in histograms
374 static const Float_t fgkDefaultMaxY;//Default max value of Y axis inhistograms
375 static const Int_t fgkDefaultNBinsZ;//default number of Bins in Z axis in histograms
376 static const Float_t fgkDefaultMinZ;//Default min value of Z axis in histograms
377 static const Float_t fgkDefaultMaxZ;//Default max value of Z axis inhistograms
379 static const UInt_t fgkDefaultNBinsToScaleX;//Default number of X bins used for scaling to tale
380 static const UInt_t fgkDefaultNBinsToScaleY;//Default number of Y bins used for scaling to tale
381 static const UInt_t fgkDefaultNBinsToScaleZ;//Default number of Z bins used for scaling to tale
383 ClassDef(AliHBTFunction3D,2)
385 /******************************************************************/
386 /******************************************************************/
387 /******************************************************************/
389 //____________________
390 ///////////////////////////////////////////////////////
392 // AliHBTOnePairFctn1D //
394 // Base Calss for 1-dimensinal Functions that need //
395 // one pair to fill function //
397 // Piotr.Skowronski@cern.ch //
398 // http://alisoft.cern.ch/people/skowron/analyzer //
400 ///////////////////////////////////////////////////////
402 class AliHBTOnePairFctn1D: public AliHBTOnePairFctn, public AliHBTFunction1D
405 AliHBTOnePairFctn1D(){}//default conmstructor
406 AliHBTOnePairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval);
407 AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title);
408 AliHBTOnePairFctn1D(const Char_t *name, const Char_t *title,
409 Int_t nbins, Float_t maxXval, Float_t minXval);
410 virtual ~AliHBTOnePairFctn1D(){}
412 void ProcessSameEventParticles(AliHBTPair* pair);
413 void ProcessDiffEventParticles(AliHBTPair* pair);
414 void Write(){WriteFunction();}
415 void Init(){InitFunction();}
417 //retruns velue to be histogrammed
418 virtual Double_t GetValue(AliHBTPair* pair) = 0;
419 ClassDef(AliHBTOnePairFctn1D,2)
421 /******************************************************************/
422 /******************************************************************/
423 /******************************************************************/
425 //____________________
426 ///////////////////////////////////////////////////////
428 // AliHBTOnePairFctn2D //
430 // Base Calss for 2-dimensinal Functions that need //
431 // one pair to fill function //
433 // Piotr.Skowronski@cern.ch //
434 // http://alisoft.cern.ch/people/skowron/analyzer //
436 ///////////////////////////////////////////////////////
438 class AliHBTOnePairFctn2D: public AliHBTOnePairFctn, public AliHBTFunction2D
441 AliHBTOnePairFctn2D(){}
443 AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title);
445 AliHBTOnePairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
446 Int_t nYbins, Double_t maxYval, Double_t minYval);
448 AliHBTOnePairFctn2D(const Char_t *name, const Char_t *title,
449 Int_t nXbins, Double_t maxXval, Double_t minXval,
450 Int_t nYbins, Double_t maxYval, Double_t minYval);
452 virtual ~AliHBTOnePairFctn2D(){}
454 void ProcessSameEventParticles(AliHBTPair* pair);
455 void ProcessDiffEventParticles(AliHBTPair* pair);
456 void Write(){WriteFunction();}
457 void Init(){InitFunction();}
459 virtual void GetValues(AliHBTPair* pair, Double_t& x, Double_t& y) = 0;
460 ClassDef(AliHBTOnePairFctn2D,2)
462 /******************************************************************/
463 /******************************************************************/
464 /******************************************************************/
466 //____________________
467 ///////////////////////////////////////////////////////
469 // AliHBTOnePairFctn3D //
471 // Base Calss for 3-dimensinal Functions that need //
472 // one pair to fill function //
474 // Piotr.Skowronski@cern.ch //
475 // http://alisoft.cern.ch/people/skowron/analyzer //
477 ///////////////////////////////////////////////////////
479 class AliHBTOnePairFctn3D: public AliHBTOnePairFctn, public AliHBTFunction3D
482 AliHBTOnePairFctn3D(){}
484 AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title);
486 AliHBTOnePairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
487 Int_t nYbins, Double_t maxYval, Double_t minYval,
488 Int_t nZbins, Double_t maxZval, Double_t minZval);
490 AliHBTOnePairFctn3D(const Char_t *name, const Char_t *title,
491 Int_t nXbins, Double_t maxXval, Double_t minXval,
492 Int_t nYbins, Double_t maxYval, Double_t minYval,
493 Int_t nZbins, Double_t maxZval, Double_t minZval);
495 virtual ~AliHBTOnePairFctn3D(){}//destructor
497 void ProcessSameEventParticles(AliHBTPair* pair);
498 void ProcessDiffEventParticles(AliHBTPair* pair);
499 void Write(){WriteFunction();}
500 void Init(){InitFunction();}
502 virtual void GetValues(AliHBTPair* pair, Double_t& x, Double_t& y, Double_t& z) = 0;
503 ClassDef(AliHBTOnePairFctn3D,2)
505 /******************************************************************/
506 /******************************************************************/
507 /******************************************************************/
509 //____________________
510 ///////////////////////////////////////////////////////
512 // AliHBTTwoPairFctn1D //
514 // Base Calss for 1-dimensinal Functions that need //
515 // two pair (simulated and reconstructed) //
516 // to fill function //
518 // Piotr.Skowronski@cern.ch //
519 // http://alisoft.cern.ch/people/skowron/analyzer //
521 ///////////////////////////////////////////////////////
523 class AliHBTTwoPairFctn1D: public AliHBTTwoPairFctn, public AliHBTFunction1D
526 AliHBTTwoPairFctn1D(){}//default conmstructor
527 AliHBTTwoPairFctn1D(Int_t nbins, Float_t maxXval, Float_t minXval);
528 AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title);
529 AliHBTTwoPairFctn1D(const Char_t *name, const Char_t *title,
530 Int_t nbins, Float_t maxXval, Float_t minXval);
531 virtual ~AliHBTTwoPairFctn1D(){}
533 void ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
534 void ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
535 void Write(){WriteFunction();}
536 void Init(){InitFunction();}
539 virtual Double_t GetValue(AliHBTPair* trackpair, AliHBTPair* partpair) = 0;
541 ClassDef(AliHBTTwoPairFctn1D,2)
543 /******************************************************************/
544 /******************************************************************/
545 /******************************************************************/
547 //____________________
548 ///////////////////////////////////////////////////////
550 // AliHBTTwoPairFctn2D //
552 // Base Calss for 2-dimensinal Functions that need //
553 // two pair (simulated and reconstructed) //
554 // to fill function //
556 // Piotr.Skowronski@cern.ch //
557 // http://alisoft.cern.ch/people/skowron/analyzer //
559 ///////////////////////////////////////////////////////
561 class AliHBTTwoPairFctn2D: public AliHBTTwoPairFctn, public AliHBTFunction2D
564 AliHBTTwoPairFctn2D(){}
566 AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title);
568 AliHBTTwoPairFctn2D(Int_t nXbins, Double_t maxXval, Double_t minXval,
569 Int_t nYbins, Double_t maxYval, Double_t minYval);
571 AliHBTTwoPairFctn2D(const Char_t *name, const Char_t *title,
572 Int_t nXbins, Double_t maxXval, Double_t minXval,
573 Int_t nYbins, Double_t maxYval, Double_t minYval);
575 virtual ~AliHBTTwoPairFctn2D(){}
577 void ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
578 void ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
579 void Write(){WriteFunction();}
580 void Init(){InitFunction();}
583 virtual void GetValues(AliHBTPair* trackpair, AliHBTPair* partpair, Double_t& x, Double_t& y) = 0;
585 ClassDef(AliHBTTwoPairFctn2D,2)
587 /******************************************************************/
588 /******************************************************************/
589 /******************************************************************/
591 //____________________
592 ///////////////////////////////////////////////////////
594 // AliHBTTwoPairFctn3D //
596 // Base Calss for 3-dimensinal Functions that need //
597 // two pair (simulated and reconstructed) //
598 // to fill function //
600 // Piotr.Skowronski@cern.ch //
601 // http://alisoft.cern.ch/people/skowron/analyzer //
603 ///////////////////////////////////////////////////////
605 class AliHBTTwoPairFctn3D: public AliHBTTwoPairFctn, public AliHBTFunction3D
608 AliHBTTwoPairFctn3D(){}
610 AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title);
612 AliHBTTwoPairFctn3D(Int_t nXbins, Double_t maxXval, Double_t minXval,
613 Int_t nYbins, Double_t maxYval, Double_t minYval,
614 Int_t nZbins, Double_t maxZval, Double_t minZval);
616 AliHBTTwoPairFctn3D(const Char_t *name, const Char_t *title,
617 Int_t nXbins, Double_t maxXval, Double_t minXval,
618 Int_t nYbins, Double_t maxYval, Double_t minYval,
619 Int_t nZbins, Double_t maxZval, Double_t minZval);
621 virtual ~AliHBTTwoPairFctn3D(){}//destructor
623 void ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
624 void ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
625 void Write(){WriteFunction();}
626 void Init(){InitFunction();}
629 virtual void GetValues(AliHBTPair* trackpair, AliHBTPair* partpair, Double_t& x, Double_t& y, Double_t& z) = 0;
631 ClassDef(AliHBTTwoPairFctn3D,2)