Add Reaction Plane aware analysis
[u/mrichter/AliRoot.git] / PWG2 / FEMTOSCOPY / AliFemto / AliFemtoBPLCMS3DCorrFctn.h
1 ///////////////////////////////////////////////////////////////////////////
2 //                                                                       //
3 // AliFemtoBPLCMS3DCorrFctn: a class to calculate 3D correlation         //
4 // for pairs of identical particles.                                     //
5 //                                                                       //
6 ///////////////////////////////////////////////////////////////////////////
7
8 #ifndef ALIFEMTOBPLCMS3DCORRFCTN_H
9 #define ALIFEMTOBPLCMS3DCORRFCTN_H
10
11 #include "AliFemtoCorrFctn.h"
12 //#include "AliFemtoCoulomb.h"
13 #include "AliFemtoPairCut.h"
14 //#include "AliFemtoHisto.h"
15 #include "TH3D.h"
16 //#include "AliFemtoSmearPair.h"
17
18 class AliFemtoBPLCMS3DCorrFctn : public AliFemtoCorrFctn {
19 public:
20   AliFemtoBPLCMS3DCorrFctn(char* title, const int& nbins, const float& QLo, const float& QHi);
21   AliFemtoBPLCMS3DCorrFctn(const AliFemtoBPLCMS3DCorrFctn& aCorrFctn);
22   virtual ~AliFemtoBPLCMS3DCorrFctn();
23
24   AliFemtoBPLCMS3DCorrFctn& operator=(const AliFemtoBPLCMS3DCorrFctn& aCorrFctn);
25
26   virtual AliFemtoString Report();
27   virtual void AddRealPair( AliFemtoPair* aPair);
28   virtual void AddMixedPair( AliFemtoPair* aPair);
29
30   virtual void Finish();
31
32   TH3D* Numerator();
33   TH3D* Denominator();
34   TH3D* Ratio();
35   TH3D* QinvHisto();
36
37   // here are get and set for the range over which the correlation function 
38   // is normalized (in Qinv).  The range is set to 0.15..0.18 in the constuctor
39   // by default, but the Set's below override this
40   void SetNormRangeLo(float qLo);
41   void SetNormRangeHi(float qHi);
42   float GetNormRangeLo() const;
43   float GetNormRangeHi() const;
44
45   void WriteOutHistos();
46   virtual TList* GetOutputList();
47
48   //  void SetCoulombCorrection(AliFemtoCoulomb* Correction);
49
50   void SetSpecificPairCut(AliFemtoPairCut* aCut);
51   void SetUseRPSelection(unsigned short aRPSel);
52
53   //  void SetSmearPair(AliFemtoSmearPair*);
54   void SetRout(double guess);
55   void SetRside(double guess);
56   void SetRlong(double guess);
57   void SetLambda(double guess);
58
59 private:
60   // here are a whole bunch of histos that get filled if we do resolution correction
61   TH3D* fIDNumHisto;        // true pairs numerator  
62   TH3D* fIDDenHisto;        // true pairs denominator
63   TH3D* fIDRatHisto;        // true pairs ratio      
64   // 
65   TH3D* fSMNumHisto;        // mixed pairs numerator  
66   TH3D* fSMDenHisto;        // mixed pairs denominator
67   TH3D* fSMRatHisto;        // mixed pairs ratio      
68   //
69   TH3D* fCorrectionHisto;   // correction histogram
70   TH3D* fCorrCFHisto;       // Corrected CF
71
72   TH3D* fNumerator;         // numerator
73   TH3D* fDenominator;       // denominator
74   //  TH3D* fUncorrectedDenominator;
75   TH3D* fRatio;             // ratio - the correlation function
76   TH3D* fQinvHisto;         // Qinv weights
77
78   // for resolution correction
79   //  AliFemtoSmearPair* fSmearPair; //!
80   double fLambda;           // lambda for smearing correction
81   double fRout2;            // Rout for smearing correction
82   double fRside2;           // Rside for smearing correction
83   double fRlong2;           // Rlong for smearing correction
84
85   AliFemtoPairCut* fPairCut;    //! this is a PairCut specific to THIS CorrFctn, not the Analysis
86
87   // upper and lower bounds of Qinv region where to do normalization
88   float fQinvNormLo;        // Lower bound of Qinv normalization range
89   float fQinvNormHi;        // Upper bound of Qinv normalization range
90
91   // and here are the number of pairs in that region...
92   unsigned long int fNumRealsNorm; // pairs in numerator in Qinv normalization range
93   unsigned long int fNumMixedNorm; // pairs in denominator in Qinv normalization range
94
95   unsigned short fUseRPSelection;  // The pair cut uses RP selection
96
97   //  AliFemtoCoulomb* fCorrection; //!
98   
99
100 #ifdef __ROOT__
101   ClassDef(AliFemtoBPLCMS3DCorrFctn, 1)
102 #endif
103 };
104
105 inline  TH3D* AliFemtoBPLCMS3DCorrFctn::Numerator(){return fNumerator;}
106 inline  TH3D* AliFemtoBPLCMS3DCorrFctn::Denominator(){return fDenominator;}
107 //inline  TH3D* AliFemtoBPLCMS3DCorrFctn::UncorrectedDenominator(){return fUncorrectedDenominator;}
108 inline  TH3D* AliFemtoBPLCMS3DCorrFctn::Ratio(){return fRatio;}
109 inline  TH3D* AliFemtoBPLCMS3DCorrFctn::QinvHisto(){return fQinvHisto;}
110 inline  void AliFemtoBPLCMS3DCorrFctn::SetNormRangeLo(float qLo){fQinvNormLo = qLo;}
111 inline  void AliFemtoBPLCMS3DCorrFctn::SetNormRangeHi(float qHi){fQinvNormHi = qHi;}
112 inline  float AliFemtoBPLCMS3DCorrFctn::GetNormRangeLo() const{return fQinvNormLo;}
113 inline  float AliFemtoBPLCMS3DCorrFctn::GetNormRangeHi() const{return fQinvNormHi;}
114 //inline  void AliFemtoBPLCMS3DCorrFctn::SetCoulombCorrection(AliFemtoCoulomb* Correction){fCorrection = Correction;}
115 inline  void AliFemtoBPLCMS3DCorrFctn::SetSpecificPairCut(AliFemtoPairCut* pc){fPairCut=pc;}
116 //inline  void AliFemtoBPLCMS3DCorrFctn::SetSmearPair(AliFemtoSmearPair* sp){fSmearPair = sp;}
117
118 inline  void AliFemtoBPLCMS3DCorrFctn::SetRout(double r){fRout2 = r*r;}
119 inline  void AliFemtoBPLCMS3DCorrFctn::SetRside(double r){fRside2 = r*r;}
120 inline  void AliFemtoBPLCMS3DCorrFctn::SetRlong(double r){fRlong2 = r*r;}
121 inline  void AliFemtoBPLCMS3DCorrFctn::SetLambda(double l){fLambda = l;}
122
123 #endif
124