2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved.
3 * See cxx source for full Copyright notice
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 *
13 * a) Extract subdominant harmonics (like v1 and v4); *
14 * b) Study flow of two-particle resonances; *
15 * c) Study strong parity violation. *
17 * Author: Ante Bilandzic (abilandzic@gmail.com) *
18 *********************************************************/
20 #ifndef ALIFLOWANALYSISWITHMIXEDHARMONICS_H
21 #define ALIFLOWANALYSISWITHMIXEDHARMONICS_H
23 #include "AliFlowCommonConstants.h" // needed as include
35 class AliFlowEventSimple;
36 class AliFlowCommonHist;
37 class AliFlowCommonHistResults;
39 //================================================================================================================
41 class AliFlowAnalysisWithMixedHarmonics
44 AliFlowAnalysisWithMixedHarmonics();
45 virtual ~AliFlowAnalysisWithMixedHarmonics();
46 // 0.) Methods called in the constructor:
47 virtual void InitializeArrays();
49 // 1.) Method Init() and methods called within Init():
51 virtual void CrossCheckSettings();
52 virtual void AccessConstants();
53 virtual void BookAndNestAllLists();
54 virtual void BookProfileHoldingSettings();
55 virtual void BookCommonHistograms();
56 virtual void BookAllEventByEventQuantities();
57 virtual void BookAllAllEventQuantities();
58 virtual void BookDefault(); // book histos and profiles without any binning in multiplicity, pt or eta
59 virtual void BookVsM();
60 virtual void BookDifferential();
61 virtual void BookAndFillWeightsHistograms();
62 virtual void StoreHarmonic();
64 // 2.) Method Make() and methods called within Make():
65 virtual void Make(AliFlowEventSimple *anEvent);
66 virtual void CheckPointersUsedInMake();
67 virtual void Calculate3pCorrelator();
68 virtual void CalculateNonIsotropicTerms();
69 virtual void CalculateDifferential3pCorrelator(Double_t &gIntegratedValue);
71 virtual void ResetEventByEventQuantities();
73 // 3.) Method Finish() and methods called within Finish():
74 virtual void Finish();
75 virtual void AccessSettings();
76 virtual void CheckPointersUsedInFinish();
77 virtual void CorrectForDetectorEffects();
78 virtual void CorrectForDetectorEffectsVsM();
79 virtual void PrintOnTheScreen();
81 // 4.) Method GetOutputHistograms and method called within it:
82 virtual void GetOutputHistograms(TList *outputListHistos);
83 virtual void GetPointersForBaseHistograms();
84 virtual void GetPointersForCommonHistograms();
85 virtual void GetPointersForAllEventProfiles();
86 virtual void GetPointersForResultsHistograms();
89 virtual void WriteHistograms(TString outputFileName);
90 virtual void WriteHistograms(TDirectoryFile *outputFileName);
92 // 6.) Setters and getters:
93 void SetHistList(TList* const hl) {this->fHistList = hl;}
94 TList* GetHistList() const {return this->fHistList;}
95 void SetHistListName(const char *hln) {this->fHistListName->Append(*hln);};
96 TString *GetHistListName() const {return this->fHistListName;};
97 void SetHarmonic(Int_t const harmonic) {this->fHarmonic = harmonic;};
98 Int_t GetHarmonic() const {return this->fHarmonic;};
99 void SetAnalysisLabel(const char *al) {this->fAnalysisLabel->Append(*al);};
100 TString *GetAnalysisLabel() const {return this->fAnalysisLabel;};
101 void SetAnalysisSettings(TProfile* const as) {this->fAnalysisSettings = as;};
102 TProfile* GetAnalysisSettings() const {return this->fAnalysisSettings;};
103 void SetNoOfMultipicityBins(Int_t const nomb) {this->fNoOfMultipicityBins = nomb;};
104 Int_t GetNoOfMultipicityBins() const {return this->fNoOfMultipicityBins;};
105 void SetMultipicityBinWidth(Double_t const mbw) {this->fMultipicityBinWidth = mbw;};
106 Double_t GetMultipicityBinWidth() const {return this->fMultipicityBinWidth;};
107 void SetMinMultiplicity(Double_t const mm) {this->fMinMultiplicity = mm;};
108 Double_t GetMinMultiplicity() const {return this->fMinMultiplicity;};
109 void SetOppositeChargesPOI(Bool_t const ocp) {this->fOppositeChargesPOI = ocp;};
110 Bool_t GetOppositeChargesPOI() const {return this->fOppositeChargesPOI;};
111 void SetEvaluateDifferential3pCorrelator(Bool_t const ed3pc) {this->fEvaluateDifferential3pCorrelator = ed3pc;};
112 Bool_t GetEvaluateDifferential3pCorrelator() const {return this->fEvaluateDifferential3pCorrelator;};
113 void SetCorrectForDetectorEffects(Bool_t const cfde) {this->fCorrectForDetectorEffects = cfde;};
114 Bool_t GetCorrectForDetectorEffects() const {return this->fCorrectForDetectorEffects;};
115 void SetPrintOnTheScreen(Bool_t const pots) {this->fPrintOnTheScreen = pots;};
116 Bool_t GetPrintOnTheScreen() const {return this->fPrintOnTheScreen;};
117 void SetCalculateVsM(Bool_t const cvm) {this->fCalculateVsM = cvm;};
118 Bool_t GetCalculateVsM() const {return this->fCalculateVsM;};
119 void SetShowBinLabelsVsM(Bool_t const sblvm) {this->fShowBinLabelsVsM = sblvm;};
120 Bool_t GetShowBinLabelsVsM() const {return this->fShowBinLabelsVsM;};
121 void SetCommonHists(AliFlowCommonHist* const ch) {this->fCommonHists = ch;};
122 AliFlowCommonHist* GetCommonHists() const {return this->fCommonHists;};
123 void SetWeightsList(TList* const wl) {this->fWeightsList = (TList*)wl->Clone();}
124 TList* GetWeightsList() const {return this->fWeightsList;}
125 void SetUsePhiWeights(Bool_t const uPhiW) {this->fUsePhiWeights = uPhiW;};
126 Bool_t GetUsePhiWeights() const {return this->fUsePhiWeights;};
127 void SetUsePtWeights(Bool_t const uPtW) {this->fUsePtWeights = uPtW;};
128 Bool_t GetUsePtWeights() const {return this->fUsePtWeights;};
129 void SetUseEtaWeights(Bool_t const uEtaW) {this->fUseEtaWeights = uEtaW;};
130 Bool_t GetUseEtaWeights() const {return this->fUseEtaWeights;};
131 void SetUseParticleWeights(TProfile* const uPW) {this->fUseParticleWeights = uPW;};
132 TProfile* GetUseParticleWeights() const {return this->fUseParticleWeights;};
133 void SetPhiWeights(TH1F* const histPhiWeights) {this->fPhiWeights = histPhiWeights;};
134 TH1F* GetPhiWeights() const {return this->fPhiWeights;};
135 void SetPtWeights(TH1D* const histPtWeights) {this->fPtWeights = histPtWeights;};
136 TH1D* GetPtWeights() const {return this->fPtWeights;};
137 void SetEtaWeights(TH1D* const histEtaWeights) {this->fEtaWeights = histEtaWeights;};
138 TH1D* GetEtaWeights() const {return this->fEtaWeights;};
139 void SetProfileList(TList* const plist) {this->fProfileList = plist;}
140 TList* GetProfileList() const {return this->fProfileList;}
141 void Set3pCorrelatorPro(TProfile* const s3pPro) {this->f3pCorrelatorPro = s3pPro;};
142 TProfile* Get3pCorrelatorPro() const {return this->f3pCorrelatorPro;};
143 void SetNonIsotropicTermsPro(TProfile* const nitPro) {this->fNonIsotropicTermsPro = nitPro;};
144 TProfile* GetNonIsotropicTermsPro() const {return this->fNonIsotropicTermsPro;};
145 void Set3pCorrelatorVsMPro(TProfile* const s3pVsMPro) {this->f3pCorrelatorVsMPro = s3pVsMPro;};
146 TProfile* Get3pCorrelatorVsMPro() const {return this->f3pCorrelatorVsMPro;};
147 void Set3pPOICorrelatorVsM(TProfile* const s3pPOIVsM) {this->f3pPOICorrelatorVsM = s3pPOIVsM;};
148 TProfile* Get3pPOICorrelatorVsM() const {return this->f3pPOICorrelatorVsM;};
149 void SetNonIsotropicTermsVsMPro(TProfile2D* const nitVsMPro) {this->fNonIsotropicTermsVsMPro = nitVsMPro;};
150 TProfile2D* GetNonIsotropicTermsVsMPro() const {return this->fNonIsotropicTermsVsMPro;};
151 void SetResultsList(TList* const rlist) {this->fResultsList = rlist;}
152 TList* GetResultsList() const {return this->fResultsList;}
153 void Set3pCorrelatorHist(TH1D* const s3pHist) {this->f3pCorrelatorHist = s3pHist;};
154 TH1D* Get3pCorrelatorHist() const {return this->f3pCorrelatorHist;};
155 void Set3pCorrelatorVsMHist(TH1D* const s3pVsMHist) {this->f3pCorrelatorVsMHist = s3pVsMHist;};
156 TH1D* Get3pCorrelatorVsMHist() const {return this->f3pCorrelatorVsMHist;};
157 void SetDetectorBiasHist(TH1D* const dbHist) {this->fDetectorBiasHist = dbHist;};
158 TH1D* GetDetectorBiasHist() const {return this->fDetectorBiasHist;};
159 void SetDetectorBiasVsMHist(TH1D* const dbVsMHist) {this->fDetectorBiasVsMHist = dbVsMHist;};
160 TH1D* GetDetectorBiasVsMHist() const {return this->fDetectorBiasVsMHist;};
161 void Set3pCorrelatorVsPtSumDiffPro(TProfile* const s3pcvpsd, Int_t const sd) {this->f3pCorrelatorVsPtSumDiffPro[sd] = s3pcvpsd;};
162 TProfile* Get3pCorrelatorVsPtSumDiffPro(Int_t sd) const {return this->f3pCorrelatorVsPtSumDiffPro[sd];};
163 void Set3pCorrelatorVsEtaSumDiffPro(TProfile* const s3pcvpsd, Int_t const sd) {this->f3pCorrelatorVsEtaSumDiffPro[sd] = s3pcvpsd;};
164 TProfile* Get3pCorrelatorVsEtaSumDiffPro(Int_t sd) const {return this->f3pCorrelatorVsEtaSumDiffPro[sd];};
166 void Set2pCorrelatorHist(TH1D* const s2pHist) {this->f2pCorrelatorHist = s2pHist;};
167 TH1D* Get2pCorrelatorHist() const {return this->f2pCorrelatorHist;};
170 AliFlowAnalysisWithMixedHarmonics(const AliFlowAnalysisWithMixedHarmonics& afawQc);
171 AliFlowAnalysisWithMixedHarmonics& operator=(const AliFlowAnalysisWithMixedHarmonics& afawQc);
174 TList *fHistList; // base list to hold all output objects
175 TString *fHistListName; // name of base list
176 Int_t fHarmonic; // harmonic n in cos[n*(phi1+phi2-2phi3)] and cos[n*(psi1+psi2-2phi3)]
177 TString *fAnalysisLabel; // analysis label
178 TProfile *fAnalysisSettings; // profile to hold analysis settings
179 Int_t fNoOfMultipicityBins; // number of multiplicity bins
180 Double_t fMultipicityBinWidth; // width of multiplicity bin
181 Double_t fMinMultiplicity; // minimal multiplicity
182 Bool_t fOppositeChargesPOI; // two POIs, psi1 and psi2, in correlator <<cos[psi1+psi2-2phi3)]>> will be taken with opposite charges
183 Bool_t fEvaluateDifferential3pCorrelator; // evaluate <<cos[psi1+psi2-2phi3)]>>, where psi1 and psi2 are two POIs
184 Bool_t fCorrectForDetectorEffects; // correct 3-p correlator for detector effects
185 Bool_t fPrintOnTheScreen; // print or not the final results on the screen
186 Bool_t fCalculateVsM; // calculate correlators vs multiplicity
187 Bool_t fShowBinLabelsVsM; // in histograms holding results vs multiplicity show bin labels in the format M_lowEdge \leq M < M_upperEdge
190 AliFlowCommonHist *fCommonHists; // common control histograms (filled only with events with 3 or more tracks for 3-p correlators)
191 Int_t fnBinsPhi; // number of phi bins
192 Double_t fPhiMin; // minimum phi
193 Double_t fPhiMax; // maximum phi
194 Double_t fPhiBinWidth; // bin width for phi histograms
195 Int_t fnBinsPt; // number of pt bins
196 Double_t fPtMin; // minimum pt
197 Double_t fPtMax; // maximum pt
198 Double_t fPtBinWidth; // bin width for pt histograms
199 Int_t fnBinsEta; // number of eta bins
200 Double_t fEtaMin; // minimum eta
201 Double_t fEtaMax; // maximum eta
202 Double_t fEtaBinWidth; // bin width for eta histograms
204 // 2a.) Particle weights:
205 TList *fWeightsList; // list to hold all histograms with particle weights: fUseParticleWeights, fPhiWeights, fPtWeights and fEtaWeights
206 Bool_t fUsePhiWeights; // use phi weights
207 Bool_t fUsePtWeights; // use pt weights
208 Bool_t fUseEtaWeights; // use eta weights
209 TProfile *fUseParticleWeights; // profile with three bins to hold values of fUsePhiWeights, fUsePtWeights and fUseEtaWeights
210 TH1F *fPhiWeights; // histogram holding phi weights
211 TH1D *fPtWeights; // histogram holding phi weights
212 TH1D *fEtaWeights; // histogram holding phi weights
214 // 3.) Event-by-event quantities:
215 TMatrixD *fReQnk; // fReQ[n][k] = Re[Q_{n,k}] = sum_{i=1}^{M} w_{i}^{k} cos(n*phi_{i})
216 TMatrixD *fImQnk; // fImQ[n][k] = Im[Q_{n,k}] = sum_{i=1}^{M} w_{i}^{k} sin(n*phi_{i})
217 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
218 TProfile *fRePEBE[2]; // real part of p_n vs [(p1+p2)/2,|p1-p2|]
219 TProfile *fImPEBE[2]; // imaginary part of p_n vs [(p1+p2)/2,|p1-p2|]
220 TProfile *fOverlapEBE[2][2]; // cos[n(psi-phi)] vs [(p1+p2)/2,|p1-p2|], where phi stands for 1st/2nd POI which is also RP
221 TProfile *fReEtaEBE[2]; // real part of p_n vs [(eta1+eta2)/2,|eta1-eta2|]
222 TProfile *fImEtaEBE[2]; // imaginary part of p_n vs [(eta1+eta2)/2,|eta1-eta2|]
223 TProfile *fOverlapEBE2[2][2]; // cos[n(psi-phi)] vs [(eta1+eta2)/2,|eta1-eta2|], where phi stands for 1st/2nd POI which is also RP
226 TList *fProfileList; // list holding all all-event profiles
227 TProfile *f3pCorrelatorPro; // 3-p correlator <<cos[n(phi1+phi2-2phi3)]>> (not corrected for detector effects)
228 TProfile *fNonIsotropicTermsPro; // non-isotropic terms in the decomposition of 3-p correlator <<cos[n(phi1+phi2-2phi3)]>>
229 TProfile *f3pCorrelatorVsMPro; // 3-p correlator <<cos[n(phi1+phi2-2phi3)]>> vs multiplicity
230 TProfile *f3pPOICorrelatorVsM; // 3-p correlator <<cos[n(psi1+psi2-2phi3)]>> vs multiplicity
231 TProfile2D *fNonIsotropicTermsVsMPro; // non-isotropic terms in the decomposition of <cos[n(phi1+phi2-2phi3))]> vs multiplicity
232 TProfile *f3pCorrelatorVsPtSumDiffPro[2]; // differential 3-p correlator <<cos[psi1+psi2-2phi3)]>> vs [(p1+p2)/2,|p1-p2|]
233 TProfile *f3pCorrelatorVsEtaSumDiffPro[2]; // differential 3-p correlator <<cos[psi1+psi2-2phi3)]>> vs [(eta1+eta2)/2,|eta1-eta2|]
235 // 5.) Final results:
236 TList *fResultsList; // list holding objects with final results
237 TH1D *f3pCorrelatorHist; // 3-p correlator <<cos[n(phi1+phi2-2phi3)]>> corrected for detector effects
238 TH1D *fDetectorBiasHist; // bias coming from detector inefficiencies to 3-p correlator <<cos[n(phi1+phi2-2phi3)]>> (in %)
239 TH1D *f3pCorrelatorVsMHist; // 3-p correlator <<cos[n(phi1+phi2-2phi3)]>> vs multiplicity corrected for detector effects
240 TH1D *fDetectorBiasVsMHist; // bias coming from detector inefficiencies to 3-p correlator <<cos[n(phi1+phi2-2phi3)]>> (in %) versus multiplicity
241 TH1D *f2pCorrelatorHist;//<<cos[(psi1-psi2)]>>
243 ClassDef(AliFlowAnalysisWithMixedHarmonics, 0);
247 //================================================================================================================