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"
16 class AliHBTFunction: public TNamed
17 //Abstract base class for HBT functions
21 virtual ~AliHBTFunction(){}
23 virtual TH1* GetNumerator() =0;
24 virtual TH1* GetDenominator() =0;
25 virtual TH1* GetResult() = 0;
29 TH1* GetRatio(Double_t normfactor = 1.0);
30 void Rename(const Char_t * name); //renames the function and histograms ==title is the same that name
31 void Rename(const Char_t * name, const Char_t * title); //renames and retitle the function and histograms
33 void SetPairCut(AliHBTPairCut*);
35 virtual AliHBTPair* CheckPair(AliHBTPair* pair);
39 AliHBTPairCut* fPairCut;
42 ClassDef(AliHBTFunction,1)
44 inline AliHBTPair* AliHBTFunction::CheckPair(AliHBTPair* pair)
46 //check if pair and both particles meets the cut criteria
47 if(fPairCut->Pass(pair)) //if the pair is BAD
49 pair = pair->GetSwapedPair();
50 if(fPairCut->Pass(pair)) //so try reverse combination
52 return 0x0;//it is BAD as well - so return
60 /******************************************************************/
61 /******************************************************************/
62 /******************************************************************/
63 class AliHBTTwoPartFctn: public AliHBTFunction
67 virtual ~AliHBTTwoPartFctn(){}
69 virtual void ProcessSameEventParticles(AliHBTPair* pair) = 0;
70 virtual void ProcessDiffEventParticles(AliHBTPair* pair) = 0;
75 ClassDef(AliHBTTwoPartFctn,1)
78 /******************************************************************/
79 /******************************************************************/
80 /******************************************************************/
81 class AliHBTFourPartFctn: public AliHBTFunction
84 AliHBTFourPartFctn(){};
85 virtual ~AliHBTFourPartFctn(){};
88 ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) = 0;
90 ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair) = 0;
94 ClassDef(AliHBTFourPartFctn,1)
97 /******************************************************************/
98 /******************************************************************/
99 /******************************************************************/
102 class AliHBTTwoPartFctn1D: public AliHBTTwoPartFctn
105 AliHBTTwoPartFctn1D(Int_t nbins = 100, Double_t maxXval = 0.15, Double_t minXval = 0.0);
106 virtual ~AliHBTTwoPartFctn1D();
109 TH1* GetNumerator(){return fNumerator;}
110 TH1* GetDenominator(){return fDenominator;}
112 void ProcessSameEventParticles(AliHBTPair* pair);
113 void ProcessDiffEventParticles(AliHBTPair* pair);
116 //retruns velue to be histogrammed
117 virtual Double_t GetValue(AliHBTPair* pair) = 0;
123 ClassDef(AliHBTTwoPartFctn1D,1)
127 AliHBTTwoPartFctn1D::ProcessSameEventParticles(AliHBTPair* pair)
129 //Fills the numerator
130 pair = CheckPair(pair);
131 if(pair) fNumerator->Fill(GetValue(pair));
136 AliHBTTwoPartFctn1D::ProcessDiffEventParticles(AliHBTPair* pair)
139 pair = CheckPair(pair);
140 if(pair) fDenominator->Fill(GetValue(pair));
143 /******************************************************************/
144 /******************************************************************/
145 /******************************************************************/
147 class AliHBTTwoPartFctn2D: public AliHBTTwoPartFctn
150 AliHBTTwoPartFctn2D(Int_t nXbins = 200, Double_t maxXval = 1.5, Double_t minXval = 0.0,
151 Int_t nYbins = 200, Double_t maxYval = .15, Double_t minYval =-0.15);
152 ~AliHBTTwoPartFctn2D();
154 TH1* GetNumerator(){return fNumerator;}
155 TH1* GetDenominator(){return fDenominator;}
157 void ProcessSameEventParticles(AliHBTPair* pair);
158 void ProcessDiffEventParticles(AliHBTPair* pair);
160 virtual void GetValues(AliHBTPair* pair, Double_t&, Double_t&) = 0;
167 ClassDef(AliHBTTwoPartFctn2D,1)
169 /******************************************************************/
170 /******************************************************************/
171 /******************************************************************/
173 class AliHBTTwoPartFctn3D: public AliHBTTwoPartFctn
176 AliHBTTwoPartFctn3D(Int_t nXbins = 200, Double_t maxXval = 1.5, Double_t minXval = 0.0,
177 Int_t nYbins = 200, Double_t maxYval = .15, Double_t minYval =-0.15,
178 Int_t nZbins = 200, Double_t maxZval = .15, Double_t minZval =-0.15);
180 virtual ~AliHBTTwoPartFctn3D();
182 TH1* GetNumerator(){return fNumerator;}
183 TH1* GetDenominator(){return fDenominator;}
189 ClassDef(AliHBTTwoPartFctn3D,1)
191 /******************************************************************/
192 /******************************************************************/
193 /******************************************************************/
197 /******************************************************************/
198 /******************************************************************/
199 /******************************************************************/
200 class AliHBTFourPartFctn2D: public AliHBTFourPartFctn
203 AliHBTFourPartFctn2D(Int_t nXbins = 200, Double_t maxXval = 1.5, Double_t minXval = 0.0,
204 Int_t nYbins = 200, Double_t maxYval = .15, Double_t minYval =-0.15);
205 ~AliHBTFourPartFctn2D();
207 TH1* GetNumerator(){return fNumerator;}
208 TH1* GetDenominator(){return fDenominator;}
210 void ProcessSameEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
211 void ProcessDiffEventParticles(AliHBTPair* trackpair, AliHBTPair* partpair);
213 virtual void GetValues(AliHBTPair*,AliHBTPair*, Double_t&, Double_t&) = 0;
220 ClassDef(AliHBTFourPartFctn2D,1)
224 /******************************************************************/
225 /******************************************************************/
226 /******************************************************************/
228 /******************************************************************/
229 /******************************************************************/
230 /******************************************************************/