Added preprocessor conditionals to support ROOT > 5.11.2.
[u/mrichter/AliRoot.git] / HBTAN / AliHBTCorrectQInvCorrelFctn.h
1 #ifndef ALIHBTCORRECTQINVCORRELFCTN_H
2 #define ALIHBTCORRECTQINVCORRELFCTN_H
3 //____________________
4 ///////////////////////////////////////////////////////
5 //                                                   //
6 // AliHBTCorrectQInvCorrelFctn                       //
7 //                                                   //
8 // Class for calculating Q Invariant correlation     //
9 // taking to the account resolution of the           //
10 // detector and coulomb effects.                     //
11 //                                                   //
12 ///////////////////////////////////////////////////////
13
14 #include "AliHBTFunction.h"
15
16 class AliHBTCorrectedCorrelFctn: public AliHBTCorrelFunction
17 {
18   public:
19     AliHBTCorrectedCorrelFctn();
20     virtual ~AliHBTCorrectedCorrelFctn(){}
21
22
23     void Smear(AliHBTPair* pair,AliHBTPair& smeared);
24     void Smear(AliVAODParticle* part, AliVAODParticle* smeared);
25
26     Double_t GetCoulombCorrection(AliHBTPair* /*pair*/){return 1.0;}
27
28   
29   protected:
30
31     //Parameters of Pt RMS
32     //linear dependence dPt/Pt from Pt itself 
33     Float_t fDPtOverPtA; //A of dPt/Pt 
34     Float_t fDPtOverPtB; //A of dPt/Pt 
35     Float_t fDPtOverPtAlpha; //A of dPt/Pt 
36     Float_t fDPtOverPtC; //A of dPt/Pt 
37     
38     //We assume that RMS of Theta and Phisangle depends on Pt Like A+B*(Pt)^Alpha
39     //Idea copied from Star HBT Maker (Fabrice Retiere)
40     //Parameters comes from Monte Carlo Resolution Analysis
41
42     Float_t fThetaA; //"A" parameter of theta RMS dependence
43     Float_t fThetaB; //"B" parameter of theta RMS dependence
44     Float_t fThetaAlpha; //"Alpha" parameter (power) of theta RMS dependence
45     Float_t fThetaC; //"C" parameter of theta RMS dependence
46
47     Float_t fPhiA;//"A" parameter of phi RMS dependence
48     Float_t fPhiB;//"B" parameter of phi RMS dependence
49     Float_t fPhiAlpha;//"Alpha" parameter (power) of phi RMS dependence
50     Float_t fPhiC;//"C" parameter of phi RMS dependence
51
52     ClassDef(AliHBTCorrectedCorrelFctn,1)
53 };
54
55
56 class AliHBTCorrectQInvCorrelFctn: public AliHBTOnePairFctn1D, public AliHBTCorrectedCorrelFctn
57 {
58   public:
59     AliHBTCorrectQInvCorrelFctn(const char* name = "qinvcorrectedCF", 
60                                 const char* title= "Corrected Q_{inv} Correlation Fonction");
61
62     AliHBTCorrectQInvCorrelFctn(const char* name, const char* title,
63                     Int_t nbins, Float_t maxXval, Float_t minXval);
64
65     AliHBTCorrectQInvCorrelFctn(TH1D* measqinv, 
66                                 const char* name = "qinvcorrectedCF", 
67                                 const char* title= "Corrected Q_{inv} Correlation Fonction");
68     AliHBTCorrectQInvCorrelFctn(const AliHBTCorrectQInvCorrelFctn& in);
69     
70     virtual ~AliHBTCorrectQInvCorrelFctn();
71     
72     void     SetInitialValues(Double_t lambda, Double_t r);
73     void     Init();
74     void     ProcessSameEventParticles(AliHBTPair* pair);//process particles from same event (real pair)
75     void     ProcessDiffEventParticles(AliHBTPair* pair);//process particles coming from different events (mixed pairs)
76     void     SetMeasuredHistogram(TH1D* meas){fMeasCorrelFctn = meas;}
77     TH1*     GetResult();//returns the result histogram
78     Double_t GetRadius()const{ return TMath::Sqrt(fR2);}//returns assumed radius
79     Double_t GetLambda()const{ return fLambda;}//retutrns assumed intercept parameter
80     void     SetRadiusConvergenceTreshold(Double_t ct){fRConvergenceTreshold=ct;}//if fitted and assumed R us different less then that number con
81     void     SetLambdaConvergenceTreshold(Double_t ct){fLambdaConvergenceTreshold=ct;}
82     Bool_t   IsConverged();
83     void     Fit();
84     Double_t GetFittedRadius();
85     Double_t GetFittedLambda();
86     void     WriteAll();
87     void     SetMeasNum(TH1D* measnum){fMeasNumer = measnum;}
88     void     SetMeasDen(TH1D* h){fMeasDenom = h;}
89     void     MakeMeasCF();
90     
91   protected:
92     virtual void BuildHistos(Int_t nbins, Float_t max, Float_t min);
93     virtual void BuildHistos() {AliHBTFunction1D::BuildHistos();}
94     Double_t GetValue(AliHBTPair * pair) const {return pair->GetQInv();}
95     Double_t GetModelValue(Double_t qinv);
96
97     //Our ideal numerator 
98     TH1D* fMeasCorrelFctn; //Measured correlation function
99     TH1D* fMeasNumer;//Measured numerator correlation function
100     TH1D* fMeasDenom;  //Measured denominator correlation function
101     
102     TH1D* fSmearedNumer; //! Numerator of smeard q
103     TH1D* fSmearedDenom; //! Denominator of smeard q
104     
105     Double_t fR2;//square of radius
106     Double_t fLambda;//Interception parameter
107
108     Double_t fFittedR;//fitted radius
109     Double_t fFittedLambda;//fitted Interception parameter
110         
111     Float_t  fRConvergenceTreshold;//fRConvergenceTreshold
112     Float_t  fLambdaConvergenceTreshold;//fLambdaConvergenceTreshold
113     
114   private:
115     ClassDef(AliHBTCorrectQInvCorrelFctn,1)
116 };
117
118 inline Double_t AliHBTCorrectQInvCorrelFctn::GetModelValue(Double_t qinv)
119 {
120   //factor 0.038936366329 conected with units change GeV<->SI
121   return 1.0 + fLambda*TMath::Exp(-fR2*qinv*qinv/0.038936366329);
122 }
123
124 #endif