]>
Commit | Line | Data |
---|---|---|
489d5531 | 1 | /************************************************************************* |
2 | * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
d66d46f7 | 14 | **************************************************************************/ |
15 | ||
489d5531 | 16 | /* $Id$ */ |
17 | ||
d66d46f7 | 18 | /********************************************************** |
19 | * In this class azimuthal correlators in mixed harmonics * | |
20 | * are implemented in terms of Q-vectors. This approach * | |
21 | * doesn't require evaluation of nested loops. This class * | |
22 | * can be used to: * | |
23 | * * | |
24 | * a) Extract subdominant harmonics (like v1 and v4); * | |
5c078806 | 25 | * b) Study flow of two-particle resonances; * |
26 | * c) Study strong parity violation. * | |
d66d46f7 | 27 | * * |
28 | * Author: Ante Bilandzic (abilandzic@gmail.com) * | |
489d5531 | 29 | *********************************************************/ |
30 | ||
31 | #define AliFlowAnalysisWithMixedHarmonics_cxx | |
32 | ||
33 | #include "Riostream.h" | |
34 | #include "AliFlowCommonConstants.h" | |
35 | #include "AliFlowCommonHist.h" | |
36 | #include "AliFlowCommonHistResults.h" | |
37 | ||
38 | #include "TMath.h" | |
39 | #include "TFile.h" | |
40 | #include "TList.h" | |
d66d46f7 | 41 | #include "TProfile.h" |
489d5531 | 42 | #include "TProfile2D.h" |
43 | ||
44 | #include "AliFlowEventSimple.h" | |
45 | #include "AliFlowTrackSimple.h" | |
46 | #include "AliFlowAnalysisWithMixedHarmonics.h" | |
47 | ||
48 | class TH1; | |
49 | class TList; | |
50 | ClassImp(AliFlowAnalysisWithMixedHarmonics) | |
51 | ||
d66d46f7 | 52 | //================================================================================================================ |
53 | ||
489d5531 | 54 | AliFlowAnalysisWithMixedHarmonics::AliFlowAnalysisWithMixedHarmonics(): |
d66d46f7 | 55 | fHistList(NULL), |
489d5531 | 56 | fHistListName(NULL), |
d66d46f7 | 57 | fAnalysisLabel(NULL), |
58 | fAnalysisSettings(NULL), | |
5c078806 | 59 | fCorrelatorInteger(1), |
d66d46f7 | 60 | fNoOfMultipicityBins(10), |
61 | fMultipicityBinWidth(2), | |
62 | fMinMultiplicity(1), | |
489d5531 | 63 | fCorrectForDetectorEffects(kTRUE), |
5c078806 | 64 | fPrintOnTheScreen(kTRUE), |
d66d46f7 | 65 | fCommonHists(NULL), |
489d5531 | 66 | fnBinsPhi(0), |
67 | fPhiMin(0), | |
68 | fPhiMax(0), | |
69 | fPhiBinWidth(0), | |
70 | fnBinsPt(0), | |
71 | fPtMin(0), | |
72 | fPtMax(0), | |
73 | fPtBinWidth(0), | |
74 | fnBinsEta(0), | |
75 | fEtaMin(0), | |
76 | fEtaMax(0), | |
d66d46f7 | 77 | fEtaBinWidth(0), |
489d5531 | 78 | fWeightsList(NULL), |
79 | fUsePhiWeights(kFALSE), | |
80 | fUsePtWeights(kFALSE), | |
81 | fUseEtaWeights(kFALSE), | |
82 | fUseParticleWeights(NULL), | |
83 | fPhiWeights(NULL), | |
84 | fPtWeights(NULL), | |
d66d46f7 | 85 | fEtaWeights(NULL), |
489d5531 | 86 | fReQnk(NULL), |
87 | fImQnk(NULL), | |
d66d46f7 | 88 | fSpk(NULL), |
ecac11c2 | 89 | fProfileList(NULL), |
d66d46f7 | 90 | f3pCorrelatorPro(NULL), |
91 | fNonIsotropicTermsPro(NULL), | |
92 | f3pCorrelatorVsMPro(NULL), | |
93 | fNonIsotropicTermsVsMPro(NULL), | |
94 | fResultsList(NULL), | |
95 | f3pCorrelatorHist(NULL), | |
96 | fDetectorBiasHist(NULL), | |
e558a733 | 97 | f3pCorrelatorVsMHist(NULL), |
5c078806 | 98 | fDetectorBiasVsMHist(NULL) |
489d5531 | 99 | { |
100 | // Constructor. | |
5c078806 | 101 | |
102 | // Base list to hold all output objects: | |
d66d46f7 | 103 | fHistList = new TList(); |
489d5531 | 104 | fHistListName = new TString("cobjMH"); |
105 | fHistList->SetName(fHistListName->Data()); | |
d66d46f7 | 106 | fHistList->SetOwner(kTRUE); |
107 | ||
489d5531 | 108 | // List to hold histograms with phi, pt and eta weights: |
d66d46f7 | 109 | fWeightsList = new TList(); |
110 | ||
ecac11c2 | 111 | // List to hold all all-event profiles: |
112 | fProfileList = new TList(); | |
113 | ||
489d5531 | 114 | // List to hold objects with final results: |
d66d46f7 | 115 | fResultsList = new TList(); |
5c078806 | 116 | |
117 | // Initialize all arrays: | |
118 | this->InitializeArrays(); | |
489d5531 | 119 | |
120 | } // AliFlowAnalysisWithMixedHarmonics::AliFlowAnalysisWithMixedHarmonics() | |
121 | ||
122 | //================================================================================================================ | |
123 | ||
124 | AliFlowAnalysisWithMixedHarmonics::~AliFlowAnalysisWithMixedHarmonics() | |
125 | { | |
126 | // Destructor. | |
127 | ||
128 | delete fHistList; | |
129 | ||
130 | } // end of AliFlowAnalysisWithMixedHarmonics::~AliFlowAnalysisWithMixedHarmonics() | |
131 | ||
132 | //================================================================================================================ | |
133 | ||
134 | void AliFlowAnalysisWithMixedHarmonics::Init() | |
d66d46f7 | 135 | { |
136 | // Initialize and book all objects. | |
137 | ||
138 | // a) Cross check if the user settings make sense before starting; | |
139 | // b) Access all common constants; | |
489d5531 | 140 | // c) Book and nest all lists in the base list fHistList; |
d66d46f7 | 141 | // d) Book common control histograms; |
142 | // e) Book all event-by-event quantities; | |
143 | // f) Book all all-event quantities; | |
5c078806 | 144 | // g) Book and fill histograms to hold phi, pt and eta weights; |
145 | ||
489d5531 | 146 | //save old value and prevent histograms from being added to directory |
147 | //to avoid name clashes in case multiple analaysis objects are used | |
148 | //in an analysis | |
149 | Bool_t oldHistAddStatus = TH1::AddDirectoryStatus(); | |
150 | TH1::AddDirectory(kFALSE); | |
151 | ||
5c078806 | 152 | TH1::SetDefaultSumw2(); |
153 | ||
489d5531 | 154 | this->CrossCheckSettings(); |
d66d46f7 | 155 | this->AccessConstants(); |
156 | this->BookAndNestAllLists(); | |
489d5531 | 157 | this->BookProfileHoldingSettings(); |
d66d46f7 | 158 | this->BookCommonHistograms(); |
159 | this->BookAllEventByEventQuantities(); | |
160 | this->BookAllAllEventQuantities(); | |
489d5531 | 161 | this->BookAndFillWeightsHistograms(); |
162 | ||
163 | TH1::AddDirectory(oldHistAddStatus); | |
5c078806 | 164 | |
489d5531 | 165 | } // end of void AliFlowAnalysisWithMixedHarmonics::Init() |
166 | ||
167 | //================================================================================================================ | |
168 | ||
169 | void AliFlowAnalysisWithMixedHarmonics::Make(AliFlowEventSimple* anEvent) | |
170 | { | |
171 | // Running over data only in this method. | |
d66d46f7 | 172 | |
5c078806 | 173 | // a) Check all pointers used in this method; |
174 | // b) Define local variables; | |
175 | // c) Fill common control histograms; | |
176 | // d) Loop over data and calculate e-b-e quantities Q_{n,k} and S_{p,k}; | |
177 | // e) Calculate 3-p azimuthal correlator and non-isotropic terms in terms of Q_{n,k} and S_{p,k}; | |
178 | // f) Calculate differential 3-p azimuthal correlator cos(2phi1-psi2-psi3) in terms of Q_{2n} and p_{n}: | |
179 | // g) Reset all event-by-event quantities. | |
d66d46f7 | 180 | |
5c078806 | 181 | // a) Check all pointers used in this method: |
d66d46f7 | 182 | this->CheckPointersUsedInMake(); |
183 | ||
5c078806 | 184 | // b) Define local variables: |
489d5531 | 185 | Double_t dPhi = 0.; // azimuthal angle in the laboratory frame |
186 | Double_t dPt = 0.; // transverse momentum | |
187 | Double_t dEta = 0.; // pseudorapidity | |
188 | Double_t wPhi = 1.; // phi weight | |
189 | Double_t wPt = 1.; // pt weight | |
d66d46f7 | 190 | Double_t wEta = 1.; // eta weight |
191 | AliFlowTrackSimple *aftsTrack = NULL; // simple track | |
192 | ||
5c078806 | 193 | // c) Fill common control histograms: |
d66d46f7 | 194 | fCommonHists->FillControlHistograms(anEvent); |
195 | ||
5c078806 | 196 | // d) Loop over data and calculate e-b-e quantities: |
489d5531 | 197 | Int_t nPrim = anEvent->NumberOfTracks(); // nPrim = total number of primary tracks, i.e. nPrim = nRP + nPOI + rest, where: |
198 | // nRP = # of particles used to determine the reaction plane ("Reference Particles"); | |
199 | // nPOI = # of particles of interest for a detailed flow analysis ("Particles of Interest"); | |
200 | // rest = # of particles which are not niether RPs nor POIs. | |
d66d46f7 | 201 | // Start loop over data: |
489d5531 | 202 | for(Int_t i=0;i<nPrim;i++) |
203 | { | |
204 | aftsTrack=anEvent->GetTrack(i); | |
205 | if(aftsTrack) | |
206 | { | |
207 | if(!(aftsTrack->InRPSelection() || aftsTrack->InPOISelection())) continue; // consider only tracks which are either RPs or POIs | |
208 | Int_t n = fCorrelatorInteger; // integer n in the correlator cos[n(2phi1-phi2-phi3)] | |
209 | if(aftsTrack->InRPSelection()) // checking RP condition: | |
210 | { | |
211 | dPhi = aftsTrack->Phi(); | |
212 | dPt = aftsTrack->Pt(); | |
213 | dEta = aftsTrack->Eta(); | |
214 | if(fUsePhiWeights && fPhiWeights && fnBinsPhi) // determine phi-weight for this particle: | |
215 | { | |
216 | wPhi = fPhiWeights->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*fnBinsPhi/TMath::TwoPi()))); | |
217 | } | |
218 | if(fUsePtWeights && fPtWeights && fnBinsPt) // determine pt-weight for this particle: | |
219 | { | |
220 | wPt = fPtWeights->GetBinContent(1+(Int_t)(TMath::Floor((dPt-fPtMin)/fPtBinWidth))); | |
221 | } | |
222 | if(fUseEtaWeights && fEtaWeights && fEtaBinWidth) // determine eta-weight for this particle: | |
223 | { | |
224 | wEta = fEtaWeights->GetBinContent(1+(Int_t)(TMath::Floor((dEta-fEtaMin)/fEtaBinWidth))); | |
225 | } | |
226 | // Calculate Re[Q_{m*n,k}] and Im[Q_{m*n,k}], (m = 1,2 and k = 0,1,2,3) for this event: | |
227 | for(Int_t m=0;m<2;m++) | |
228 | { | |
229 | for(Int_t k=0;k<4;k++) // to be improved (what is maximum k that I need?) | |
230 | { | |
231 | (*fReQnk)(m,k)+=pow(wPhi*wPt*wEta,k)*TMath::Cos((m+1)*n*dPhi); | |
232 | (*fImQnk)(m,k)+=pow(wPhi*wPt*wEta,k)*TMath::Sin((m+1)*n*dPhi); | |
233 | } | |
234 | } | |
235 | // Calculate partially S_{p,k} for this event (final calculation of S_{p,k} follows after the loop over data bellow): | |
236 | for(Int_t p=0;p<4;p++) // to be improved (what is maximum p that I need?) | |
237 | { | |
238 | for(Int_t k=0;k<4;k++) // to be improved (what is maximum k that I need?) | |
239 | { | |
240 | (*fSpk)(p,k)+=pow(wPhi*wPt*wEta,k); | |
241 | } | |
242 | } | |
5c078806 | 243 | } // end of if(aftsTrack->InRPSelection()) |
244 | // POIs: | |
245 | if(aftsTrack->InPOISelection()) // 1st POI | |
246 | { | |
247 | Double_t dPsi1 = aftsTrack->Phi(); | |
248 | Double_t dPt1 = aftsTrack->Pt(); | |
249 | for(Int_t j=i+1;j<nPrim;j++) | |
250 | { | |
251 | aftsTrack=anEvent->GetTrack(j); | |
252 | if(aftsTrack->InPOISelection()) // 2nd POI | |
253 | { | |
254 | Double_t dPsi2 = aftsTrack->Phi(); | |
255 | Double_t dPt2 = aftsTrack->Pt(); | |
256 | // Fill: | |
257 | fRePEBE[0]->Fill((dPt1+dPt2)/2.,TMath::Cos(n*(dPsi1+dPsi2)),1.); | |
258 | fImPEBE[0]->Fill((dPt1+dPt2)/2.,TMath::Sin(n*(dPsi1+dPsi2)),1.); | |
259 | fRePEBE[1]->Fill(TMath::Abs(dPt1-dPt2),TMath::Cos(n*(dPsi1+dPsi2)),1.); | |
260 | fImPEBE[1]->Fill(TMath::Abs(dPt1-dPt2),TMath::Sin(n*(dPsi1+dPsi2)),1.); | |
261 | } | |
262 | } | |
263 | } | |
489d5531 | 264 | } else // to if(aftsTrack) |
265 | { | |
266 | cout<<endl; | |
267 | cout<<" WARNING (MH): No particle! (i.e. aftsTrack is a NULL pointer in AFAWMH::Make().)"<<endl; | |
268 | cout<<endl; | |
269 | } | |
270 | } // end of for(Int_t i=0;i<nPrim;i++) | |
271 | ||
272 | // Calculate the final expressions for S_{p,k}: | |
273 | for(Int_t p=0;p<4;p++) // to be improved (what is maximum p that I need?) | |
274 | { | |
275 | for(Int_t k=0;k<4;k++) // to be improved (what is maximum that I need?) | |
276 | { | |
277 | (*fSpk)(p,k)=pow((*fSpk)(p,k),p+1); | |
278 | } | |
d66d46f7 | 279 | } |
280 | ||
5c078806 | 281 | // e) Calculate 3-p azimuthal correlator in terms of Q_{n,k} and S_{p,k}: |
d66d46f7 | 282 | if(anEvent->GetEventNSelTracksRP() >= 3) |
283 | { | |
284 | this->Calculate3pCorrelator(); | |
285 | } | |
286 | if(anEvent->GetEventNSelTracksRP() >= 0) // to be improved (is this correct if statement?) | |
287 | { | |
288 | this->CalculateNonIsotropicTerms(); | |
289 | } | |
290 | ||
5c078806 | 291 | // f) Calculate differential 3-p azimuthal correlator cos(2phi1-psi2-psi3) in terms of Q_{2n} and p_{n}: |
292 | this->CalculateDifferential3pCorrelator(); // to be improved - add relevant if statements for the min No of RPs and POIs | |
293 | ||
294 | // g) Reset all event-by-event quantities: | |
d66d46f7 | 295 | this->ResetEventByEventQuantities(); |
5c078806 | 296 | |
489d5531 | 297 | } // end of AliFlowAnalysisWithMixedHarmonics::Make(AliFlowEventSimple* anEvent) |
5c078806 | 298 | |
489d5531 | 299 | //================================================================================================================ |
300 | ||
301 | void AliFlowAnalysisWithMixedHarmonics::Finish() | |
302 | { | |
d66d46f7 | 303 | // Calculate the final results. |
304 | ||
305 | // a) Check all pointers used in this method; | |
306 | // b) Access settings for analysis with mixed harmonics; | |
5c078806 | 307 | // c) Correct for detector effects; |
308 | // d) Print on the screen the final results. | |
d66d46f7 | 309 | |
310 | this->CheckPointersUsedInFinish(); | |
311 | this->AccessSettings(); | |
e558a733 | 312 | if(fCorrectForDetectorEffects) |
313 | { | |
314 | this->CorrectForDetectorEffects(); | |
315 | this->CorrectForDetectorEffectsVsM(); | |
316 | } | |
5c078806 | 317 | if(fPrintOnTheScreen) this->PrintOnTheScreen(); |
489d5531 | 318 | |
319 | } // end of AliFlowAnalysisWithMixedHarmonics::Finish() | |
320 | ||
321 | //================================================================================================================ | |
322 | ||
323 | void AliFlowAnalysisWithMixedHarmonics::GetOutputHistograms(TList *outputListHistos) | |
324 | { | |
d66d46f7 | 325 | // Get pointers to all objects saved in the output file. |
326 | ||
ecac11c2 | 327 | // a) Get pointers for common control histograms. |
489d5531 | 328 | if(outputListHistos) |
329 | { | |
d66d46f7 | 330 | this->SetHistList(outputListHistos); |
331 | if(!fHistList) | |
332 | { | |
333 | cout<<endl; | |
334 | cout<<" WARNING (MH): fHistList is NULL in AFAWMH::GOH() !!!!"<<endl; | |
335 | cout<<endl; | |
336 | exit(0); | |
337 | } | |
ecac11c2 | 338 | this->GetPointersForBaseHistograms(); |
d66d46f7 | 339 | this->GetPointersForCommonHistograms(); |
ecac11c2 | 340 | this->GetPointersForAllEventProfiles(); |
489d5531 | 341 | this->GetPointersForResultsHistograms(); |
d66d46f7 | 342 | } else |
343 | { | |
344 | cout<<endl; | |
345 | cout<<" WARNING (MH): outputListHistos is NULL in AFAWMH::GOH() !!!!"<<endl; | |
346 | cout<<endl; | |
347 | exit(0); | |
348 | } | |
489d5531 | 349 | |
350 | } // end of void AliFlowAnalysisWithMixedHarmonics::GetOutputHistograms(TList *outputListHistos) | |
351 | ||
d66d46f7 | 352 | //================================================================================================================ |
353 | ||
ecac11c2 | 354 | void AliFlowAnalysisWithMixedHarmonics::GetPointersForBaseHistograms() |
355 | { | |
356 | // Get pointers to base histograms. | |
357 | ||
358 | TString analysisSettingsName = "fAnalysisSettings"; | |
359 | TProfile *analysisSettings = dynamic_cast<TProfile*>(fHistList->FindObject(analysisSettingsName.Data())); | |
360 | if(analysisSettings) | |
361 | { | |
362 | this->SetAnalysisSettings(analysisSettings); | |
363 | } else | |
364 | { | |
365 | cout<<endl; | |
366 | cout<<" WARNING (MH): analysisSettings is NULL in AFAWMH::GPFBH() !!!!"<<endl; | |
367 | cout<<endl; | |
368 | exit(0); | |
369 | } | |
370 | ||
371 | } // end of void AliFlowAnalysisWithMixedHarmonics::GetPointersForBaseHistograms() | |
372 | ||
373 | //================================================================================================================ | |
374 | ||
489d5531 | 375 | void AliFlowAnalysisWithMixedHarmonics::GetPointersForCommonHistograms() |
376 | { | |
377 | // Get pointers to common control histograms. | |
378 | ||
379 | TString commonHistsName = "AliFlowCommonHistMH"; | |
380 | AliFlowCommonHist *commonHist = dynamic_cast<AliFlowCommonHist*>(fHistList->FindObject(commonHistsName.Data())); | |
d66d46f7 | 381 | if(commonHist) |
382 | { | |
383 | this->SetCommonHists(commonHist); | |
384 | } else | |
385 | { | |
386 | cout<<endl; | |
387 | cout<<" WARNING (MH): commonHist is NULL in AFAWMH::GPFCH() !!!!"<<endl; | |
388 | cout<<endl; | |
389 | exit(0); | |
390 | } | |
391 | ||
392 | } // end of void AliFlowAnalysisWithMixedHarmonics::GetPointersForCommonHistograms() | |
393 | ||
394 | //================================================================================================================ | |
395 | ||
ecac11c2 | 396 | void AliFlowAnalysisWithMixedHarmonics::GetPointersForAllEventProfiles() |
397 | { | |
5c078806 | 398 | // Get pointers to profiles holding final results. |
ecac11c2 | 399 | |
400 | TList *profileList = NULL; | |
401 | profileList = dynamic_cast<TList*>(fHistList->FindObject("Profiles")); | |
402 | if(!profileList) | |
403 | { | |
404 | cout<<"WARNING: profileList is NULL in AFAWMH::GPFAEP() !!!!"<<endl; | |
405 | exit(0); | |
406 | } | |
407 | ||
408 | TString s3pCorrelatorProName = "f3pCorrelatorPro"; | |
5c078806 | 409 | TProfile *p3pCorrelatorPro = dynamic_cast<TProfile*>(profileList->FindObject(s3pCorrelatorProName.Data())); |
410 | if(p3pCorrelatorPro) | |
ecac11c2 | 411 | { |
5c078806 | 412 | this->Set3pCorrelatorPro(p3pCorrelatorPro); |
ecac11c2 | 413 | } |
414 | TString s3pCorrelatorVsMProName = "f3pCorrelatorVsMPro"; | |
5c078806 | 415 | TProfile *p3pCorrelatorVsMPro = dynamic_cast<TProfile*>(profileList->FindObject(s3pCorrelatorVsMProName.Data())); |
416 | if(p3pCorrelatorVsMPro) | |
ecac11c2 | 417 | { |
5c078806 | 418 | this->Set3pCorrelatorVsMPro(p3pCorrelatorVsMPro); |
ecac11c2 | 419 | } |
420 | TString nonIsotropicTermsProName = "fNonIsotropicTermsPro"; | |
421 | TProfile *nonIsotropicTermsPro = dynamic_cast<TProfile*>(profileList->FindObject(nonIsotropicTermsProName.Data())); | |
422 | if(nonIsotropicTermsPro) | |
423 | { | |
424 | this->SetNonIsotropicTermsPro(nonIsotropicTermsPro); | |
425 | } | |
426 | TString nonIsotropicTermsVsMProName = "fNonIsotropicTermsVsMPro"; | |
427 | TProfile2D *nonIsotropicTermsVsMPro = dynamic_cast<TProfile2D*>(profileList->FindObject(nonIsotropicTermsVsMProName.Data())); | |
428 | if(nonIsotropicTermsVsMPro) | |
429 | { | |
430 | this->SetNonIsotropicTermsVsMPro(nonIsotropicTermsVsMPro); | |
5c078806 | 431 | } |
432 | TString psdFlag[2] = {"PtSum","PtDiff"}; | |
433 | for(Int_t sd=0;sd<2;sd++) | |
434 | { | |
435 | TProfile *p3pCorrelatorVsPtSumDiffPro = dynamic_cast<TProfile*>(profileList->FindObject(Form("f3pCorrelatorVs%sPro",psdFlag[sd].Data()))); | |
436 | if(p3pCorrelatorVsPtSumDiffPro) | |
437 | { | |
438 | this->Set3pCorrelatorVsPtSumDiffPro(p3pCorrelatorVsPtSumDiffPro,sd); | |
439 | } | |
440 | } | |
441 | ||
ecac11c2 | 442 | } // end of void AliFlowAnalysisWithMixedHarmonics::GetPointersForAllEventProfiles() |
443 | ||
444 | //================================================================================================================ | |
445 | ||
489d5531 | 446 | void AliFlowAnalysisWithMixedHarmonics::GetPointersForResultsHistograms() |
447 | { | |
448 | // Get pointers to histograms holding final results. | |
449 | ||
450 | TList *resultsList = NULL; | |
451 | resultsList = dynamic_cast<TList*>(fHistList->FindObject("Results")); | |
452 | if(!resultsList) | |
453 | { | |
454 | cout<<"WARNING: resultsList is NULL in AFAWMH::GPFRH() !!!!"<<endl; | |
455 | exit(0); | |
d66d46f7 | 456 | } |
489d5531 | 457 | TString s3pCorrelatorHistName = "f3pCorrelatorHist"; |
458 | TH1D *h3pCorrelatorHist = dynamic_cast<TH1D*>(resultsList->FindObject(s3pCorrelatorHistName.Data())); | |
459 | if(h3pCorrelatorHist) | |
460 | { | |
461 | this->Set3pCorrelatorHist(h3pCorrelatorHist); | |
d66d46f7 | 462 | } |
e558a733 | 463 | TString s3pCorrelatorVsMHistName = "f3pCorrelatorVsMHist"; |
464 | TH1D *h3pCorrelatorVsMHist = dynamic_cast<TH1D*>(resultsList->FindObject(s3pCorrelatorVsMHistName.Data())); | |
465 | if(h3pCorrelatorVsMHist) | |
466 | { | |
467 | this->Set3pCorrelatorVsMHist(h3pCorrelatorVsMHist); | |
468 | } | |
489d5531 | 469 | TString detectorBiasHistName = "fDetectorBiasHist"; |
470 | TH1D *detectorBiasHist = dynamic_cast<TH1D*>(resultsList->FindObject(detectorBiasHistName.Data())); | |
471 | if(detectorBiasHist) | |
472 | { | |
473 | this->SetDetectorBiasHist(detectorBiasHist); | |
d66d46f7 | 474 | } |
ecac11c2 | 475 | TString detectorBiasVsMHistName = "fDetectorBiasVsMHist"; |
476 | TH1D *detectorBiasVsMHist = dynamic_cast<TH1D*>(resultsList->FindObject(detectorBiasVsMHistName.Data())); | |
477 | if(detectorBiasVsMHist) | |
478 | { | |
479 | this->SetDetectorBiasVsMHist(detectorBiasVsMHist); | |
480 | } | |
ecac11c2 | 481 | |
d66d46f7 | 482 | } // end of void AliFlowAnalysisWithMixedHarmonics::GetPointersForResultsHistograms() |
489d5531 | 483 | |
d66d46f7 | 484 | //================================================================================================================ |
485 | ||
489d5531 | 486 | void AliFlowAnalysisWithMixedHarmonics::WriteHistograms(TString outputFileName) |
487 | { | |
488 | // Store the final results in output .root file. | |
489 | TFile *output = new TFile(outputFileName.Data(),"RECREATE"); | |
490 | fHistList->Write(fHistList->GetName(),TObject::kSingleKey); | |
491 | delete output; | |
492 | } | |
493 | ||
494 | //================================================================================================================ | |
d66d46f7 | 495 | |
496 | void AliFlowAnalysisWithMixedHarmonics::WriteHistograms(TDirectoryFile *outputFileName) | |
497 | { | |
498 | // Store the final results in output .root file. | |
499 | fHistList->SetName("cobjMH"); | |
500 | fHistList->SetOwner(kTRUE); | |
501 | outputFileName->Add(fHistList); | |
502 | outputFileName->Write(outputFileName->GetName(),TObject::kSingleKey); | |
503 | } | |
504 | ||
505 | //================================================================================================================ | |
506 | ||
5c078806 | 507 | void AliFlowAnalysisWithMixedHarmonics::InitializeArrays() |
508 | { | |
509 | // Initialize arrays. | |
510 | ||
511 | for(Int_t sd=0;sd<2;sd++) | |
512 | { | |
513 | fRePEBE[sd] = NULL; | |
514 | fImPEBE[sd] = NULL; | |
515 | f3pCorrelatorVsPtSumDiffPro[sd] = NULL; | |
516 | } | |
517 | ||
518 | } // end of AliFlowAnalysisWithMixedHarmonics::InitializeArrays() | |
519 | ||
520 | //================================================================================================================ | |
521 | ||
489d5531 | 522 | void AliFlowAnalysisWithMixedHarmonics::BookAndNestAllLists() |
d66d46f7 | 523 | { |
524 | // Book and nest all list in base list fHistList. | |
525 | ||
526 | // Weights: | |
489d5531 | 527 | fWeightsList->SetName("Weights"); |
528 | fWeightsList->SetOwner(kTRUE); | |
d66d46f7 | 529 | fHistList->Add(fWeightsList); |
ecac11c2 | 530 | // Profiles: |
531 | fProfileList->SetName("Profiles"); | |
532 | fProfileList->SetOwner(kTRUE); | |
533 | fHistList->Add(fProfileList); | |
d66d46f7 | 534 | // Results: |
489d5531 | 535 | fResultsList->SetName("Results"); |
536 | fResultsList->SetOwner(kTRUE); | |
d66d46f7 | 537 | fHistList->Add(fResultsList); |
538 | ||
539 | } // end of void AliFlowAnalysisWithMixedHarmonics::BookAndNestAllLists() | |
540 | ||
541 | //================================================================================================================ | |
542 | ||
489d5531 | 543 | void AliFlowAnalysisWithMixedHarmonics::BookProfileHoldingSettings() |
d66d46f7 | 544 | { |
545 | // Book profile to hold all analysis settings. | |
546 | ||
489d5531 | 547 | TString analysisSettingsName = "fAnalysisSettings"; |
5c078806 | 548 | fAnalysisSettings = new TProfile(analysisSettingsName.Data(),"Settings for analysis with mixed harmonics",6,0,6); |
549 | fAnalysisSettings->GetXaxis()->SetLabelSize(0.025); | |
d66d46f7 | 550 | fAnalysisSettings->GetXaxis()->SetBinLabel(1,"Integer n in cos(n(2#phi_{1}-#phi_{2}-#phi_{3}))"); |
489d5531 | 551 | fAnalysisSettings->Fill(0.5,fCorrelatorInteger); |
d66d46f7 | 552 | fAnalysisSettings->GetXaxis()->SetBinLabel(2,"Corrected for detector effects?"); |
553 | fAnalysisSettings->Fill(1.5,(Int_t)fCorrectForDetectorEffects); | |
554 | fAnalysisSettings->GetXaxis()->SetBinLabel(3,"# of multiplicity bins"); | |
555 | fAnalysisSettings->Fill(2.5,fNoOfMultipicityBins); | |
556 | fAnalysisSettings->GetXaxis()->SetBinLabel(4,"Width of multiplicity bins"); | |
557 | fAnalysisSettings->Fill(3.5,fMultipicityBinWidth); | |
558 | fAnalysisSettings->GetXaxis()->SetBinLabel(5,"Minimal multiplicity"); | |
559 | fAnalysisSettings->Fill(4.5,fMinMultiplicity); | |
5c078806 | 560 | fAnalysisSettings->GetXaxis()->SetBinLabel(6,"Print on the screen?"); |
561 | fAnalysisSettings->Fill(5.5,(Int_t)fPrintOnTheScreen); | |
d66d46f7 | 562 | fHistList->Add(fAnalysisSettings); |
563 | ||
564 | } // end of void AliFlowAnalysisWithMixedHarmonics::BookProfileHoldingSettings() | |
489d5531 | 565 | |
d66d46f7 | 566 | //================================================================================================================ |
567 | ||
489d5531 | 568 | void AliFlowAnalysisWithMixedHarmonics::BookCommonHistograms() |
569 | { | |
d66d46f7 | 570 | // Book common control histograms and common histograms for final results. |
489d5531 | 571 | |
572 | TString commonHistsName = "AliFlowCommonHistMH"; | |
573 | fCommonHists = new AliFlowCommonHist(commonHistsName.Data()); | |
574 | fHistList->Add(fCommonHists); | |
575 | ||
576 | } // end of void AliFlowAnalysisWithMixedHarmonics::BookCommonHistograms() | |
d66d46f7 | 577 | |
578 | //================================================================================================================ | |
579 | ||
489d5531 | 580 | void AliFlowAnalysisWithMixedHarmonics::BookAllEventByEventQuantities() |
581 | { | |
d66d46f7 | 582 | // Book all event-by-event quantitites. |
583 | ||
584 | // Q_{n,k} and S{p,k}: | |
489d5531 | 585 | fReQnk = new TMatrixD(2,4); // to be improved(bound on k) |
586 | fImQnk = new TMatrixD(2,4); // to be improved(bound on k) | |
d66d46f7 | 587 | fSpk = new TMatrixD(4,4); // to be improved(bound on p and k) |
5c078806 | 588 | |
589 | // p_n vs [(p1+p2)/2,|p1-p2|] | |
590 | TString psdFlag[2] = {"PtSum","PtDiff"}; | |
591 | for(Int_t sd=0;sd<2;sd++) | |
592 | { | |
593 | // to be improved: hardwired ,fnBinsPt,0.,fPtMax): | |
594 | fRePEBE[sd] = new TProfile(Form("fRePEBE%s",psdFlag[sd].Data()),"",fnBinsPt,0.,fPtMax); | |
595 | fImPEBE[sd] = new TProfile(Form("fImPEBE%s",psdFlag[sd].Data()),"",fnBinsPt,0.,fPtMax); | |
596 | } | |
597 | ||
489d5531 | 598 | } // end fo void AliFlowAnalysisWithMixedHarmonics::BookAllEventByEventQuantities() |
5c078806 | 599 | |
d66d46f7 | 600 | //================================================================================================================ |
601 | ||
602 | void AliFlowAnalysisWithMixedHarmonics::BookAllAllEventQuantities() | |
603 | { | |
604 | // Book all all-event quantitites. | |
605 | ||
606 | // a) Book quantites without multiplicity binning; | |
5c078806 | 607 | // b) Book quantites with multiplicity binning; |
608 | // c) Book quantities with binning in (p1+p2)/2, |p1-p2|, (eta1+eta2)/2 or |eta1-eta2|. | |
609 | ||
d66d46f7 | 610 | // a) Book quantites without multiplicity binning: |
5c078806 | 611 | // 3-p correlator <<cos[n(2phi1-phi2-phi3)]>> for all events: |
489d5531 | 612 | TString s3pCorrelatorProName = "f3pCorrelatorPro"; |
5c078806 | 613 | f3pCorrelatorPro = new TProfile(s3pCorrelatorProName.Data(),"",1,0,1); |
614 | f3pCorrelatorPro->GetXaxis()->SetLabelOffset(0.01); | |
615 | f3pCorrelatorPro->GetXaxis()->SetLabelSize(0.05); | |
616 | if(fCorrelatorInteger == 1) | |
617 | { | |
618 | f3pCorrelatorPro->GetXaxis()->SetBinLabel(1,"cos(2#phi_{1}-#phi_{2}-#phi_{3})"); | |
619 | } else | |
620 | { | |
621 | f3pCorrelatorPro->GetXaxis()->SetBinLabel(1,Form("cos[%d(2#phi_{1}-#phi_{2}-#phi_{3})]",fCorrelatorInteger)); | |
622 | } | |
ecac11c2 | 623 | fProfileList->Add(f3pCorrelatorPro); |
5c078806 | 624 | // Non-isotropic terms in the decomposition of <cos[n(2phi1-phi2-phi3)]: |
489d5531 | 625 | TString nonIsotropicTermsProName = "fNonIsotropicTermsPro"; |
5c078806 | 626 | fNonIsotropicTermsPro = new TProfile(nonIsotropicTermsProName.Data(),"",10,0,10); |
627 | if(fCorrelatorInteger == 1) | |
628 | { | |
629 | fNonIsotropicTermsPro->SetTitle("Non-isotropic terms in decomposition of cos(2#phi_{1}-#phi_{2}-#phi_{3})"); | |
630 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(1,"cos(#phi_{1})"); | |
631 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(2,"sin(#phi_{1})"); | |
632 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(3,"cos(2#phi_{1})"); | |
633 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(4,"sin(2#phi_{1})"); | |
634 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(5,"cos(#phi_{1}+#phi_{2})"); | |
635 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(6,"sin(#phi_{1}+#phi_{2})"); | |
636 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(7,"cos(2#phi_{1}-#phi_{2})"); | |
637 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(8,"sin(2#phi_{1}-#phi_{2})"); | |
638 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(9,"cos(#phi_{1}-#phi_{2}-#phi_{3})"); | |
639 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(10,"sin(#phi_{1}-#phi_{2}-#phi_{3})"); | |
640 | } else | |
641 | { | |
642 | fNonIsotropicTermsPro->SetTitle(Form("Non-isotropic terms in decomposition of cos[%d(2#phi_{1}-#phi_{2}-#phi_{3})]",fCorrelatorInteger)); | |
643 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(1,Form("cos(%d#phi_{1})",fCorrelatorInteger)); | |
644 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(2,Form("sin(%d#phi_{1})",fCorrelatorInteger)); | |
645 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(3,Form("cos(%d#phi_{1})",2*fCorrelatorInteger)); | |
646 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(4,Form("sin(%d#phi_{1})",2*fCorrelatorInteger)); | |
647 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(5,Form("cos(%d(#phi_{1}+#phi_{2}))",fCorrelatorInteger)); | |
648 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(6,Form("sin(%d(#phi_{1}+#phi_{2}))",fCorrelatorInteger)); | |
649 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(7,Form("cos(%d(2#phi_{1}-#phi_{2}))",fCorrelatorInteger)); | |
650 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(8,Form("sin(%d(2#phi_{1}-#phi_{2}))",fCorrelatorInteger)); | |
651 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(9,Form("cos(%d(#phi_{1}-#phi_{2}-#phi_{3}))",fCorrelatorInteger)); | |
652 | fNonIsotropicTermsPro->GetXaxis()->SetBinLabel(10,Form("sin(%d(#phi_{1}-#phi_{2}-#phi_{3}))",fCorrelatorInteger)); | |
653 | } | |
ecac11c2 | 654 | fProfileList->Add(fNonIsotropicTermsPro); |
5c078806 | 655 | // 3-p correlator <<cos[n(2phi1-phi2-phi3)]>> corrected for detector effects: |
656 | TString s3pCorrelatorHistName = "f3pCorrelatorHist"; | |
657 | f3pCorrelatorHist = new TH1D(s3pCorrelatorHistName.Data(),"",1,0,1); | |
658 | f3pCorrelatorHist->GetXaxis()->SetLabelOffset(0.01); | |
659 | f3pCorrelatorHist->GetXaxis()->SetLabelSize(0.05); | |
660 | if(fCorrelatorInteger == 1) | |
661 | { | |
662 | f3pCorrelatorHist->GetXaxis()->SetBinLabel(1,"cos(2#phi_{1}-#phi_{2}-#phi_{3})"); | |
663 | } else | |
664 | { | |
665 | f3pCorrelatorHist->GetXaxis()->SetBinLabel(1,Form("cos[%d(2#phi_{1}-#phi_{2}-#phi_{3})]",fCorrelatorInteger)); | |
666 | } | |
667 | fResultsList->Add(f3pCorrelatorHist); | |
668 | // Quantified bias comming from detector inefficiencies to 3-p correlator <<cos[n(2phi1-phi2-phi3)]>>: | |
489d5531 | 669 | TString detectorBiasHistName = "fDetectorBiasHist"; |
d66d46f7 | 670 | fDetectorBiasHist = new TH1D(detectorBiasHistName.Data(),"Bias coming from detector inefficiences",1,0,1); |
5c078806 | 671 | fDetectorBiasHist->GetXaxis()->SetBinLabel(1,"#frac{corrected}{measured}"); |
d66d46f7 | 672 | fResultsList->Add(fDetectorBiasHist); |
673 | ||
674 | // b) Book quantites with multiplicity binning. | |
5c078806 | 675 | // 3-p correlator <<cos[n(2phi1-phi2-phi3)]>> versus multiplicity: |
489d5531 | 676 | TString s3pCorrelatorVsMProName = "f3pCorrelatorVsMPro"; |
5c078806 | 677 | f3pCorrelatorVsMPro = new TProfile(s3pCorrelatorVsMProName.Data(),"",fNoOfMultipicityBins+2,0,fNoOfMultipicityBins+2); |
678 | if(fCorrelatorInteger == 1) | |
d66d46f7 | 679 | { |
5c078806 | 680 | f3pCorrelatorVsMPro->SetTitle("cos(2#phi_{1}-#phi_{2}-#phi_{3}) #font[72]{vs} M"); |
681 | } else | |
682 | { | |
683 | f3pCorrelatorVsMPro->SetTitle(Form("cos[%d(2#phi_{1}-#phi_{2}-#phi_{3})] #font[72]{vs} M",fCorrelatorInteger)); | |
684 | } | |
685 | f3pCorrelatorVsMPro->GetXaxis()->SetBinLabel(1,Form("M < %d",(Int_t)fMinMultiplicity)); | |
686 | for(Int_t b=2;b<=fNoOfMultipicityBins+1;b++) | |
d66d46f7 | 687 | { |
5c078806 | 688 | f3pCorrelatorVsMPro->GetXaxis()->SetBinLabel(b,Form("%d #leq M < %d",(Int_t)(fMinMultiplicity+(b-2)*fMultipicityBinWidth),(Int_t)(fMinMultiplicity+(b-1)*fMultipicityBinWidth))); |
d66d46f7 | 689 | } |
5c078806 | 690 | f3pCorrelatorVsMPro->GetXaxis()->SetBinLabel(fNoOfMultipicityBins+2,Form(" M #geq %d",(Int_t)(fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth))); |
e558a733 | 691 | fProfileList->Add(f3pCorrelatorVsMPro); |
692 | // 3-p correlator <<cos[n(2phi1-phi2-phi3)]>> versus multiplicity corrected for detector effects: | |
693 | TString s3pCorrelatorVsMHistName = "f3pCorrelatorVsMHist"; | |
694 | f3pCorrelatorVsMHist = new TH1D(s3pCorrelatorVsMHistName.Data(),"",fNoOfMultipicityBins+2,0,fNoOfMultipicityBins+2); | |
695 | if(fCorrelatorInteger == 1) | |
696 | { | |
697 | f3pCorrelatorVsMHist->SetTitle("cos(2#phi_{1}-#phi_{2}-#phi_{3}) #font[72]{vs} M"); | |
698 | } else | |
699 | { | |
700 | f3pCorrelatorVsMHist->SetTitle(Form("cos[%d(2#phi_{1}-#phi_{2}-#phi_{3})] #font[72]{vs} M",fCorrelatorInteger)); | |
701 | } | |
702 | f3pCorrelatorVsMHist->GetXaxis()->SetBinLabel(1,Form("M < %d",(Int_t)fMinMultiplicity)); | |
703 | for(Int_t b=2;b<=fNoOfMultipicityBins+1;b++) | |
704 | { | |
705 | f3pCorrelatorVsMHist->GetXaxis()->SetBinLabel(b,Form("%d #leq M < %d",(Int_t)(fMinMultiplicity+(b-2)*fMultipicityBinWidth),(Int_t)(fMinMultiplicity+(b-1)*fMultipicityBinWidth))); | |
706 | } | |
707 | f3pCorrelatorVsMHist->GetXaxis()->SetBinLabel(fNoOfMultipicityBins+2,Form(" M #geq %d",(Int_t)(fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth))); | |
708 | fResultsList->Add(f3pCorrelatorVsMHist); | |
5c078806 | 709 | // Non-isotropic terms in the decomposition of <cos[n(2phi1-phi2-phi3)] vs multiplicity: |
489d5531 | 710 | TString nonIsotropicTermsVsMProName = "fNonIsotropicTermsVsMPro"; |
5c078806 | 711 | fNonIsotropicTermsVsMPro = new TProfile2D(nonIsotropicTermsVsMProName.Data(),"Non-isotropic terms in the decomposition of cos[n(2phi1-phi2-phi3)] #font[72]{vs} M",10,0,10,fNoOfMultipicityBins+2,0,fNoOfMultipicityBins+2); |
712 | if(fCorrelatorInteger == 1) | |
d66d46f7 | 713 | { |
5c078806 | 714 | fNonIsotropicTermsVsMPro->SetTitle("Non-isotropic terms in decomposition of cos(2#phi_{1}-#phi_{2}-#phi_{3}) #font[72]{vs} M"); |
715 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(1,"cos(#phi_{1})"); | |
716 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(2,"sin(#phi_{1})"); | |
717 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(3,"cos(2#phi_{1})"); | |
718 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(4,"sin(2#phi_{1})"); | |
719 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(5,"cos(#phi_{1}+#phi_{2})"); | |
720 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(6,"sin(#phi_{1}+#phi_{2})"); | |
721 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(7,"cos(2#phi_{1}-#phi_{2})"); | |
722 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(8,"sin(2#phi_{1}-#phi_{2})"); | |
723 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(9,"cos(#phi_{1}-#phi_{2}-#phi_{3})"); | |
724 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(10,"sin(#phi_{1}-#phi_{2}-#phi_{3})"); | |
725 | } else | |
726 | { | |
727 | fNonIsotropicTermsVsMPro->SetTitle(Form("Non-isotropic terms in decomposition of cos[%d(2#phi_{1}-#phi_{2}-#phi_{3})]",fCorrelatorInteger)); | |
728 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(1,Form("cos(%d#phi_{1})",fCorrelatorInteger)); | |
729 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(2,Form("sin(%d#phi_{1})",fCorrelatorInteger)); | |
730 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(3,Form("cos(%d#phi_{1})",2*fCorrelatorInteger)); | |
731 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(4,Form("sin(%d#phi_{1})",2*fCorrelatorInteger)); | |
732 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(5,Form("cos(%d(#phi_{1}+#phi_{2}))",fCorrelatorInteger)); | |
733 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(6,Form("sin(%d(#phi_{1}+#phi_{2}))",fCorrelatorInteger)); | |
734 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(7,Form("cos(%d(2#phi_{1}-#phi_{2}))",fCorrelatorInteger)); | |
735 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(8,Form("sin(%d(2#phi_{1}-#phi_{2}))",fCorrelatorInteger)); | |
736 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(9,Form("cos(%d(#phi_{1}-#phi_{2}-#phi_{3}))",fCorrelatorInteger)); | |
737 | fNonIsotropicTermsVsMPro->GetXaxis()->SetBinLabel(10,Form("sin(%d(#phi_{1}-#phi_{2}-#phi_{3}))",fCorrelatorInteger)); | |
738 | } | |
739 | fNonIsotropicTermsVsMPro->GetYaxis()->SetBinLabel(1,Form("M < %d",(Int_t)fMinMultiplicity)); | |
740 | for(Int_t b=2;b<=fNoOfMultipicityBins+1;b++) | |
d66d46f7 | 741 | { |
e558a733 | 742 | fNonIsotropicTermsVsMPro->GetYaxis()->SetBinLabel(b,Form("%d #leq M < %d",(Int_t)(fMinMultiplicity+(b-2)*fMultipicityBinWidth),(Int_t)(fMinMultiplicity+(b-1)*fMultipicityBinWidth))); |
d66d46f7 | 743 | } |
5c078806 | 744 | fNonIsotropicTermsVsMPro->GetYaxis()->SetBinLabel(fNoOfMultipicityBins+2,Form(" M #geq %d",(Int_t)(fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth))); |
745 | fProfileList->Add(fNonIsotropicTermsVsMPro); | |
e558a733 | 746 | // Quantified bias comming from detector inefficiencies to 3-p correlator <<cos[n(2phi1-phi2-phi3)]>> vs multiplicity |
489d5531 | 747 | TString detectorBiasVsMHistName = "fDetectorBiasVsMHist"; |
e558a733 | 748 | fDetectorBiasVsMHist = new TH1D(detectorBiasVsMHistName.Data(),"",fNoOfMultipicityBins+2,0,fNoOfMultipicityBins+2); |
749 | if(fCorrelatorInteger == 1) | |
750 | { | |
751 | fDetectorBiasVsMHist->SetTitle("#frac{corrected}{measured} cos(2#phi_{1}-#phi_{2}-#phi_{3}) #font[72]{vs} M"); // to be improved (title) | |
752 | } else | |
753 | { | |
754 | fDetectorBiasVsMHist->SetTitle(Form("#frac{corrected}{measured} cos[%d(2#phi_{1}-#phi_{2}-#phi_{3})] #font[72]{vs} M",fCorrelatorInteger)); // to be improved (title) | |
755 | } | |
756 | fDetectorBiasVsMHist->GetXaxis()->SetBinLabel(1,Form("M < %d",(Int_t)fMinMultiplicity)); | |
757 | for(Int_t b=2;b<=fNoOfMultipicityBins+1;b++) | |
d66d46f7 | 758 | { |
e558a733 | 759 | fDetectorBiasVsMHist->GetXaxis()->SetBinLabel(b,Form("%d #leq M < %d",(Int_t)(fMinMultiplicity+(b-2)*fMultipicityBinWidth),(Int_t)(fMinMultiplicity+(b-1)*fMultipicityBinWidth))); |
d66d46f7 | 760 | } |
e558a733 | 761 | fDetectorBiasVsMHist->GetXaxis()->SetBinLabel(fNoOfMultipicityBins+2,Form(" M #geq %d",(Int_t)(fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth))); |
762 | fResultsList->Add(fDetectorBiasVsMHist); | |
d66d46f7 | 763 | |
5c078806 | 764 | // c) Book quantities with binning in (p1+p2)/2, |p1-p2|, (eta1+eta2)/2 or |eta1-eta2|: |
765 | TString psdFlag[2] = {"PtSum","PtDiff"}; | |
766 | TString psdTitleFlag[2] = {"(p_{t,1}+p_{t,2})/2","#left|p_{t,1}-p_{t,2}#right|"}; | |
767 | //TString s3pCorrelatorVsPtSumDiffProName = "f3pCorrelatorVsPtSumDiffPro"; | |
768 | for(Int_t sd=0;sd<2;sd++) | |
769 | { | |
770 | // to be improved: hardwired ,fnBinsPt,0.,fPtMax): | |
771 | f3pCorrelatorVsPtSumDiffPro[sd] = new TProfile(Form("f3pCorrelatorVs%sPro",psdFlag[sd].Data()),"",fnBinsPt,0.,fPtMax); | |
772 | //f3pCorrelatorVsPtSumDiffPro[sd]->SetLabelSize(0.05); | |
773 | //f3pCorrelatorVsPtSumDiffPro[sd]->SetMarkerStyle(25); | |
774 | f3pCorrelatorVsPtSumDiffPro[sd]->GetXaxis()->SetTitle(psdTitleFlag[sd].Data()); | |
775 | fProfileList->Add(f3pCorrelatorVsPtSumDiffPro[sd]); | |
776 | } | |
777 | ||
d66d46f7 | 778 | } // end of void AliFlowAnalysisWithMixedHarmonics::BookAllAllEventQuantities() |
489d5531 | 779 | |
d66d46f7 | 780 | //================================================================================================================ |
781 | ||
489d5531 | 782 | void AliFlowAnalysisWithMixedHarmonics::AccessConstants() |
783 | { | |
784 | // Access needed common constants from AliFlowCommonConstants. | |
785 | ||
786 | fnBinsPhi = AliFlowCommonConstants::GetMaster()->GetNbinsPhi(); | |
787 | fPhiMin = AliFlowCommonConstants::GetMaster()->GetPhiMin(); | |
788 | fPhiMax = AliFlowCommonConstants::GetMaster()->GetPhiMax(); | |
789 | if(fnBinsPhi) fPhiBinWidth = (fPhiMax-fPhiMin)/fnBinsPhi; | |
790 | fnBinsPt = AliFlowCommonConstants::GetMaster()->GetNbinsPt(); | |
791 | fPtMin = AliFlowCommonConstants::GetMaster()->GetPtMin(); | |
792 | fPtMax = AliFlowCommonConstants::GetMaster()->GetPtMax(); | |
793 | if(fnBinsPt) fPtBinWidth = (fPtMax-fPtMin)/fnBinsPt; | |
794 | fnBinsEta = AliFlowCommonConstants::GetMaster()->GetNbinsEta(); | |
795 | fEtaMin = AliFlowCommonConstants::GetMaster()->GetEtaMin(); | |
796 | fEtaMax = AliFlowCommonConstants::GetMaster()->GetEtaMax(); | |
797 | if(fnBinsEta) fEtaBinWidth = (fEtaMax-fEtaMin)/fnBinsEta; | |
798 | ||
d66d46f7 | 799 | } // end of void AliFlowAnalysisWithMixedHarmonics::AccessConstants() |
800 | ||
489d5531 | 801 | //================================================================================================================ |
802 | ||
803 | void AliFlowAnalysisWithMixedHarmonics::CrossCheckSettings() | |
804 | { | |
805 | // Cross-check if the user settings make sense. | |
806 | ||
807 | } // end of void AliFlowAnalysisWithMixedHarmonics::CrossCheckSettings() | |
808 | ||
809 | //================================================================================================================ | |
810 | ||
811 | void AliFlowAnalysisWithMixedHarmonics::BookAndFillWeightsHistograms() | |
812 | { | |
813 | // Book and fill (by accessing file "weights.root") histograms which hold phi, pt and eta weights. | |
814 | ||
815 | if(!fWeightsList) | |
816 | { | |
817 | cout<<"WARNING: fWeightsList is NULL in AFAWMH::BAFWH() !!!!"<<endl; | |
818 | exit(0); | |
819 | } | |
820 | // Profile to hold flags for weights: | |
821 | TString fUseParticleWeightsName = "fUseParticleWeightsMH"; | |
822 | fUseParticleWeights = new TProfile(fUseParticleWeightsName.Data(),"0 = particle weight not used, 1 = particle weight used ",3,0,3); | |
823 | fUseParticleWeights->SetLabelSize(0.06); | |
824 | (fUseParticleWeights->GetXaxis())->SetBinLabel(1,"w_{#phi}"); | |
825 | (fUseParticleWeights->GetXaxis())->SetBinLabel(2,"w_{p_{T}}"); | |
826 | (fUseParticleWeights->GetXaxis())->SetBinLabel(3,"w_{#eta}"); | |
827 | fUseParticleWeights->Fill(0.5,(Int_t)fUsePhiWeights); | |
828 | fUseParticleWeights->Fill(1.5,(Int_t)fUsePtWeights); | |
829 | fUseParticleWeights->Fill(2.5,(Int_t)fUseEtaWeights); | |
830 | fWeightsList->Add(fUseParticleWeights); | |
831 | // Phi-weights: | |
832 | if(fUsePhiWeights) | |
833 | { | |
834 | if(fWeightsList->FindObject("phi_weights")) | |
835 | { | |
836 | fPhiWeights = dynamic_cast<TH1F*>(fWeightsList->FindObject("phi_weights")); | |
837 | if(TMath::Abs(fPhiWeights->GetBinWidth(1)-fPhiBinWidth)>pow(10.,-6.)) | |
838 | { | |
d66d46f7 | 839 | cout<<endl; |
489d5531 | 840 | cout<<"WARNING (MH): Inconsistent binning in histograms for phi-weights throughout the code."<<endl; |
d66d46f7 | 841 | cout<<endl; |
489d5531 | 842 | exit(0); |
843 | } | |
844 | } else | |
845 | { | |
846 | cout<<"WARNING (MH): fWeightsList->FindObject(\"phi_weights\") is NULL in AFAWMH::BAFWH() !!!!"<<endl; | |
847 | exit(0); | |
848 | } | |
849 | } // end of if(fUsePhiWeights) | |
850 | // Pt-weights: | |
851 | if(fUsePtWeights) | |
852 | { | |
853 | if(fWeightsList->FindObject("pt_weights")) | |
854 | { | |
855 | fPtWeights = dynamic_cast<TH1D*>(fWeightsList->FindObject("pt_weights")); | |
856 | if(TMath::Abs(fPtWeights->GetBinWidth(1)-fPtBinWidth)>pow(10.,-6.)) | |
857 | { | |
d66d46f7 | 858 | cout<<endl; |
489d5531 | 859 | cout<<"WARNING (MH): Inconsistent binning in histograms for pt-weights throughout the code."<<endl; |
d66d46f7 | 860 | cout<<endl; |
489d5531 | 861 | exit(0); |
862 | } | |
863 | } else | |
864 | { | |
865 | cout<<"WARNING (MH): fWeightsList->FindObject(\"pt_weights\") is NULL in AFAWMH::BAFWH() !!!!"<<endl; | |
866 | exit(0); | |
867 | } | |
868 | } // end of if(fUsePtWeights) | |
869 | // Eta-weights: | |
870 | if(fUseEtaWeights) | |
871 | { | |
872 | if(fWeightsList->FindObject("eta_weights")) | |
873 | { | |
874 | fEtaWeights = dynamic_cast<TH1D*>(fWeightsList->FindObject("eta_weights")); | |
875 | if(TMath::Abs(fEtaWeights->GetBinWidth(1)-fEtaBinWidth)>pow(10.,-6.)) | |
876 | { | |
d66d46f7 | 877 | cout<<endl; |
489d5531 | 878 | cout<<"WARNING (MH): Inconsistent binning in histograms for eta-weights throughout the code."<<endl; |
d66d46f7 | 879 | cout<<endl; |
489d5531 | 880 | exit(0); |
881 | } | |
882 | } else | |
883 | { | |
884 | cout<<"WARNING: fUseEtaWeights && fWeightsList->FindObject(\"eta_weights\") is NULL in AFAWMH::BAFWH() !!!!"<<endl; | |
885 | exit(0); | |
886 | } | |
887 | } // end of if(fUseEtaWeights) | |
888 | ||
d66d46f7 | 889 | } // end of AliFlowAnalysisWithMixedHarmonics::BookAndFillWeightsHistograms() |
890 | ||
891 | //================================================================================================================ | |
489d5531 | 892 | |
893 | void AliFlowAnalysisWithMixedHarmonics::CheckPointersUsedInMake() | |
894 | { | |
895 | // Check pointers used in method Make(). | |
d66d46f7 | 896 | |
e558a733 | 897 | if(!fReQnk || !fImQnk || !fSpk ) |
d66d46f7 | 898 | { |
899 | cout<<endl; | |
e558a733 | 900 | cout<<" WARNING (MH::Make()): (!fReQnk || !fImQnk || !fSpk) is NULL !!!!"<<endl; |
d66d46f7 | 901 | cout<<endl; |
902 | exit(0); | |
903 | } | |
904 | if(!f3pCorrelatorPro) | |
905 | { | |
906 | cout<<endl; | |
5c078806 | 907 | cout<<" WARNING (MH::Make()): (!f3pCorrelatorPro) is NULL !!!!"<<endl; |
d66d46f7 | 908 | cout<<endl; |
909 | exit(0); | |
5c078806 | 910 | } |
911 | if(!fNonIsotropicTermsPro) | |
912 | { | |
913 | cout<<endl; | |
914 | cout<<" WARNING (MH::Make()): !fNonIsotropicTermsPro is NULL !!!!"<<endl; | |
915 | cout<<endl; | |
916 | exit(0); | |
917 | } | |
918 | if(!f3pCorrelatorVsMPro) | |
919 | { | |
920 | cout<<endl; | |
921 | cout<<" WARNING (MH::Make()): !f3pCorrelatorVsMPro is NULL !!!!"<<endl; | |
922 | cout<<endl; | |
923 | exit(0); | |
924 | } | |
925 | if(!fNonIsotropicTermsVsMPro) | |
926 | { | |
927 | cout<<endl; | |
928 | cout<<" WARNING (MH::Make()): !fNonIsotropicTermsVsMPro is NULL !!!!"<<endl; | |
929 | cout<<endl; | |
930 | exit(0); | |
931 | } | |
932 | for(Int_t sd=0;sd<2;sd++) | |
933 | { | |
934 | if(!(f3pCorrelatorVsPtSumDiffPro[sd])) | |
935 | { | |
936 | cout<<endl; | |
937 | cout<<" WARNING (MH::Make()): !"<<Form("f3pCorrelatorVsPtSumDiffPro[%d]",sd)<<" is NULL !!!!"<<endl; | |
938 | cout<<endl; | |
939 | exit(0); | |
940 | } | |
d66d46f7 | 941 | } |
489d5531 | 942 | |
d66d46f7 | 943 | } // end of AliFlowAnalysisWithMixedHarmonics::CheckPointersUsedInMake() |
944 | ||
945 | //================================================================================================================ | |
489d5531 | 946 | |
947 | void AliFlowAnalysisWithMixedHarmonics::CheckPointersUsedInFinish() | |
948 | { | |
d66d46f7 | 949 | // Check pointers used in method Finish(). |
ecac11c2 | 950 | |
951 | if(!fAnalysisSettings) | |
952 | { | |
953 | cout<<endl; | |
5c078806 | 954 | cout<<" WARNING (MH::Finish()): !fAnalysisSettings is NULL !!!!"<<endl; |
ecac11c2 | 955 | cout<<endl; |
956 | exit(0); | |
957 | } | |
958 | if(!f3pCorrelatorPro) | |
959 | { | |
960 | cout<<endl; | |
5c078806 | 961 | cout<<" WARNING (MH::Finish()): !f3pCorrelatorPro is NULL !!!!"<<endl; |
ecac11c2 | 962 | cout<<endl; |
963 | exit(0); | |
964 | } | |
965 | if(!fNonIsotropicTermsPro) | |
966 | { | |
967 | cout<<endl; | |
5c078806 | 968 | cout<<" WARNING (MH::Finish()): !fNonIsotropicTermsPro is NULL !!!!"<<endl; |
ecac11c2 | 969 | cout<<endl; |
970 | exit(0); | |
971 | } | |
972 | if(!f3pCorrelatorVsMPro) | |
973 | { | |
974 | cout<<endl; | |
5c078806 | 975 | cout<<" WARNING (MH::Finish()): !f3pCorrelatorVsMPro is NULL !!!!"<<endl; |
ecac11c2 | 976 | cout<<endl; |
977 | exit(0); | |
978 | } | |
e558a733 | 979 | if(!f3pCorrelatorVsMHist) |
980 | { | |
981 | cout<<endl; | |
982 | cout<<" WARNING (MH::Finish()): !f3pCorrelatorVsMHist is NULL !!!!"<<endl; | |
983 | cout<<endl; | |
984 | exit(0); | |
985 | } | |
ecac11c2 | 986 | if(!fNonIsotropicTermsVsMPro) |
987 | { | |
988 | cout<<endl; | |
5c078806 | 989 | cout<<" WARNING (MH::Finish()): !fNonIsotropicTermsVsMPro is NULL !!!!"<<endl; |
ecac11c2 | 990 | cout<<endl; |
991 | exit(0); | |
992 | } | |
993 | if(!f3pCorrelatorHist) | |
994 | { | |
995 | cout<<endl; | |
5c078806 | 996 | cout<<" WARNING (MH::Finish()): !f3pCorrelatorHist is NULL !!!!"<<endl; |
ecac11c2 | 997 | cout<<endl; |
998 | exit(0); | |
5c078806 | 999 | } |
ecac11c2 | 1000 | if(!fDetectorBiasHist) |
1001 | { | |
1002 | cout<<endl; | |
5c078806 | 1003 | cout<<" WARNING (MH::Finish()): !fDetectorBiasHist is NULL !!!!"<<endl; |
ecac11c2 | 1004 | cout<<endl; |
1005 | exit(0); | |
1006 | } | |
5c078806 | 1007 | /* to be improved - enabled eventually |
ecac11c2 | 1008 | if(!fDetectorBiasVsMHist) |
1009 | { | |
1010 | cout<<endl; | |
5c078806 | 1011 | cout<<" WARNING (MH::Finish()): !fDetectorBiasVsMHist is NULL !!!!"<<endl; |
ecac11c2 | 1012 | cout<<endl; |
1013 | exit(0); | |
5c078806 | 1014 | } |
1015 | */ | |
1016 | for(Int_t sd=0;sd<2;sd++) | |
1017 | { | |
1018 | if(!(f3pCorrelatorVsPtSumDiffPro[sd])) | |
1019 | { | |
1020 | cout<<endl; | |
1021 | cout<<" WARNING (MH::Finish()): !"<<Form("f3pCorrelatorVsPtSumDiffPro[%d]",sd)<<" is NULL !!!!"<<endl; | |
1022 | cout<<endl; | |
1023 | exit(0); | |
1024 | } | |
1025 | } | |
ecac11c2 | 1026 | |
489d5531 | 1027 | } // end of AliFlowAnalysisWithMixedHarmonics::CheckPointersUsedInFinish() |
d66d46f7 | 1028 | |
1029 | //================================================================================================================ | |
489d5531 | 1030 | |
5c078806 | 1031 | void AliFlowAnalysisWithMixedHarmonics::PrintOnTheScreen() |
1032 | { | |
1033 | // Print the final results on the screen. | |
1034 | ||
1035 | cout<<endl; | |
1036 | cout<<"*******************************************************"<<endl; | |
1037 | cout<<"*******************************************************"<<endl; | |
1038 | cout<<" Mixed Harmonics "<<endl; | |
1039 | cout<<endl; | |
1040 | if(fCorrelatorInteger!=1) | |
1041 | { | |
1042 | cout<<" cos["<<fCorrelatorInteger<<"(2phi1-phi2-phi3)] = "<<f3pCorrelatorHist->GetBinContent(1)<< | |
1043 | " +/- "<<f3pCorrelatorHist->GetBinError(1)<<endl; | |
1044 | } else | |
1045 | { | |
1046 | cout<<" cos(2phi1-phi2-phi3) = "<<f3pCorrelatorHist->GetBinContent(1)<<" +/- "<<f3pCorrelatorHist->GetBinError(1)<<endl; | |
1047 | } | |
1048 | cout<<" Detector Bias = "<<fDetectorBiasHist->GetBinContent(1)<<endl; | |
1049 | cout<<endl; | |
1050 | cout<<"*******************************************************"<<endl; | |
1051 | cout<<"*******************************************************"<<endl; | |
1052 | ||
1053 | } // end of void AliFlowAnalysisWithMixedHarmonics::PrintOnTheScreen() | |
1054 | ||
1055 | //================================================================================================================ | |
1056 | ||
489d5531 | 1057 | void AliFlowAnalysisWithMixedHarmonics::AccessSettings() |
1058 | { | |
d66d46f7 | 1059 | // Access the settings for analysis with mixed harmonics. |
1060 | ||
1061 | fCorrelatorInteger = (Int_t)fAnalysisSettings->GetBinContent(1); | |
1062 | fCorrectForDetectorEffects = (Bool_t)fAnalysisSettings->GetBinContent(2); | |
1063 | fNoOfMultipicityBins = (Int_t)fAnalysisSettings->GetBinContent(3); | |
1064 | fMultipicityBinWidth = (Double_t)fAnalysisSettings->GetBinContent(4); | |
1065 | fMinMultiplicity = (Double_t)fAnalysisSettings->GetBinContent(5); | |
5c078806 | 1066 | fPrintOnTheScreen = (Bool_t)fAnalysisSettings->GetBinContent(6); |
489d5531 | 1067 | |
d66d46f7 | 1068 | } // end of AliFlowAnalysisWithMixedHarmonics::AccessSettings() |
1069 | ||
1070 | //================================================================================================================ | |
489d5531 | 1071 | |
1072 | void AliFlowAnalysisWithMixedHarmonics::CorrectForDetectorEffects() | |
1073 | { | |
d66d46f7 | 1074 | // Correct measured 3-p correlator cos[n(2phi1-phi2-phi3)] for detector effects. |
5c078806 | 1075 | |
d66d46f7 | 1076 | Double_t measured3pCorrelator = f3pCorrelatorPro->GetBinContent(1); // biased by detector effects |
1077 | Double_t corrected3pCorrelator = 0.; // corrected for detector effects | |
1078 | Double_t nonIsotropicTerms[10] = {0.}; // there are 10 distinct non-isotropic terms | |
1079 | for(Int_t nit=0;nit<10;nit++) | |
1080 | { | |
1081 | nonIsotropicTerms[nit] = fNonIsotropicTermsPro->GetBinContent(nit+1); | |
1082 | } | |
1083 | // Calculate corrected 3-p correlator: | |
1084 | corrected3pCorrelator = measured3pCorrelator | |
1085 | - nonIsotropicTerms[2]*nonIsotropicTerms[4] | |
1086 | - nonIsotropicTerms[3]*nonIsotropicTerms[5] | |
1087 | - 2.*nonIsotropicTerms[0]*nonIsotropicTerms[6] | |
1088 | - 2.*nonIsotropicTerms[1]*nonIsotropicTerms[7] | |
1089 | + 2.*nonIsotropicTerms[2]*(pow(nonIsotropicTerms[0],2.)-pow(nonIsotropicTerms[1],2.)) | |
5c078806 | 1090 | + 4.*nonIsotropicTerms[3]*nonIsotropicTerms[0]*nonIsotropicTerms[1]; |
1091 | // Store corrected correlator: | |
1092 | f3pCorrelatorHist->SetBinContent(1,corrected3pCorrelator); | |
1093 | f3pCorrelatorHist->SetBinError(1,f3pCorrelatorPro->GetBinError(1)); // to be improved (propagate error for non-isotropic terms) | |
1094 | // Quantify bias from detector inefficiences to 3-p correlator. Remark: Bias is quantified as a | |
1095 | // ratio between corrected and measured 3-p correlator: | |
1096 | // bias = corrected/measured | |
1097 | // This bias is stored in histogram fDetectorBias. | |
1098 | Double_t bias = 0.; | |
1099 | if(measured3pCorrelator) | |
1100 | { | |
1101 | bias = corrected3pCorrelator/measured3pCorrelator; | |
1102 | fDetectorBiasHist->SetBinContent(1,bias); | |
e558a733 | 1103 | } |
489d5531 | 1104 | |
d66d46f7 | 1105 | } // end of AliFlowAnalysisWithMixedHarmonics::CorrectForDetectorEffects() |
1106 | ||
1107 | //================================================================================================================ | |
489d5531 | 1108 | |
e558a733 | 1109 | void AliFlowAnalysisWithMixedHarmonics::CorrectForDetectorEffectsVsM() |
1110 | { | |
1111 | // Correct measured 3-p correlator cos[n(2phi1-phi2-phi3)] vs M for detector effects. | |
1112 | ||
1113 | for(Int_t b=1;b<=fNoOfMultipicityBins+2;b++) | |
1114 | { | |
1115 | Double_t measured3pCorrelator = f3pCorrelatorVsMPro->GetBinContent(b); // biased by detector effects | |
1116 | Double_t corrected3pCorrelator = 0.; // corrected for detector effects | |
1117 | Double_t nonIsotropicTerms[10] = {0.}; // there are 10 distinct non-isotropic terms | |
1118 | for(Int_t nit=0;nit<10;nit++) | |
1119 | { | |
1120 | nonIsotropicTerms[nit] = fNonIsotropicTermsVsMPro->GetBinContent(fNonIsotropicTermsVsMPro->GetBin(nit+1,b)); | |
1121 | } | |
1122 | // Calculate corrected 3-p correlator: | |
1123 | corrected3pCorrelator = measured3pCorrelator | |
1124 | - nonIsotropicTerms[2]*nonIsotropicTerms[4] | |
1125 | - nonIsotropicTerms[3]*nonIsotropicTerms[5] | |
1126 | - 2.*nonIsotropicTerms[0]*nonIsotropicTerms[6] | |
1127 | - 2.*nonIsotropicTerms[1]*nonIsotropicTerms[7] | |
1128 | + 2.*nonIsotropicTerms[2]*(pow(nonIsotropicTerms[0],2.)-pow(nonIsotropicTerms[1],2.)) | |
1129 | + 4.*nonIsotropicTerms[3]*nonIsotropicTerms[0]*nonIsotropicTerms[1]; | |
1130 | // Store corrected correlator: | |
1131 | f3pCorrelatorVsMHist->SetBinContent(b,corrected3pCorrelator); | |
1132 | f3pCorrelatorVsMHist->SetBinError(b,f3pCorrelatorVsMPro->GetBinError(b)); // to be improved (propagate error for non-isotropic terms) | |
1133 | // Quantify bias from detector inefficiences to 3-p correlator. Remark: Bias is quantified as a | |
1134 | // ratio between corrected and measured 3-p correlator: | |
1135 | // bias = corrected/measured | |
1136 | // This bias is stored in histogram fDetectorBias. | |
1137 | Double_t bias = 0.; | |
1138 | if(measured3pCorrelator) | |
1139 | { | |
1140 | bias = corrected3pCorrelator/measured3pCorrelator; | |
1141 | fDetectorBiasVsMHist->SetBinContent(b,bias); | |
1142 | } | |
1143 | } // end of for(Int_t b=1;b<=fNoOfMultipicityBins;b++) | |
1144 | ||
1145 | } // end of AliFlowAnalysisWithMixedHarmonics::CorrectForDetectorEffectsVsM() | |
1146 | ||
1147 | //================================================================================================================ | |
1148 | ||
489d5531 | 1149 | void AliFlowAnalysisWithMixedHarmonics::ResetEventByEventQuantities() |
1150 | { | |
1151 | // Reset all event by event quantities. | |
1152 | ||
1153 | fReQnk->Zero(); | |
1154 | fImQnk->Zero(); | |
d66d46f7 | 1155 | fSpk->Zero(); |
e558a733 | 1156 | |
5c078806 | 1157 | for(Int_t sd=0;sd<2;sd++) |
1158 | { | |
1159 | fRePEBE[sd]->Reset(); | |
1160 | fImPEBE[sd]->Reset(); | |
1161 | } | |
1162 | ||
d66d46f7 | 1163 | } // end of void AliFlowAnalysisWithMixedHarmonics::ResetEventByEventQuantities() |
1164 | ||
1165 | //================================================================================================================ | |
1166 | ||
489d5531 | 1167 | void AliFlowAnalysisWithMixedHarmonics::Calculate3pCorrelator() |
1168 | { | |
1169 | // Calculate 3-p azimuthal correlator cos[n(2phi1-phi2-phi3)] in terms of Q_{n,k} and S_{p,k}. | |
d66d46f7 | 1170 | |
1171 | // a) Calculate 3-p correlator without using particle weights; | |
1172 | // b) Calculate 3-p correlator with using particle weights. | |
1173 | ||
489d5531 | 1174 | // a) Calculate 3-p correlator without using particle weights: |
d66d46f7 | 1175 | if(!(fUsePhiWeights || fUsePtWeights || fUseEtaWeights)) |
1176 | { | |
489d5531 | 1177 | // Multiplicity (number of RPs): |
1178 | Double_t dMult = (*fSpk)(0,0); | |
1179 | // Real and imaginary parts of non-weighted Q-vectors (Q_{n,0}) evaluated in harmonics n and 2n: | |
1180 | Double_t dReQ1n = (*fReQnk)(0,0); | |
1181 | Double_t dReQ2n = (*fReQnk)(1,0); | |
1182 | Double_t dImQ1n = (*fImQnk)(0,0); | |
d66d46f7 | 1183 | Double_t dImQ2n = (*fImQnk)(1,0); |
489d5531 | 1184 | // 3-particle azimuthal correlator <cos(n*(2.*phi1-phi2-phi3))>: |
d66d46f7 | 1185 | Double_t three2n1n1n = (pow(dReQ1n,2.)*dReQ2n + 2.*dReQ1n*dImQ1n*dImQ2n - pow(dImQ1n,2.)*dReQ2n |
489d5531 | 1186 | - 2.*(pow(dReQ1n,2.)+pow(dImQ1n,2.)) |
1187 | - (pow(dReQ2n,2.)+pow(dImQ2n,2.))+2.*dMult) | |
d66d46f7 | 1188 | / (dMult*(dMult-1.)*(dMult-2.)); |
e558a733 | 1189 | // Fill all-events profile: |
d66d46f7 | 1190 | f3pCorrelatorPro->Fill(0.5,three2n1n1n,dMult*(dMult-1.)*(dMult-2.)); |
5c078806 | 1191 | |
1192 | // 3-particle azimuthal correlator <cos(n*(2.*phi1-phi2-phi3))> vs multiplicity: | |
1193 | if(dMult<fMinMultiplicity) | |
1194 | { | |
1195 | f3pCorrelatorVsMPro->Fill(0.5,three2n1n1n,dMult*(dMult-1.)*(dMult-2.)); | |
1196 | } else if(dMult>=fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth) | |
1197 | { | |
1198 | f3pCorrelatorVsMPro->Fill(0.5+fNoOfMultipicityBins+1,three2n1n1n,dMult*(dMult-1.)*(dMult-2.)); | |
1199 | } else | |
1200 | { | |
1201 | f3pCorrelatorVsMPro->Fill(1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),three2n1n1n,dMult*(dMult-1.)*(dMult-2.)); | |
1202 | } | |
1203 | ||
d66d46f7 | 1204 | } // end of if(!(fUsePhiWeights || fUsePtWeights || fUseEtaWeights)) |
1205 | ||
489d5531 | 1206 | // b) Calculate 3-p correlator without using particle weights: |
d66d46f7 | 1207 | if(fUsePhiWeights || fUsePtWeights || fUseEtaWeights) |
1208 | { | |
1209 | ||
1210 | } // end of if(fUsePhiWeights || fUsePtWeights || fUseEtaWeights) | |
1211 | ||
1212 | } // end of void AliFlowAnalysisWithMixedHarmonics::Calculate3pCorrelator() | |
1213 | ||
1214 | //================================================================================================================ | |
1215 | ||
1216 | void AliFlowAnalysisWithMixedHarmonics::CalculateNonIsotropicTerms() | |
1217 | { | |
5c078806 | 1218 | // Calculate non-isotropic terms which appear in the decomposition of 3-p correlator <cos[n(2phi1-phi2-phi3)]>. |
d66d46f7 | 1219 | |
5c078806 | 1220 | // For detector with uniform acceptance all these terms vanish. These non-isotropic terms are stored in fNonIsotropicTermsPro. |
1221 | // Binning of fNonIsotropicTermsPro is organized as follows: | |
489d5531 | 1222 | // 1st bin: <<cos(n*phi1)>> |
d66d46f7 | 1223 | // 2nd bin: <<sin(n*phi1)>> |
489d5531 | 1224 | // 3rd bin: <<cos(2n*phi1)>> |
d66d46f7 | 1225 | // 4th bin: <<sin(2n*phi1)>> |
489d5531 | 1226 | // 5th bin: <<cos(n*(phi1+phi2)>> |
d66d46f7 | 1227 | // 6th bin: <<sin(n*(phi1+phi2)>> |
489d5531 | 1228 | // 7th bin: <<cos(n*(2phi1-phi2)>> |
d66d46f7 | 1229 | // 8th bin: <<sin(n*(2phi1-phi2)>> |
489d5531 | 1230 | // 9th bin: <<cos(n*(phi1-phi2-phi3)>> |
d66d46f7 | 1231 | // 10th bin: <<sin(n*(phi1-phi2-phi3)>> |
1232 | ||
5c078806 | 1233 | // a) Calculate using particle weights; |
1234 | // b) Calculate without using particle weights. | |
1235 | ||
d66d46f7 | 1236 | // a) Calculate using particle weights: |
1237 | if(!(fUsePhiWeights || fUsePtWeights || fUseEtaWeights)) | |
1238 | { | |
489d5531 | 1239 | // Multiplicity (number of RPs): |
1240 | Double_t dMult = (*fSpk)(0,0); | |
1241 | // Real and imaginary parts of non-weighted Q-vectors (Q_{n,0}) evaluated in harmonics n and 2n: | |
1242 | Double_t dReQ1n = (*fReQnk)(0,0); | |
1243 | Double_t dReQ2n = (*fReQnk)(1,0); | |
1244 | Double_t dImQ1n = (*fImQnk)(0,0); | |
d66d46f7 | 1245 | Double_t dImQ2n = (*fImQnk)(1,0); |
489d5531 | 1246 | // 1-particle terms: |
d66d46f7 | 1247 | Double_t cosP1n = 0.; // <cos(n*(phi1))> |
1248 | Double_t sinP1n = 0.; // <sin(n*(phi1))> | |
1249 | Double_t cosP2n = 0.; // <cos(2n*(phi1))> | |
489d5531 | 1250 | Double_t sinP2n = 0.; // <sin(2n*(phi1))> |
1251 | if(dMult>0) | |
1252 | { | |
d66d46f7 | 1253 | cosP1n = dReQ1n/dMult; |
1254 | sinP1n = dImQ1n/dMult; | |
1255 | cosP2n = dReQ2n/dMult; | |
1256 | sinP2n = dImQ2n/dMult; | |
489d5531 | 1257 | // All-events avarages: |
d66d46f7 | 1258 | fNonIsotropicTermsPro->Fill(0.5,cosP1n,dMult); // <<cos(n*(phi1))>> |
1259 | fNonIsotropicTermsPro->Fill(1.5,sinP1n,dMult); // <<sin(n*(phi1))>> | |
1260 | fNonIsotropicTermsPro->Fill(2.5,cosP2n,dMult); // <<cos(2n*(phi1))>> | |
489d5531 | 1261 | fNonIsotropicTermsPro->Fill(3.5,sinP2n,dMult); // <<sin(2n*(phi1))>> |
e558a733 | 1262 | // All-events avarages vs M: |
1263 | if(dMult<fMinMultiplicity) | |
1264 | { | |
1265 | fNonIsotropicTermsVsMPro->Fill(0.5,0.5,cosP1n,dMult); // <<cos(n*(phi1))>> | |
1266 | fNonIsotropicTermsVsMPro->Fill(1.5,0.5,sinP1n,dMult); // <<sin(n*(phi1))>> | |
1267 | fNonIsotropicTermsVsMPro->Fill(2.5,0.5,cosP2n,dMult); // <<cos(2n*(phi1))>> | |
1268 | fNonIsotropicTermsVsMPro->Fill(3.5,0.5,sinP2n,dMult); // <<sin(2n*(phi1))>> | |
1269 | } else if(dMult>=fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth) | |
1270 | { | |
1271 | fNonIsotropicTermsVsMPro->Fill(0.5,0.5+fNoOfMultipicityBins+1,cosP1n,dMult); // <<cos(n*(phi1))>> | |
1272 | fNonIsotropicTermsVsMPro->Fill(1.5,0.5+fNoOfMultipicityBins+1,sinP1n,dMult); // <<sin(n*(phi1))>> | |
1273 | fNonIsotropicTermsVsMPro->Fill(2.5,0.5+fNoOfMultipicityBins+1,cosP2n,dMult); // <<cos(2n*(phi1))>> | |
1274 | fNonIsotropicTermsVsMPro->Fill(3.5,0.5+fNoOfMultipicityBins+1,sinP2n,dMult); // <<sin(2n*(phi1))>> | |
1275 | } else | |
1276 | { | |
1277 | fNonIsotropicTermsVsMPro->Fill(0.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),cosP1n,dMult); // <<cos(n*(phi1))>> | |
1278 | fNonIsotropicTermsVsMPro->Fill(1.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),sinP1n,dMult); // <<sin(n*(phi1))>> | |
1279 | fNonIsotropicTermsVsMPro->Fill(2.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),cosP2n,dMult); // <<cos(2n*(phi1))>> | |
1280 | fNonIsotropicTermsVsMPro->Fill(3.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),sinP2n,dMult); // <<sin(2n*(phi1))>> | |
1281 | } | |
1282 | } // end of if(dMult>0) | |
489d5531 | 1283 | // 2-particle terms: |
d66d46f7 | 1284 | Double_t cosP1nP1n = 0.; // <cos(n*(phi1+phi2))> |
1285 | Double_t sinP1nP1n = 0.; // <sin(n*(phi1+phi2))> | |
1286 | Double_t cosP2nM1n = 0.; // <cos(n*(2phi1-phi2))> | |
489d5531 | 1287 | Double_t sinP2nM1n = 0.; // <sin(n*(2phi1-phi2))> |
1288 | if(dMult>1) | |
1289 | { | |
d66d46f7 | 1290 | cosP1nP1n = (pow(dReQ1n,2)-pow(dImQ1n,2)-dReQ2n)/(dMult*(dMult-1)); |
489d5531 | 1291 | sinP1nP1n = (2.*dReQ1n*dImQ1n-dImQ2n)/(dMult*(dMult-1)); |
d66d46f7 | 1292 | cosP2nM1n = (dReQ2n*dReQ1n+dImQ2n*dImQ1n-dReQ1n)/(dMult*(dMult-1)); |
489d5531 | 1293 | sinP2nM1n = (dImQ2n*dReQ1n-dReQ2n*dImQ1n-dImQ1n)/(dMult*(dMult-1)); |
489d5531 | 1294 | // All-events avarages: |
d66d46f7 | 1295 | fNonIsotropicTermsPro->Fill(4.5,cosP1nP1n,dMult*(dMult-1.)); // <<cos(n*(phi1+phi2))>> |
489d5531 | 1296 | fNonIsotropicTermsPro->Fill(5.5,sinP1nP1n,dMult*(dMult-1.)); // <<sin(n*(phi1+phi2))>> |
d66d46f7 | 1297 | fNonIsotropicTermsPro->Fill(6.5,cosP2nM1n,dMult*(dMult-1.)); // <<cos(n*(2phi1-phi2))>> |
489d5531 | 1298 | fNonIsotropicTermsPro->Fill(7.5,sinP2nM1n,dMult*(dMult-1.)); // <<sin(n*(2phi1-phi2))>> |
e558a733 | 1299 | // All-events avarages vs M: |
1300 | if(dMult<fMinMultiplicity) | |
1301 | { | |
1302 | fNonIsotropicTermsVsMPro->Fill(4.5,0.5,cosP1nP1n,dMult*(dMult-1.)); // <<cos(n*(phi1+phi2))>> | |
1303 | fNonIsotropicTermsVsMPro->Fill(5.5,0.5,sinP1nP1n,dMult*(dMult-1.)); // <<sin(n*(phi1+phi2))>> | |
1304 | fNonIsotropicTermsVsMPro->Fill(6.5,0.5,cosP2nM1n,dMult*(dMult-1.)); // <<cos(n*(2phi1-phi2))>> | |
1305 | fNonIsotropicTermsVsMPro->Fill(7.5,0.5,sinP2nM1n,dMult*(dMult-1.)); // <<sin(n*(2phi1-phi2))>> | |
1306 | } else if(dMult>=fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth) | |
1307 | { | |
1308 | fNonIsotropicTermsVsMPro->Fill(4.5,0.5+fNoOfMultipicityBins+1,cosP1nP1n,dMult*(dMult-1.)); // <<cos(n*(phi1+phi2))>> | |
1309 | fNonIsotropicTermsVsMPro->Fill(5.5,0.5+fNoOfMultipicityBins+1,sinP1nP1n,dMult*(dMult-1.)); // <<sin(n*(phi1+phi2))>> | |
1310 | fNonIsotropicTermsVsMPro->Fill(6.5,0.5+fNoOfMultipicityBins+1,cosP2nM1n,dMult*(dMult-1.)); // <<cos(n*(2phi1-phi2))>> | |
1311 | fNonIsotropicTermsVsMPro->Fill(7.5,0.5+fNoOfMultipicityBins+1,sinP2nM1n,dMult*(dMult-1.)); // <<sin(n*(2phi1-phi2))>> | |
1312 | } else | |
1313 | { | |
1314 | fNonIsotropicTermsVsMPro->Fill(4.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),cosP1nP1n,dMult*(dMult-1.)); // <<cos(n*(phi1+phi2))>> | |
1315 | fNonIsotropicTermsVsMPro->Fill(5.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),sinP1nP1n,dMult*(dMult-1.)); // <<sin(n*(phi1+phi2))>> | |
1316 | fNonIsotropicTermsVsMPro->Fill(6.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),cosP2nM1n,dMult*(dMult-1.)); // <<cos(n*(2phi1-phi2))>> | |
1317 | fNonIsotropicTermsVsMPro->Fill(7.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth),sinP2nM1n,dMult*(dMult-1.)); // <<sin(n*(2phi1-phi2))>> | |
1318 | } | |
1319 | } // end of if(dMult>1) | |
489d5531 | 1320 | // 3-particle: |
1321 | Double_t cosP1nM1nM1n = 0.; // <cos(n*(phi1-phi2-phi3))> | |
1322 | Double_t sinP1nM1nM1n = 0.; // <sin(n*(phi1-phi2-phi3))> | |
1323 | if(dMult>2) | |
1324 | { | |
1325 | cosP1nM1nM1n = (dReQ1n*(pow(dReQ1n,2)+pow(dImQ1n,2))-dReQ1n*dReQ2n-dImQ1n*dImQ2n-2.*(dMult-1)*dReQ1n) | |
d66d46f7 | 1326 | / (dMult*(dMult-1)*(dMult-2)); |
489d5531 | 1327 | sinP1nM1nM1n = (-dImQ1n*(pow(dReQ1n,2)+pow(dImQ1n,2))+dReQ1n*dImQ2n-dImQ1n*dReQ2n+2.*(dMult-1)*dImQ1n) |
1328 | / (dMult*(dMult-1)*(dMult-2)); | |
489d5531 | 1329 | // All-events avarages: |
d66d46f7 | 1330 | fNonIsotropicTermsPro->Fill(8.5,cosP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<cos(n*(phi1-phi2-phi3))>> |
e558a733 | 1331 | fNonIsotropicTermsPro->Fill(9.5,sinP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<sin(n*(phi1-phi2-phi3))>> |
1332 | // All-events avarages vs M: | |
1333 | if(dMult<fMinMultiplicity) | |
1334 | { | |
1335 | fNonIsotropicTermsVsMPro->Fill(8.5,0.5,cosP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<cos(n*(phi1-phi2-phi3))>> | |
1336 | fNonIsotropicTermsVsMPro->Fill(9.5,0.5,sinP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<sin(n*(phi1-phi2-phi3))>> | |
1337 | } else if(dMult>=fMinMultiplicity+fNoOfMultipicityBins*fMultipicityBinWidth) | |
1338 | { | |
1339 | fNonIsotropicTermsVsMPro->Fill(8.5,0.5+fNoOfMultipicityBins+1,cosP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<cos(n*(phi1-phi2-phi3))>> | |
1340 | fNonIsotropicTermsVsMPro->Fill(9.5,0.5+fNoOfMultipicityBins+1,sinP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<sin(n*(phi1-phi2-phi3))>> | |
1341 | } else | |
1342 | { | |
1343 | fNonIsotropicTermsVsMPro->Fill(8.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth), | |
1344 | cosP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<cos(n*(phi1-phi2-phi3))>> | |
1345 | fNonIsotropicTermsVsMPro->Fill(9.5,1.5+(Int_t)((dMult-fMinMultiplicity)/fMultipicityBinWidth), | |
1346 | sinP1nM1nM1n,dMult*(dMult-1.)*(dMult-2.)); // <<sin(n*(phi1-phi2-phi3))>> | |
1347 | } | |
1348 | } // end of if(dMult>2) | |
d66d46f7 | 1349 | } // end of if(!(fUsePhiWeights || fUsePtWeights || fUseEtaWeights)) |
1350 | ||
489d5531 | 1351 | // b) Calculate without using particle weights: |
d66d46f7 | 1352 | if(fUsePhiWeights || fUsePtWeights || fUseEtaWeights) |
1353 | { | |
1354 | ||
1355 | } // end of if(fUsePhiWeights || fUsePtWeights || fUseEtaWeights) | |
1356 | ||
1357 | } // end of void AliFlowAnalysisWithMixedHarmonics::CalculateNonIsotropicTerms() | |
1358 | ||
5c078806 | 1359 | //================================================================================================================ |
1360 | ||
1361 | void AliFlowAnalysisWithMixedHarmonics::CalculateDifferential3pCorrelator() | |
1362 | { | |
1363 | // Calculate differential 3-p azimuthal correlator cos[n(2phi1-psi2-psi3)] in terms of Q_{2n} and p_{n}. | |
1364 | ||
1365 | // a) Calculate differential 3-p correlator without using particle weights; | |
1366 | // b) Calculate differential 3-p correlator with using particle weights. | |
1367 | ||
1368 | // a) Calculate differential 3-p correlator without using particle weights: | |
1369 | if(!(fUsePhiWeights || fUsePtWeights || fUseEtaWeights)) | |
1370 | { | |
1371 | // Multiplicity (number of RPs): | |
1372 | Double_t dMult = (*fSpk)(0,0); | |
1373 | // Real and imaginary parts of non-weighted Q-vectors (Q_{n,0}) evaluated in harmonic 2n: | |
1374 | Double_t dReQ2n = (*fReQnk)(1,0); | |
1375 | Double_t dImQ2n = (*fImQnk)(1,0); | |
1376 | for(Int_t sd=0;sd<2;sd++) // [(p1+p2)/2,|p1-p2|] | |
1377 | { | |
1378 | // looping over all bins and calculating reduced correlations: | |
1379 | for(Int_t b=1;b<=fnBinsPt;b++) | |
1380 | { | |
1381 | // real and imaginary parts of p_{n}: | |
1382 | Double_t p1nRe = fRePEBE[sd]->GetBinContent(b)*fRePEBE[sd]->GetBinEntries(b); | |
1383 | Double_t p1nIm = fImPEBE[sd]->GetBinContent(b)*fImPEBE[sd]->GetBinEntries(b); | |
1384 | // number of pairs of POIs in particular (p1+p2)/2 or |p1-p2| bin: | |
1385 | Double_t mp = fRePEBE[sd]->GetBinEntries(b); | |
1386 | Double_t cosP2nphi1M1npsi2M1npsi2 = 0; // cos[n(2phi1-psi2-psi3)] | |
1387 | if(mp*dMult>0.) | |
1388 | { | |
1389 | cosP2nphi1M1npsi2M1npsi2 = (p1nRe*dReQ2n+p1nIm*dImQ2n)/(mp*dMult); | |
1390 | } | |
1391 | f3pCorrelatorVsPtSumDiffPro[sd]->Fill(fPtMin+(b-1)*fPtBinWidth,cosP2nphi1M1npsi2M1npsi2,mp*dMult); | |
1392 | } // end of for(Int_t b=1;b<=fnBinsPt;b++) | |
1393 | } // end of for(Int_t sd=0;sd<2;sd++) | |
1394 | } // end of if(!(fUsePhiWeights || fUsePtWeights || fUseEtaWeights)) | |
1395 | ||
1396 | // b) Calculate differential 3-p correlator by using particle weights: | |
1397 | if(fUsePhiWeights || fUsePtWeights || fUseEtaWeights) | |
1398 | { | |
1399 | ||
1400 | } // end of if(fUsePhiWeights || fUsePtWeights || fUseEtaWeights) | |
1401 | ||
1402 | } // end of void AliFlowAnalysisWithMixedHarmonics::CalculateDifferential3pCorrelator() | |
1403 | ||
1404 | //================================================================================================================ | |
1405 |