]>
Commit | Line | Data |
---|---|---|
bc92c0cb | 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 | * * | |
52021ae2 | 7 | * Permission to use, copy, modify and distribute this software and its * |
bc92c0cb | 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. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /************************************** | |
17 | * analysis task for Q-cumulants * | |
18 | * * | |
19 | * authors: Naomi van der Kolk * | |
20 | * (kolk@nikhef.nl) * | |
21 | * Raimond Snellings * | |
22 | * (snelling@nikhef.nl) * | |
23 | * Ante Bilandzic * | |
24 | * (anteb@nikhef.nl) * | |
25 | * ***********************************/ | |
26 | ||
27 | #include "Riostream.h" | |
28 | #include "TChain.h" | |
29 | #include "TTree.h" | |
30 | #include "TFile.h" | |
31 | #include "TList.h" | |
32 | #include "TH1.h" | |
e085f1a9 | 33 | #include "TGraph.h" |
bc92c0cb | 34 | #include "TProfile.h" |
35 | #include "TProfile2D.h" | |
36 | #include "TProfile3D.h" | |
37 | ||
38 | #include "AliAnalysisTask.h" | |
39 | #include "AliAnalysisDataSlot.h" | |
40 | #include "AliAnalysisDataContainer.h" | |
41 | #include "AliAnalysisManager.h" | |
42 | ||
43 | #include "AliESDEvent.h" | |
44 | #include "AliESDInputHandler.h" | |
45 | ||
46 | #include "AliAODEvent.h" | |
47 | #include "AliAODInputHandler.h" | |
48 | ||
49 | #include "AliMCEventHandler.h" | |
50 | #include "AliMCEvent.h" | |
51 | ||
29b61d43 | 52 | #include "AliCFManager.h" |
bc92c0cb | 53 | |
54 | #include "AliAnalysisTaskQCumulants.h" | |
55 | #include "AliFlowEventSimpleMaker.h" | |
56 | #include "AliFlowAnalysisWithQCumulants.h" | |
57 | #include "AliFlowCumuConstants.h" | |
58 | #include "AliFlowCommonConstants.h" | |
7e58a232 | 59 | #include "AliFlowCommonHist.h" |
bc92c0cb | 60 | #include "AliFlowCommonHistResults.h" |
61 | #include "AliQCumulantsFunctions.h" | |
62 | ||
63 | ClassImp(AliAnalysisTaskQCumulants) | |
64 | ||
65 | //================================================================================================================ | |
66 | ||
e04e4ec5 | 67 | AliAnalysisTaskQCumulants::AliAnalysisTaskQCumulants(const char *name, Bool_t on, Bool_t useWeights): |
bc92c0cb | 68 | AliAnalysisTask(name,""), |
69 | fESD(NULL), | |
70 | fAOD(NULL), | |
71 | fQCA(NULL),//Q-cumulant Analysis (QCA) object | |
72 | fEventMaker(NULL), | |
73 | fAnalysisType("ESD"), | |
74 | fCFManager1(NULL), | |
75 | fCFManager2(NULL), | |
76 | fListHistos(NULL), | |
77 | fQAInt(NULL), | |
78 | fQADiff(NULL), | |
e04e4ec5 | 79 | fQA(on), |
80 | fUseWeights(useWeights), | |
81 | fUsePhiWeights(kFALSE), | |
82 | fUsePtWeights(kFALSE), | |
83 | fUseEtaWeights(kFALSE), | |
84 | fListWeights(NULL) | |
bc92c0cb | 85 | { |
86 | //constructor | |
87 | cout<<"AliAnalysisTaskQCumulants::AliAnalysisTaskQCumulants(const char *name)"<<endl; | |
88 | ||
89 | // Define input and output slots here | |
90 | // Input slot #0 works with a TChain | |
91 | DefineInput(0, TChain::Class()); | |
92 | ||
e04e4ec5 | 93 | // Input slot #1 is needed for the weights |
94 | if(useWeights) | |
95 | { | |
96 | DefineInput(1, TList::Class()); | |
97 | } | |
98 | ||
bc92c0cb | 99 | // Output slot #0 writes into a TList container |
100 | DefineOutput(0, TList::Class()); | |
101 | if(on) | |
102 | { | |
103 | DefineOutput(1, TList::Class()); | |
104 | DefineOutput(2, TList::Class()); | |
105 | } | |
e04e4ec5 | 106 | |
bc92c0cb | 107 | } |
108 | ||
109 | AliAnalysisTaskQCumulants::AliAnalysisTaskQCumulants(): | |
110 | fESD(NULL), | |
111 | fAOD(NULL), | |
112 | fQCA(NULL),//Q-cumulant Analysis (QCA) object | |
113 | fEventMaker(NULL), | |
114 | fAnalysisType("ESD"), | |
115 | fCFManager1(NULL), | |
116 | fCFManager2(NULL), | |
117 | fListHistos(NULL), | |
118 | fQAInt(NULL), | |
119 | fQADiff(NULL), | |
e04e4ec5 | 120 | fQA(kFALSE), |
121 | fUseWeights(kFALSE), | |
122 | fUsePhiWeights(kFALSE), | |
123 | fUsePtWeights(kFALSE), | |
124 | fUseEtaWeights(kFALSE), | |
125 | fListWeights(NULL) | |
bc92c0cb | 126 | { |
127 | //dummy constructor | |
128 | cout<<"AliAnalysisTaskQCumulants::AliAnalysisTaskQCumulants()"<<endl; | |
129 | } | |
130 | ||
131 | //================================================================================================================ | |
132 | ||
133 | void AliAnalysisTaskQCumulants::ConnectInputData(Option_t *) | |
134 | { | |
135 | //connect ESD or AOD (called once) | |
136 | cout<<"AliAnalysisTaskQCumulants::ConnectInputData(Option_t *)"<<endl; | |
137 | ||
138 | TTree* tree = dynamic_cast<TTree*> (GetInputData(0)); | |
139 | if (!tree) | |
140 | { | |
141 | Printf("ERROR: Could not read chain from input slot 0"); | |
142 | } | |
143 | else | |
144 | { | |
145 | //disable all branches and enable only the needed ones | |
146 | if (fAnalysisType == "MC") { | |
147 | // we want to process only MC | |
148 | tree->SetBranchStatus("*", kFALSE); | |
149 | ||
150 | AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); | |
151 | ||
152 | if (!esdH) { | |
153 | Printf("ERROR: Could not get ESDInputHandler"); | |
154 | } else { | |
155 | fESD = esdH->GetEvent(); | |
156 | } | |
157 | } | |
158 | else if (fAnalysisType == "ESD" || fAnalysisType == "ESDMC0" || fAnalysisType == "ESDMC1" ) { | |
159 | tree->SetBranchStatus("*", kFALSE); | |
160 | tree->SetBranchStatus("Tracks.*", kTRUE); | |
161 | ||
162 | AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); | |
163 | ||
164 | if (!esdH) { | |
165 | Printf("ERROR: Could not get ESDInputHandler"); | |
166 | } else | |
167 | fESD = esdH->GetEvent(); | |
168 | } | |
169 | else if (fAnalysisType == "AOD") { | |
170 | AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); | |
171 | ||
172 | if (!aodH) { | |
173 | Printf("ERROR: Could not get AODInputHandler"); | |
174 | } | |
175 | else { | |
176 | fAOD = aodH->GetEvent(); | |
177 | } | |
178 | } | |
179 | else { | |
180 | Printf("Wrong analysis type: Only ESD, ESDMC0, ESDMC1, AOD and MC types are allowed!"); | |
181 | ||
182 | } | |
183 | } | |
184 | } | |
185 | ||
186 | //================================================================================================================ | |
187 | ||
188 | void AliAnalysisTaskQCumulants::CreateOutputObjects() | |
189 | { | |
190 | //called at every worker node to initialize | |
191 | cout<<"AliAnalysisTaskQCumulants::CreateOutputObjects()"<<endl; | |
192 | ||
193 | ||
194 | //OpenFile(0); | |
195 | ||
196 | ||
197 | if(!(fAnalysisType == "AOD" || fAnalysisType == "ESD" || fAnalysisType == "ESDMC0" || fAnalysisType == "ESDMC1" || fAnalysisType == "MC")) | |
198 | { | |
199 | cout<<"WRONG ANALYSIS TYPE! only ESD, ESDMC0, ESDMC1, AOD and MC are allowed."<<endl; | |
200 | exit(1); | |
201 | } | |
202 | ||
203 | //event maker | |
204 | fEventMaker = new AliFlowEventSimpleMaker(); | |
8842fb2b | 205 | |
bc92c0cb | 206 | //analyser |
207 | fQCA = new AliFlowAnalysisWithQCumulants(); | |
e085f1a9 | 208 | fQCA->Init(); |
e04e4ec5 | 209 | |
210 | //weights: | |
211 | if(fUseWeights) | |
212 | { | |
213 | //pass the flags to class: | |
214 | if(fUsePhiWeights) fQCA->SetUsePhiWeights(fUsePhiWeights); | |
215 | if(fUsePtWeights) fQCA->SetUsePtWeights(fUsePtWeights); | |
216 | if(fUseEtaWeights) fQCA->SetUseEtaWeights(fUseEtaWeights); | |
217 | //get data from input slot #1 which is used for weights: | |
218 | if(GetNinputs()==2) | |
219 | { | |
220 | fListWeights = (TList*)GetInputData(1); | |
221 | } | |
222 | //pass the list with weights to class: | |
223 | if(fListWeights) fQCA->SetWeightsList(fListWeights); | |
224 | } | |
225 | ||
bc92c0cb | 226 | if(fQCA->GetHistList()) |
227 | { | |
228 | fListHistos = fQCA->GetHistList(); | |
229 | //fListHistos->Print(); | |
230 | } | |
231 | else | |
232 | { | |
233 | Printf("ERROR: Could not retrieve histogram list"); | |
234 | } | |
e04e4ec5 | 235 | |
bc92c0cb | 236 | //PostData(0,fListHistos); |
237 | ||
238 | } | |
239 | ||
240 | //================================================================================================================ | |
241 | ||
242 | void AliAnalysisTaskQCumulants::Exec(Option_t *) | |
243 | { | |
244 | //main loop (called for each event) | |
245 | if (fAnalysisType == "MC") { | |
246 | // Process MC truth, therefore we receive the AliAnalysisManager and ask it for the AliMCEventHandler | |
247 | // This handler can return the current MC event | |
248 | ||
249 | AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()); | |
250 | if (!eventHandler) { | |
251 | Printf("ERROR: Could not retrieve MC event handler"); | |
252 | return; | |
253 | } | |
254 | ||
255 | AliMCEvent* mcEvent = eventHandler->MCEvent(); | |
256 | if (!mcEvent) { | |
257 | Printf("ERROR: Could not retrieve MC event"); | |
258 | return; | |
259 | } | |
260 | ||
261 | Printf("MC particles: %d", mcEvent->GetNumberOfTracks()); | |
262 | fCFManager1->SetEventInfo(mcEvent); | |
263 | fCFManager2->SetEventInfo(mcEvent); | |
264 | ||
265 | //Q-cumulant analysis | |
266 | AliFlowEventSimple* fEvent = fEventMaker->FillTracks(mcEvent,fCFManager1,fCFManager2); | |
267 | fQCA->Make(fEvent); | |
268 | delete fEvent; | |
269 | } | |
270 | else if (fAnalysisType == "ESD") { | |
271 | if (!fESD) { | |
272 | Printf("ERROR: fESD not available"); | |
273 | return; | |
274 | } | |
275 | Printf("There are %d tracks in this event", fESD->GetNumberOfTracks()); | |
276 | ||
1315fe58 | 277 | //Q-cumulant analysis |
1dfa3c16 | 278 | AliFlowEventSimple* fEvent = fEventMaker->FillTracks(fESD,fCFManager1,fCFManager2);//cuts |
1315fe58 | 279 | //AliFlowEventSimple* fEvent = fEventMaker->FillTracks(fESD); |
8842fb2b | 280 | |
1315fe58 | 281 | fQCA->Make(fEvent); |
8842fb2b | 282 | |
bc92c0cb | 283 | delete fEvent; |
284 | } | |
285 | else if (fAnalysisType == "ESDMC0") { | |
286 | if (!fESD) { | |
287 | Printf("ERROR: fESD not available"); | |
288 | return; | |
289 | } | |
290 | Printf("There are %d tracks in this event", fESD->GetNumberOfTracks()); | |
291 | ||
292 | AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()); | |
293 | if (!eventHandler) { | |
294 | Printf("ERROR: Could not retrieve MC event handler"); | |
295 | return; | |
296 | } | |
297 | ||
298 | AliMCEvent* mcEvent = eventHandler->MCEvent(); | |
299 | if (!mcEvent) { | |
300 | Printf("ERROR: Could not retrieve MC event"); | |
301 | return; | |
302 | } | |
303 | ||
304 | fCFManager1->SetEventInfo(mcEvent); | |
305 | fCFManager2->SetEventInfo(mcEvent); | |
306 | ||
307 | //Q-cumulant analysis | |
308 | AliFlowEventSimple* fEvent=NULL; | |
309 | if (fAnalysisType == "ESDMC0") { | |
310 | fEvent = fEventMaker->FillTracks(fESD, mcEvent, fCFManager1, fCFManager2, 0); //0 = kine from ESD, 1 = kine from MC | |
311 | } else if (fAnalysisType == "ESDMC1") { | |
312 | fEvent = fEventMaker->FillTracks(fESD, mcEvent, fCFManager1, fCFManager2, 1); //0 = kine from ESD, 1 = kine from MC | |
313 | } | |
314 | fQCA->Make(fEvent); | |
315 | delete fEvent; | |
316 | //delete mcEvent; | |
317 | } | |
318 | ||
319 | else if (fAnalysisType == "AOD") { | |
320 | if (!fAOD) { | |
321 | Printf("ERROR: fAOD not available"); | |
322 | return; | |
323 | } | |
324 | Printf("There are %d tracks in this event", fAOD->GetNumberOfTracks()); | |
325 | ||
326 | // analysis | |
327 | //For the moment don't use CF //AliFlowEventSimple* fEvent = fEventMaker->FillTracks(fAOD,fCFManager1,fCFManager2); | |
328 | AliFlowEventSimple* fEvent = fEventMaker->FillTracks(fAOD); | |
329 | fQCA->Make(fEvent); | |
330 | delete fEvent; | |
331 | } | |
332 | ||
333 | PostData(0,fListHistos); | |
334 | if(fQA) | |
335 | { | |
336 | PostData(1,fQAInt); | |
337 | PostData(2,fQADiff); | |
e04e4ec5 | 338 | } |
bc92c0cb | 339 | } |
340 | ||
341 | //================================================================================================================ | |
342 | ||
343 | void AliAnalysisTaskQCumulants::Terminate(Option_t *) | |
8842fb2b | 344 | { |
bc92c0cb | 345 | //accessing the output list which contains the merged 2D and 3D profiles from all worker nodes |
346 | fListHistos = (TList*)GetOutputData(0); | |
347 | //fListHistos->Print(); | |
e04e4ec5 | 348 | |
bc92c0cb | 349 | if(fListHistos) |
350 | { | |
8842fb2b | 351 | //final results (integrated flow) |
1315fe58 | 352 | TH1D *intFlowResults = dynamic_cast<TH1D*>(fListHistos->FindObject("fIntFlowResultsQC")); |
bc92c0cb | 353 | |
8842fb2b | 354 | //final results (differential flow) |
1315fe58 | 355 | TH1D *diffFlowResults2ndOrder = dynamic_cast<TH1D*>(fListHistos->FindObject("fDiffFlowResults2ndOrderQC")); |
356 | TH1D *diffFlowResults4thOrder = dynamic_cast<TH1D*>(fListHistos->FindObject("fDiffFlowResults4thOrderQC")); | |
bc92c0cb | 357 | |
8842fb2b | 358 | //final results for covariances (1st bin <2*4>-<2>*<4>, 2nd bin <2*6>-<2>*<6>, ...) |
1315fe58 | 359 | TH1D *covariances = dynamic_cast<TH1D*>(fListHistos->FindObject("fCovariances")); |
bc92c0cb | 360 | |
7e58a232 | 361 | //common control histograms (taking into account only the events with 2 and more particles) |
362 | AliFlowCommonHist *commonHist2nd = dynamic_cast<AliFlowCommonHist*>(fListHistos->FindObject("AliFlowCommonHist2ndOrderQC")); | |
363 | ||
364 | //common control histograms (taking into account only the events with 4 and more particles) | |
365 | AliFlowCommonHist *commonHist4th = dynamic_cast<AliFlowCommonHist*>(fListHistos->FindObject("AliFlowCommonHist4thOrderQC")); | |
366 | ||
367 | //common control histograms (taking into account only the events with 6 and more particles) | |
368 | AliFlowCommonHist *commonHist6th = dynamic_cast<AliFlowCommonHist*>(fListHistos->FindObject("AliFlowCommonHist6thOrderQC")); | |
369 | ||
370 | //common control histograms (taking into account only the events with 8 and more particles) | |
371 | AliFlowCommonHist *commonHist8th = dynamic_cast<AliFlowCommonHist*>(fListHistos->FindObject("AliFlowCommonHist8thOrderQC")); | |
372 | ||
8842fb2b | 373 | //common histograms to store the final results for the 2nd order integrated and differential flow |
374 | AliFlowCommonHistResults *commonHistRes2nd = dynamic_cast<AliFlowCommonHistResults*>(fListHistos->FindObject("AliFlowCommonHistResults2ndOrderQC")); | |
bc92c0cb | 375 | |
8842fb2b | 376 | //common histograms to store the final results for the 4th order integrated and differential flow |
377 | AliFlowCommonHistResults *commonHistRes4th = dynamic_cast<AliFlowCommonHistResults*>(fListHistos->FindObject("AliFlowCommonHistResults4thOrderQC")); | |
bc92c0cb | 378 | |
8842fb2b | 379 | //common histograms to store the final results for the 6th order integrated and differential flow |
380 | AliFlowCommonHistResults *commonHistRes6th = dynamic_cast<AliFlowCommonHistResults*>(fListHistos->FindObject("AliFlowCommonHistResults6thOrderQC")); | |
bc92c0cb | 381 | |
8842fb2b | 382 | //common histograms to store the final results for the 8th order integrated and differential flow |
383 | AliFlowCommonHistResults *commonHistRes8th = dynamic_cast<AliFlowCommonHistResults*>(fListHistos->FindObject("AliFlowCommonHistResults8thOrderQC")); | |
bc92c0cb | 384 | |
8842fb2b | 385 | //average selected multiplicity (for int. flow) |
386 | TProfile *AvMult = dynamic_cast<TProfile*>(fListHistos->FindObject("fAvMultIntFlowQC")); | |
bc92c0cb | 387 | |
e085f1a9 | 388 | //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
389 | // !!!! to be removed !!!! | |
390 | //profiles containing the Q-vectors from all events | |
391 | TProfile *qvectorForEachEventX = dynamic_cast<TProfile*>(fListHistos->FindObject("fQvectorForEachEventX")); | |
392 | TProfile *qvectorForEachEventY = dynamic_cast<TProfile*>(fListHistos->FindObject("fQvectorForEachEventY")); | |
393 | //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | |
394 | ||
8842fb2b | 395 | //multi-particle correlations calculated from Q-vectors |
396 | TProfile *QCorrelations = dynamic_cast<TProfile*>(fListHistos->FindObject("fQCorrelations")); | |
bc92c0cb | 397 | |
8842fb2b | 398 | //average of products: 1st bin: <2*4>, 2nd bin: <2*6>, ... |
399 | TProfile *QProduct = dynamic_cast<TProfile*>(fListHistos->FindObject("fQProduct")); | |
bc92c0cb | 400 | |
1dfa3c16 | 401 | //average 2-, 3- and 4-particle correlations per pt-bin |
ae733b3b | 402 | TProfile *binnedPt2p1n1nRP = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f2PerPtBin1n1nRP")); |
403 | TProfile *binnedPt2p2n2nRP = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f2PerPtBin2n2nRP")); | |
404 | TProfile *binnedPt3p2n1n1nRP = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f3PerPtBin2n1n1nRP")); | |
405 | TProfile *binnedPt3p1n1n2nRP = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f3PerPtBin1n1n2nRP")); | |
406 | TProfile *binnedPt4p1n1n1n1nRP = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f4PerPtBin1n1n1n1nRP")); | |
1dfa3c16 | 407 | |
408 | //average 2-, 3- and 4-particle correlations per eta-bin | |
ae733b3b | 409 | TProfile *binnedEta2p1n1nRP = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f2PerEtaBin1n1nRP")); |
410 | TProfile *binnedEta2p2n2nRP = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f2PerEtaBin2n2nRP")); | |
411 | TProfile *binnedEta3p2n1n1nRP = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f3PerEtaBin2n1n1nRP")); | |
412 | TProfile *binnedEta3p1n1n2nRP = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f3PerEtaBin1n1n2nRP")); | |
413 | TProfile *binnedEta4p1n1n1n1nRP = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f4PerEtaBin1n1n1n1nRP")); | |
1dfa3c16 | 414 | |
415 | //average 2-, 3- and 4-particle correlations per pt-bin | |
ae733b3b | 416 | TProfile *binnedPt2p1n1nPOI = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f2PerPtBin1n1nPOI")); |
417 | TProfile *binnedPt2p2n2nPOI = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f2PerPtBin2n2nPOI")); | |
418 | TProfile *binnedPt3p2n1n1nPOI = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f3PerPtBin2n1n1nPOI")); | |
419 | TProfile *binnedPt3p1n1n2nPOI = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f3PerPtBin1n1n2nPOI")); | |
420 | TProfile *binnedPt4p1n1n1n1nPOI = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f4PerPtBin1n1n1n1nPOI")); | |
1dfa3c16 | 421 | |
422 | //average 2-, 3- and 4-particle correlations per eta-bin | |
ae733b3b | 423 | TProfile *binnedEta2p1n1nPOI = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f2PerEtaBin1n1nPOI")); |
424 | TProfile *binnedEta2p2n2nPOI = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f2PerEtaBin2n2nPOI")); | |
425 | TProfile *binnedEta3p2n1n1nPOI = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f3PerEtaBin2n1n1nPOI")); | |
426 | TProfile *binnedEta3p1n1n2nPOI = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f3PerEtaBin1n1n2nPOI")); | |
427 | TProfile *binnedEta4p1n1n1n1nPOI = dynamic_cast<TProfile*>((dynamic_cast<TList*>(fListHistos->FindObject("DifferentialFlow")))->FindObject("f4PerEtaBin1n1n1n1nPOI")); | |
e085f1a9 | 428 | |
8842fb2b | 429 | //average values of Q-vector components (1st bin: <Q_x>, 2nd bin: <Q_y>, 3rd bin: <(Q_x)^2>, 4th bin: <(Q_y)^2>) |
430 | TProfile *QVectorComponents = dynamic_cast<TProfile*>(fListHistos->FindObject("fQvectorComponents")); | |
431 | ||
432 | //multi-particle correlations calculated with nested loop | |
433 | TProfile *DirectCorrelations = dynamic_cast<TProfile*>(fListHistos->FindObject("fDirectCorrelations")); | |
434 | ||
52021ae2 | 435 | //---------------------------------------------------- |
8842fb2b | 436 | |
437 | fQCA = new AliFlowAnalysisWithQCumulants(); | |
438 | ||
439 | fQCA->SetIntFlowResults(intFlowResults); | |
440 | fQCA->SetDiffFlowResults2nd(diffFlowResults2ndOrder); | |
441 | fQCA->SetDiffFlowResults4th(diffFlowResults4thOrder); | |
442 | fQCA->SetCovariances(covariances); | |
7e58a232 | 443 | |
444 | fQCA->SetCommonHists2nd(commonHist2nd); | |
445 | fQCA->SetCommonHists4th(commonHist4th); | |
446 | fQCA->SetCommonHists6th(commonHist6th); | |
447 | fQCA->SetCommonHists8th(commonHist8th); | |
8842fb2b | 448 | |
449 | fQCA->SetCommonHistsResults2nd(commonHistRes2nd); | |
450 | fQCA->SetCommonHistsResults4th(commonHistRes4th); | |
451 | fQCA->SetCommonHistsResults6th(commonHistRes6th); | |
452 | fQCA->SetCommonHistsResults8th(commonHistRes8th); | |
453 | ||
454 | fQCA->SetAverageMultiplicity(AvMult); | |
e085f1a9 | 455 | //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
456 | // !!!! to be removed !!!! | |
457 | fQCA->SetQvectorForEachEventX(qvectorForEachEventX); | |
458 | fQCA->SetQvectorForEachEventY(qvectorForEachEventY); | |
459 | //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | |
8842fb2b | 460 | fQCA->SetQCorrelations(QCorrelations); |
461 | fQCA->SetQProduct(QProduct); | |
462 | fQCA->SetQVectorComponents(QVectorComponents); | |
463 | ||
1dfa3c16 | 464 | fQCA->SetTwo1n1nPerPtBinRP(binnedPt2p1n1nRP); |
465 | fQCA->SetTwo2n2nPerPtBinRP(binnedPt2p2n2nRP); | |
466 | fQCA->SetThree2n1n1nPerPtBinRP(binnedPt3p2n1n1nRP); | |
467 | fQCA->SetThree1n1n2nPerPtBinRP(binnedPt3p1n1n2nRP); | |
468 | fQCA->SetFour1n1n1n1nPerPtBinRP(binnedPt4p1n1n1n1nRP); | |
469 | ||
470 | fQCA->SetTwo1n1nPerEtaBinRP(binnedEta2p1n1nRP); | |
471 | fQCA->SetTwo2n2nPerEtaBinRP(binnedEta2p2n2nRP); | |
472 | fQCA->SetThree2n1n1nPerEtaBinRP(binnedEta3p2n1n1nRP); | |
473 | fQCA->SetThree1n1n2nPerEtaBinRP(binnedEta3p1n1n2nRP); | |
474 | fQCA->SetFour1n1n1n1nPerEtaBinRP(binnedEta4p1n1n1n1nRP); | |
475 | ||
476 | fQCA->SetTwo1n1nPerPtBinPOI(binnedPt2p1n1nPOI); | |
477 | fQCA->SetTwo2n2nPerPtBinPOI(binnedPt2p2n2nPOI); | |
478 | fQCA->SetThree2n1n1nPerPtBinPOI(binnedPt3p2n1n1nPOI); | |
479 | fQCA->SetThree1n1n2nPerPtBinPOI(binnedPt3p1n1n2nPOI); | |
480 | fQCA->SetFour1n1n1n1nPerPtBinPOI(binnedPt4p1n1n1n1nPOI); | |
481 | ||
482 | fQCA->SetTwo1n1nPerEtaBinPOI(binnedEta2p1n1nPOI); | |
483 | fQCA->SetTwo2n2nPerEtaBinPOI(binnedEta2p2n2nPOI); | |
484 | fQCA->SetThree2n1n1nPerEtaBinPOI(binnedEta3p2n1n1nPOI); | |
485 | fQCA->SetThree1n1n2nPerEtaBinPOI(binnedEta3p1n1n2nPOI); | |
486 | fQCA->SetFour1n1n1n1nPerEtaBinPOI(binnedEta4p1n1n1n1nPOI); | |
bc92c0cb | 487 | |
8842fb2b | 488 | fQCA->SetDirectCorrelations(DirectCorrelations); |
bc92c0cb | 489 | |
8842fb2b | 490 | fQCA->Finish(); |
52021ae2 | 491 | |
492 | //---------------------------------------------------- | |
bc92c0cb | 493 | } |
494 | else | |
495 | { | |
ae733b3b | 496 | cout<<" WARNING: QC histogram list pointer is NULL."<<endl; |
497 | cout<<endl; | |
bc92c0cb | 498 | } |
499 | } | |
500 | ||
501 | ||
502 | ||
503 | ||
504 | ||
505 | ||
506 | ||
507 | ||
508 | ||
509 | ||
510 | ||
511 | ||
512 | ||
513 | ||
514 | ||
515 | ||
516 | ||
517 | ||
518 | ||
519 | ||
520 |