]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FLOW/AliFlowCommon/AliFlowAnalysisWithMixedHarmonics.h
5b652af0231d11c742be2254c4044b966fdda435
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowCommon / AliFlowAnalysisWithMixedHarmonics.h
1 /* 
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. 
3  * See cxx source for full Copyright notice 
4  * $Id$ 
5  */
6
7 /********************************************************** 
8  * In this class azimuthal correlators in mixed harmonics *
9  * are implemented in terms of Q-vectors. This approach   *
10  * doesn't require evaluation of nested loops. This class *
11  * can be used to:                                        *
12  *                                                        *  
13  *  a) Extract subdominant harmonics (like v1 and v4);    *
14  *  b) Study strong parity violation.                     * 
15  *                                                        * 
16  * Author: Ante Bilandzic (abilandzic@gmail.com)          *
17  *********************************************************/ 
18
19 #ifndef ALIFLOWANALYSISWITHMIXEDHARMONICS_H
20 #define ALIFLOWANALYSISWITHMIXEDHARMONICS_H
21
22 #include "AliFlowCommonConstants.h" // needed as include
23 #include "TMatrixD.h"
24
25 class TDirectoryFile;
26 class TList;
27 class TFile;
28 class TH1F;
29 class TH1D;
30 class TH2;
31 class TH2D;
32 class TProfile;
33 class TProfile2D;
34
35 class AliFlowEventSimple;
36 class AliFlowCommonHist;
37 class AliFlowCommonHistResults;
38
39 //================================================================================================================
40
41 class AliFlowAnalysisWithMixedHarmonics
42 {
43  public:
44   AliFlowAnalysisWithMixedHarmonics();
45   virtual ~AliFlowAnalysisWithMixedHarmonics(); 
46   // 0.) Methods called in the constructor:
47   // 1.) Method Init() and methods called within Init():
48   virtual void Init();
49     virtual void CrossCheckSettings();
50     virtual void AccessConstants();
51     virtual void BookAndNestAllLists();
52     virtual void BookProfileHoldingSettings();
53     virtual void BookCommonHistograms();
54     virtual void BookAllEventByEventQuantities();
55     virtual void BookAllAllEventQuantities();
56     virtual void BookAndFillWeightsHistograms();
57   // 2.) Method Make() and methods called within Make():
58   virtual void Make(AliFlowEventSimple *anEvent);
59     virtual void CheckPointersUsedInMake();
60     virtual void Calculate3pCorrelator();
61     virtual void CalculateNonIsotropicTerms();
62     virtual void ResetEventByEventQuantities();
63   // 3.) Method Finish() and methods called within Finish():
64   virtual void Finish();  
65     virtual void CheckPointersUsedInFinish(); 
66     virtual void AccessSettings();       
67     virtual void FinalizeNonIsotropicTerms();       
68     virtual void CorrectForDetectorEffects();
69     virtual void QuantifyBiasFromDetectorEffects();
70   // 4.) Method GetOutputHistograms and method called within it:
71   virtual void GetOutputHistograms(TList *outputListHistos);
72     virtual void GetPointersForBaseHistograms();
73     virtual void GetPointersForCommonHistograms();
74     virtual void GetPointersForAllEventProfiles();
75     virtual void GetPointersForResultsHistograms();
76   // 5.) Other methods:   
77   virtual void WriteHistograms(TString outputFileName);
78   virtual void WriteHistograms(TDirectoryFile *outputFileName);  
79   // 6.) Setters and getters:
80   void SetHistList(TList* const hl) {this->fHistList = hl;}
81   TList* GetHistList() const {return this->fHistList;}  
82   void SetHistListName(const char *hln) {this->fHistListName->Append(*hln);}; 
83   TString *GetHistListName() const {return this->fHistListName;};
84   void SetAnalysisLabel(const char *al) {this->fAnalysisLabel->Append(*al);}; 
85   TString *GetAnalysisLabel() const {return this->fAnalysisLabel;};
86   void SetAnalysisSettings(TProfile* const as) {this->fAnalysisSettings = as;};
87   TProfile* GetAnalysisSettings() const {return this->fAnalysisSettings;};
88   void SetCorrelatorInteger(Int_t const ci) {this->fCorrelatorInteger = ci;};
89   Int_t GetCorrelatorInteger() const {return this->fCorrelatorInteger;}; 
90   void SetNoOfMultipicityBins(Int_t const nomb) {this->fNoOfMultipicityBins = nomb;};
91   Int_t GetNoOfMultipicityBins() const {return this->fNoOfMultipicityBins;};   
92   void SetMultipicityBinWidth(Double_t const mbw) {this->fMultipicityBinWidth = mbw;};
93   Double_t GetMultipicityBinWidth() const {return this->fMultipicityBinWidth;};   
94   void SetMinMultiplicity(Double_t const mm) {this->fMinMultiplicity = mm;};
95   Double_t GetMinMultiplicity() const {return this->fMinMultiplicity;}; 
96   void SetCorrectForDetectorEffects(Bool_t const cfde) {this->fCorrectForDetectorEffects = cfde;};
97   Bool_t GetCorrectForDetectorEffects() const {return this->fCorrectForDetectorEffects;}; 
98   void SetCommonHists(AliFlowCommonHist* const ch) {this->fCommonHists = ch;};
99   AliFlowCommonHist* GetCommonHists() const {return this->fCommonHists;};
100   void SetWeightsList(TList* const wl) {this->fWeightsList = (TList*)wl->Clone();}
101   TList* GetWeightsList() const {return this->fWeightsList;}  
102   void SetUsePhiWeights(Bool_t const uPhiW) {this->fUsePhiWeights = uPhiW;};
103   Bool_t GetUsePhiWeights() const {return this->fUsePhiWeights;};
104   void SetUsePtWeights(Bool_t const uPtW) {this->fUsePtWeights = uPtW;};
105   Bool_t GetUsePtWeights() const {return this->fUsePtWeights;};
106   void SetUseEtaWeights(Bool_t const uEtaW) {this->fUseEtaWeights = uEtaW;};
107   Bool_t GetUseEtaWeights() const {return this->fUseEtaWeights;};
108   void SetUseParticleWeights(TProfile* const uPW) {this->fUseParticleWeights = uPW;};
109   TProfile* GetUseParticleWeights() const {return this->fUseParticleWeights;};
110   void SetPhiWeights(TH1F* const histPhiWeights) {this->fPhiWeights = histPhiWeights;};
111   TH1F* GetPhiWeights() const {return this->fPhiWeights;};
112   void SetPtWeights(TH1D* const histPtWeights) {this->fPtWeights = histPtWeights;};
113   TH1D* GetPtWeights() const {return this->fPtWeights;};
114   void SetEtaWeights(TH1D* const histEtaWeights) {this->fEtaWeights = histEtaWeights;};
115   TH1D* GetEtaWeights() const {return this->fEtaWeights;};
116   void SetProfileList(TList* const plist) {this->fProfileList = plist;}
117   TList* GetProfileList() const {return this->fProfileList;}  
118   void Set3pCorrelatorPro(TProfile* const s3pPro) {this->f3pCorrelatorPro = s3pPro;};
119   TProfile* Get3pCorrelatorPro() const {return this->f3pCorrelatorPro;};
120   void SetNonIsotropicTermsPro(TProfile* const nitPro) {this->fNonIsotropicTermsPro = nitPro;};
121   TProfile* GetNonIsotropicTermsPro() const {return this->fNonIsotropicTermsPro;};
122   void Set3pCorrelatorVsMPro(TProfile* const s3pVsMPro) {this->f3pCorrelatorVsMPro = s3pVsMPro;};
123   TProfile* Get3pCorrelatorVsMPro() const {return this->f3pCorrelatorVsMPro;};
124   void SetNonIsotropicTermsVsMPro(TProfile2D* const nitVsMPro) {this->fNonIsotropicTermsVsMPro = nitVsMPro;};
125   TProfile2D* GetNonIsotropicTermsVsMPro() const {return this->fNonIsotropicTermsVsMPro;};
126   void SetResultsList(TList* const rlist) {this->fResultsList = rlist;}
127   TList* GetResultsList() const {return this->fResultsList;}  
128   void Set3pCorrelatorHist(TH1D* const s3pcHist) {this->f3pCorrelatorHist = s3pcHist;};
129   TH1D* Get3pCorrelatorHist() const {return this->f3pCorrelatorHist;};
130   void SetDetectorBiasHist(TH1D* const dbHist) {this->fDetectorBiasHist = dbHist;};
131   TH1D* GetDetectorBiasHist() const {return this->fDetectorBiasHist;};  
132   void SetNonIsotropicTermsHist(TH1D* const nitHist) {this->fNonIsotropicTermsHist = nitHist;};
133   TH1D* GetNonIsotropicTermsHist() const {return this->fNonIsotropicTermsHist;};  
134   void Set3pCorrelatorVsMHist(TH1D* const s3pcVsMHist) {this->f3pCorrelatorVsMHist = s3pcVsMHist;};
135   TH1D* Get3pCorrelatorVsMHist() const {return this->f3pCorrelatorVsMHist;};
136   void SetDetectorBiasVsMHist(TH1D* const dbVsMHist) {this->fDetectorBiasVsMHist = dbVsMHist;};
137   TH1D* GetDetectorBiasVsMHist() const {return this->fDetectorBiasVsMHist;};  
138   void SetNonIsotropicTermsVsMHist(TH2D* const nitVsMHist) {this->fNonIsotropicTermsVsMHist = nitVsMHist;};
139   TH2D* GetNonIsotropicTermsVsMHist() const {return this->fNonIsotropicTermsVsMHist;};
140   
141  private:
142   AliFlowAnalysisWithMixedHarmonics(const AliFlowAnalysisWithMixedHarmonics& afawQc);
143   AliFlowAnalysisWithMixedHarmonics& operator=(const AliFlowAnalysisWithMixedHarmonics& afawQc); 
144   // 0.) Base:
145   TList *fHistList; // base list to hold all output objects
146   TString *fHistListName; // name of base list
147   TString *fAnalysisLabel; // analysis label 
148   TProfile *fAnalysisSettings; // profile to hold analysis settings
149   Int_t fCorrelatorInteger; // integer n in cos[n(2phi1-phi2-phi3)]
150   Int_t fNoOfMultipicityBins; // number of multiplicity bins
151   Double_t fMultipicityBinWidth; // width of multiplicity bin
152   Double_t fMinMultiplicity; // minimal multiplicity
153   Bool_t fCorrectForDetectorEffects; // correct 3-p correlator for detector effects
154   // 1.) Common:
155   AliFlowCommonHist *fCommonHists; // common control histograms (filled only with events with 3 or more tracks for 3-p correlators) 
156   Int_t fnBinsPhi; // number of phi bins
157   Double_t fPhiMin; // minimum phi   
158   Double_t fPhiMax; // maximum phi 
159   Double_t fPhiBinWidth; // bin width for phi histograms  
160   Int_t fnBinsPt; // number of pt bins
161   Double_t fPtMin; // minimum pt   
162   Double_t fPtMax; // maximum pt  
163   Double_t fPtBinWidth; // bin width for pt histograms  
164   Int_t fnBinsEta; // number of eta bins
165   Double_t fEtaMin; // minimum eta   
166   Double_t fEtaMax; // maximum eta
167   Double_t fEtaBinWidth; // bin width for eta histograms 
168   // 2a.) Particle weights:
169   TList *fWeightsList; // list to hold all histograms with particle weights: fUseParticleWeights, fPhiWeights, fPtWeights and fEtaWeights
170   Bool_t fUsePhiWeights; // use phi weights
171   Bool_t fUsePtWeights; // use pt weights
172   Bool_t fUseEtaWeights; // use eta weights
173   TProfile *fUseParticleWeights; // profile with three bins to hold values of fUsePhiWeights, fUsePtWeights and fUseEtaWeights
174   TH1F *fPhiWeights; // histogram holding phi weights
175   TH1D *fPtWeights; // histogram holding phi weights
176   TH1D *fEtaWeights; // histogram holding phi weights 
177   // 3.) Event-by-event quantities:
178   TMatrixD *fReQnk; // fReQ[n][k] = Re[Q_{n,k}] = sum_{i=1}^{M} w_{i}^{k} cos(n*phi_{i})
179   TMatrixD *fImQnk; // fImQ[n][k] = Im[Q_{n,k}] = sum_{i=1}^{M} w_{i}^{k} sin(n*phi_{i})
180   TMatrixD *fSpk; // fS[p][k] = S_{p,k} = (sum_{i=1}^{M} w_{i}^{k})^{p+1} // note p+1 in the power to use 0th index in p in non-trivial way
181   TH1D *f3pCorrelatorEBE; // 3-p correlator <cos[n(2phi1-phi2-phi3)]> for single event
182   TH1D *fNonIsotropicTermsEBE; // correction terms to 3-p correlator <cos[n(2phi1-phi2-phi3)]> for single event
183   // 4.) Profiles:
184   TList *fProfileList; // list holding all all-event profiles 
185   TProfile *f3pCorrelatorPro; // 3-p correlator <<cos[n(2phi1-phi2-phi3)]>> for all events (with wrong errors)
186   TProfile *fNonIsotropicTermsPro; // correction terms to 3-p correlator <cos[n(2phi1-phi2-phi3)]> for all events (with wrong errors)
187   TProfile *f3pCorrelatorVsMPro; // 3-p correlator <<cos[n(2phi1-phi2-phi3)]>> for all events (with wrong errors) versus multiplicity
188   TProfile2D *fNonIsotropicTermsVsMPro; // correction terms to <cos[n(2phi1-phi2-phi3)]> for all events (with wrong errors) versus multiplicity
189   // 5.) Final results:
190   TList *fResultsList; // list holding objects with final results 
191   TH1D *f3pCorrelatorHist; // 3-p correlator <<cos[n(2phi1-phi2-phi3)]>> for all events (with correct errors)
192   TH1D *fDetectorBiasHist; // bias comming from detector inefficiencies to 3-p correlator <<cos[n(2phi1-phi2-phi3)]>> (in %)
193   TH1D *fNonIsotropicTermsHist; // correction terms to 3-p correlator <cos[n(2phi1-phi2-phi3)]> for all events (with correct errors)
194   TH1D *f3pCorrelatorVsMHist; // 3-p correlator <<cos[n(2phi1-phi2-phi3)]>> for all events (with correct errors) versus multiplicity
195   TH1D *fDetectorBiasVsMHist; // bias comming from detector inefficiencies to 3-p correlator <<cos[n(2phi1-phi2-phi3)]>> (in %) versus multiplicity
196   TH2D *fNonIsotropicTermsVsMHist; // correction terms to <cos[n(2phi1-phi2-phi3)]> for all events (with correct errors) versus multiplicity
197   
198   ClassDef(AliFlowAnalysisWithMixedHarmonics, 0);
199
200 };
201
202 //================================================================================================================
203
204 #endif
205
206
207
208
209