]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FLOW/macros/showSpread.C
fix include limits.h
[u/mrichter/AliRoot.git] / PWG2 / FLOW / macros / showSpread.C
CommitLineData
0328db2d 1// ...
2
e47370f7 3enum libModes {mLocal,mLocalSource};
e47370f7 4
0328db2d 5const Int_t nFilesMax = 10; // number of files to be accessed to estimate spread
6
7Bool_t showPlotForReferenceFlow = kTRUE;
8Bool_t showPlotForIntegratedFlowRP = kTRUE;
9Bool_t showPlotForIntegratedFlowPOI = kTRUE;
10Bool_t showErrorOnMergedResult = kTRUE;
11
12const Int_t nMethods = 13;
13TString method[nMethods] = {"MCEP","SP","2,GFC","2,QC","4,GFC","4,QC","6,GFC","6,QC","8,GFC","8,QC","FQD","LYZ1SUM","LYZ1PROD"};
14Int_t methodMarkerStyle[nMethods] = {21,21,21,21,21,21,21,21,21,21,21,21,21};
15Int_t methodMarkerColor[nMethods] = {kGray+1,kViolet-8,kBlue-9,kRed-7,kBlue-9,kRed-7,kBlue-9,kRed-7,kBlue-9,kRed-7,kOrange-8,kYellow-5,kYellow-2};
16Int_t methodMeshColor[nMethods] = {kGray,kViolet-9,kBlue-10,kRed-10,kBlue-10,kRed-10,kBlue-10,kRed-10,kBlue-10,kRed-10,kOrange-9,kYellow-8,kYellow-6};
17
18/*
19const Int_t nMethods = 4;
20TString method[nMethods] = {"2,QC","4,QC","6,QC","8,QC"};
21Int_t methodMarkerStyle[nMethods] = {21,21,21,21};
22Int_t methodMarkerColor[nMethods] = {kRed-7,kRed-7,kRed-7,kRed-7};
23Int_t methodMeshColor[nMethods] = {kRed-10,kRed-10,kRed-10,kRed-10};
24*/
25
9455e15e 26void showSpread(TString type="", Int_t mode=mLocal)
6a6afe42 27{
940a5ed1 28 // type: type of analysis can be ESD, AOD, MC, ESDMCkineESD, ESDMCkineMC
0328db2d 29 // (if type="" output files are from MC simulation (default))
30 // mode: if mode = mLocal: analyze data on your computer using aliroot
31 // if mode = mLocalSource: analyze data on your computer using root + source files
95de4bf0 32
0328db2d 33 // Cross-check if the user's settings make sense:
34 CrossCheckUserSettings();
6a6afe42 35
0328db2d 36 // Load needed libraries:
37 LoadLibrariesSS(mode);
38
39 // Output file name:
40 TString outputFileName = "AnalysisResults.root";
e47370f7 41
0328db2d 42 // Labels for reference flow, integrated flow of RPs and of POIs:
43 TString label[3] = {"","RP","POI"};
44
45 // Standard magic:
46 TString *baseDirPath = new TString(gSystem->pwd());
47 TSystemDirectory *baseDir = new TSystemDirectory(".",baseDirPath->Data());
48 TList *listOfFilesInBaseDir = baseDir->GetListOfFiles();
49 TStopwatch timer;
50 timer.Start();
51 // listOfFilesInBaseDir->Print();
52 Int_t nFiles = listOfFilesInBaseDir->GetEntries();
53 Int_t fileCounter = 0;
54 Double_t result[nMethods][3][nFilesMax] = {{{0.}}}; // [3 = "", "RP" or "POI"]
55 Double_t error[nMethods][3][nFilesMax] = {{{0.}}}; // [3 = "", "RP" or "POI"]
56 Double_t resultMinMax[nMethods][3][2] = {{{0.}}}; // [3 = "", "RP" or "POI"], [2 = min value, max value]
57 for(Int_t m=0;m<nMethods;m++)
6a6afe42 58 {
0328db2d 59 for(Int_t l=0;l<3;l++)
6a6afe42 60 {
0328db2d 61 resultMinMax[m][l][0] = 44.;
62 resultMinMax[m][l][1] = -44.;
63 }
64 }
65 Double_t styleHistMinMax[3][2] = {{0.}}; // [3 = "", "RP" or "POI"], [2 = min value, max value]
66 for(Int_t l=0;l<3;l++)
9455e15e 67 {
0328db2d 68 styleHistMinMax[l][0] = 44.;
69 styleHistMinMax[l][1] = -44.;
70 }
71 cout<<endl;
72 for(Int_t iFile=0;iFile<nFiles;iFile++)
9455e15e 73 {
0328db2d 74 TSystemFile *currentFile = (TSystemFile*)listOfFilesInBaseDir->At(iFile);
75 // Consider only subdirectories:
76 if(!currentFile ||
77 !currentFile->IsDirectory() ||
78 strcmp(currentFile->GetName(), ".") == 0 ||
79 strcmp(currentFile->GetName(), "..") == 0) continue;
80 // Accessing the output file "AnalysisResults.root" in current subdirectory:
81 TString currentSubDirName = baseDirPath->Data();
82 (currentSubDirName+="/")+=currentFile->GetName();
83 currentSubDirName+="/";
84 TString fileName = currentSubDirName;
85 fileName+=outputFileName.Data();
86 if(!(gSystem->AccessPathName(fileName.Data(),kFileExists)))
87 {
88 TFile *file = NULL;
89 file = TFile::Open(fileName.Data(),"READ");
90 for(Int_t m=0;m<nMethods;m++)
91 {
92 // Access from common output file the output file for particular method:
93 TDirectoryFile *methodFile = NULL;
94 methodFile = GetMethodFile(file,method[m],type);
95 for(Int_t l=0;l<3;l++)
6a6afe42 96 {
0328db2d 97 TH1D *histResult = NULL;
98 histResult = GetHistogramWithResult(method[m],label[l],methodFile);
99 if(histResult)
6a6afe42 100 {
0328db2d 101 // Access the results:
102 result[m][l][fileCounter] = histResult->GetBinContent(1);
103 // Access the errors:
104 error[m][l][fileCounter] = histResult->GetBinError(1);
105 if(TMath::Abs(result[m][l][fileCounter])>pow(10.,-6.)) // take into account only if != 0 (to be improved - special care for < 0 is required)
9455e15e 106 {
0328db2d 107 // Establish min and max values for results:
108 if(resultMinMax[m][l][0] > result[m][l][fileCounter]) resultMinMax[m][l][0] = result[m][l][fileCounter]; // min value
109 if(resultMinMax[m][l][1] < result[m][l][fileCounter]) resultMinMax[m][l][1] = result[m][l][fileCounter]; // max value
110 // Establish min and max values for style histograms:
111 if(styleHistMinMax[l][0] > result[m][l][fileCounter]) styleHistMinMax[l][0] = result[m][l][fileCounter]; // min value
112 if(styleHistMinMax[l][1] < result[m][l][fileCounter]) styleHistMinMax[l][1] = result[m][l][fileCounter]; // max value
9455e15e 113 }
9455e15e 114 }
0328db2d 115 } // end of for(Int_t l=0;l<3;l++)
116 } // end of for(Int_t m=0;m<nMethods;m++)
117 if(file) file->Close();
118 fileCounter++;
119 //if(fileCounter%10==0)
120 //{
121 cout<<Form("Accessed %d files \"AnalysisResults.root\" so far....",fileCounter)<<"\r"<<flush;
122 //}
123 }
124 if(fileCounter == nFilesMax) break;
125 } // end of for(Int_t iFile=0;iFile<nFiles;iFile++)
e47370f7 126
0328db2d 127 cout<<Form("Accessed %d files \"AnalysisResults.root\" in total to estimate spread. ",fileCounter)<<endl;
128 cout<<endl;
129 const Int_t nFilesFinal = fileCounter;
130
131 // Make for each method graph holding results:
132 TGraph *methodGraph[nMethods][3] = {{NULL}}; // [3 = "", "RP" or "POI"]
133 Double_t x[nMethods][nFilesFinal] = {{0.}};
134 for(Int_t m=0;m<nMethods;m++)
b5425e51 135 {
0328db2d 136 for(Int_t f=0;f<nFilesFinal;f++)
b5425e51 137 {
0328db2d 138 x[m][f]=m+0.5;
139 }
140 }
141 for(Int_t m=0;m<nMethods;m++)
142 {
143 for(Int_t l=0;l<3;l++)
b5425e51 144 {
0328db2d 145 methodGraph[m][l] = new TGraph(nFilesFinal,x[m],result[m][l]);
146 methodGraph[m][l]->SetMarkerStyle(methodMarkerStyle[m]);
147 methodGraph[m][l]->SetMarkerColor(methodMarkerColor[m]);
148 } // end of for(Int_t l=0;l<3;l++)
149 } // for(Int_t m=0;m<nMethods;m++)
150
151 // Make for each method coloured mesh out of min and max values:
152 Double_t meshWidth = 0.25;
153 TGraph *methodMesh[nMethods][3] = {{NULL}}; // [3 = "", "RP" or "POI"]
154 for(Int_t m=0;m<nMethods;m++)
155 {
156 for(Int_t l=0;l<3;l++)
b5425e51 157 {
0328db2d 158 if(resultMinMax[m][l][0]<44. && resultMinMax[m][l][1]>-44.)
159 {
160 methodMesh[m][l] = new TGraph(5);
161 methodMesh[m][l]->SetPoint(0,(m+1-0.5)-meshWidth,resultMinMax[m][l][0]);
162 methodMesh[m][l]->SetPoint(1,(m+1-0.5)+meshWidth,resultMinMax[m][l][0]);
163 methodMesh[m][l]->SetPoint(2,(m+1-0.5)+meshWidth,resultMinMax[m][l][1]);
164 methodMesh[m][l]->SetPoint(3,(m+1-0.5)-meshWidth,resultMinMax[m][l][1]);
165 methodMesh[m][l]->SetPoint(4,(m+1-0.5)-meshWidth,resultMinMax[m][l][0]);
166 methodMesh[m][l]->SetFillStyle(1001);
167 methodMesh[m][l]->SetFillColor(methodMeshColor[m]);
b5425e51 168 }
169 }
0328db2d 170 }
171
172 // Access for each method the results from the merged, large statistics file:
173 Double_t resultMerged[nMethods][3] = {{0.}}; // [3 = "", "RP" or "POI"]
174 TString mergedFileName = Form("%s%s%s",gSystem->pwd(),"/",outputFileName.Data());
175 TFile *mergedFile = NULL;
176 mergedFile = TFile::Open(mergedFileName.Data(),"READ");
177 for(Int_t m=0;m<nMethods;m++)
178 {
179 TDirectoryFile *methodFile = NULL;
180 if(!(gSystem->AccessPathName(fileName.Data(),kFileExists)))
b5425e51 181 {
0328db2d 182 if(mergedFile) methodFile = GetMethodFile(mergedFile,method[m],type);
183 } else
184 {
185 cout<<"WARNING: Couldn't find the merged, large statistics file "<<endl;
186 cout<<" "<<fileName.Data()<<endl;
187 cout<<" in directory "<<gSystem->pwd()<<" !!!!"<<endl;
188 cout<<" Use macros mergeOuput.C and redoFinish.C to get it."<<endl;
189 cout<<endl;
190 break;
191 }
192 for(Int_t l=0;l<3;l++)
b5425e51 193 {
0328db2d 194 TH1D *histResult = NULL;
195 if(methodFile)
196 {
197 histResult = GetHistogramWithResult(method[m],label[l],methodFile);
198 }
199 if(histResult)
b5425e51 200 {
0328db2d 201 // Access the results from the merged, large statistics file:
202 resultMerged[m][l] = histResult->GetBinContent(1);
203 } // end of for(Int_t l=0;l<3;l++)
b5425e51 204 }
0328db2d 205 } // end of for(Int_t m=0;m<nMethods;m++)
206 if(mergedFile) mergedFile->Close();
207
208 // Make for each method graph holding results from the merged, large statistics file
209 // and the errors from the randomly chosen small statistics file:
210 TGraphErrors *methodMergedGraph[nMethods][3] = {{NULL}}; // [3 = "", "RP" or "POI"]
211 Double_t xMerged[nMethods] = {0.};
212 for(Int_t m=0;m<nMethods;m++)
9455e15e 213 {
0328db2d 214 xMerged[m]=m+0.5;
9455e15e 215 }
0328db2d 216 // Select randomly small statistics file:
217 gRandom->SetSeed((UInt_t) (4400*timer.RealTime()/fileCounter));
218 Int_t randomFile = (Int_t)gRandom->Uniform(0,fileCounter);
219 for(Int_t m=0;m<nMethods;m++)
95de4bf0 220 {
0328db2d 221 for(Int_t l=0;l<3;l++)
222 {
223 methodMergedGraph[m][l] = new TGraphErrors(1);
224 methodMergedGraph[m][l]->SetPoint(0,xMerged[m],resultMerged[m][l]);
225 if(showErrorOnMergedResult) methodMergedGraph[m][l]->SetPointError(0,0.,error[m][l][randomFile]);
226 methodMergedGraph[m][l]->SetMarkerStyle(25);
227 methodMergedGraph[m][l]->SetMarkerColor(kBlack);
228 } // end of for(Int_t l=0;l<3;l++)
229 } // for(Int_t m=0;m<nMethods;m++)
230
231 // Final drawing:
232 gROOT->SetStyle("Plain"); // removing default gray color and setting white instead
233 gStyle->SetOptStat(0); // removing statistics box from all histograms
234 Bool_t showPlot[3] = {showPlotForReferenceFlow,showPlotForIntegratedFlowRP,showPlotForIntegratedFlowPOI};
235 TString title[3] = {"Reference Flow","Integrated Flow (RP)","Integrated Flow (POI)"}
236 TCanvas *canvas[3] = {NULL}; // [3 = "", "RP" or "POI"]
237 for(Int_t l=0;l<3;l++)
e47370f7 238 {
0328db2d 239 if(showPlot[l])
9455e15e 240 {
0328db2d 241 canvas[l] = new TCanvas(Form("%s",title[l].Data()),Form("%s",title[l].Data()));
242 TH1D *styleHist = StyleHist(title[l]);
243 styleHist->SetMinimum(0.99*styleHistMinMax[l][0]);
244 styleHist->SetMaximum(1.01*styleHistMinMax[l][1]);
245 styleHist->Draw();
246 for(Int_t m=0;m<nMethods;m++)
247 {
248 if(methodMesh[m][l]) methodMesh[m][l]->Draw("lfsame");
249 if(methodGraph[m][l]) methodGraph[m][l]->Draw("psame");
250 if(TMath::Abs(*(methodMergedGraph[m][l]->GetY()))>pow(10.,-6.)) // draw only if not == 0.
9455e15e 251 {
0328db2d 252 methodMergedGraph[m][l]->Draw("psame");
253 }
254 } // end of for(Int_t m=0;m<nMethods;m++)
255 } // end of if(showPlot[l])
256 } // end of for(Int_t l=0;l<3;l++)
e47370f7 257
0328db2d 258 timer.Stop();
259 timer.Print();
260 cout<<endl;
6a6afe42 261
0328db2d 262} // end of void showSpread(TString type="", Int_t mode=mLocal)
6a6afe42 263
0328db2d 264// =============================================================================================
6a6afe42 265
0328db2d 266TH1D *StyleHist(TString histTitle)
267{
268 // Make the style histogram.
269 Int_t n = 2; // harmonic (to be improved - access this from common control hist)
270 TH1D *styleHist = new TH1D(Form("%s",histTitle.Data()),Form("%s",histTitle.Data()),nMethods,0,nMethods);
271 styleHist->GetYaxis()->SetTickLength(0.01);
272 for(Int_t m=0;m<nMethods;m++)
273 {
274 styleHist->GetXaxis()->SetBinLabel(m+1,Form("v_{%d}{%s}",n,method[m].Data()));
275 if(method[m]=="LYZ1SUM" || method[m]=="LYZ2SUM")
276 {
277 styleHist->GetXaxis()->SetBinLabel(m+1,Form("v_{%d}{%s}",n,"LYZ,sum"));
278 }
279 else if(method[m]=="LYZ1PROD" || method[m]=="LYZ2PROD")
280 {
281 styleHist->GetXaxis()->SetBinLabel(m+1,Form("v_{%d}{%s}",n,"LYZ,prod"));
282 }
283 } // end of for(Int_t m=0;m<nMethods;m++)
6a6afe42 284
0328db2d 285 return styleHist;
286}
287
288// =============================================================================================
289
290TDirectoryFile* GetMethodFile(TFile *commonFile, TString method, TString type)
291{
292 // Form a file name for each method:
293 TString methodFileName = "output";
294 if(method.Contains("GFC"))
9455e15e 295 {
0328db2d 296 methodFileName+="GFC";
297 } else if(method.Contains("QC"))
9455e15e 298 {
0328db2d 299 methodFileName+="QC";
300 } else
301 {
302 methodFileName+=method.Data();
303 }
304 methodFileName+="analysis";
305 methodFileName+=type.Data();
306 TDirectoryFile *methodFile = NULL;
307 if(commonFile)
b78897bc 308 {
0328db2d 309 methodFile = (TDirectoryFile*)commonFile->FindObjectAny(methodFileName.Data());
310 }
b78897bc 311
0328db2d 312 return methodFile;
b78897bc 313
0328db2d 314} // end of TDirectoryFile* AccessMethodFile(TString commonFile, TString method, TString type)
b78897bc 315
0328db2d 316// =============================================================================================
e47370f7 317
0328db2d 318TH1D* GetHistogramWithResult(TString method, TString label, TDirectoryFile *methodFile)
319{
320 // Access first the common list holding all output histograms:
321 TList *methodList = NULL;
322 if(method.Contains("GFC"))
323 {
324 methodFile->GetObject("cobjGFC",methodList);
325 } else if(method.Contains("QC"))
326 {
327 methodFile->GetObject("cobjQC",methodList);
328 } else
329 {
330 methodFile->GetObject(Form("cobj%s",method.Data()),methodList);
331 }
332 // Access from the common list the needed histogram:
333 if(methodList)
334 {
335 AliFlowCommonHistResults *commonHistRes = NULL;
336 if(!(method.Contains("GFC") || method.Contains("QC")))
337 {
338 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject(Form("AliFlowCommonHistResults%s",method.Data()));
339 }
340 else if(method=="2,GFC")
341 {
342 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults2ndOrderGFC");
343 }
344 else if(method=="4,GFC")
345 {
346 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults4thOrderGFC");
347 }
348 else if(method=="6,GFC")
349 {
350 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults6thOrderGFC");
351 }
352 else if(method=="8,GFC")
353 {
354 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults8thOrderGFC");
355 }
356 else if(method=="2,QC")
357 {
358 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults2ndOrderQC");
359 }
360 else if(method=="4,QC")
361 {
362 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults4thOrderQC");
363 }
364 else if(method=="6,QC")
365 {
366 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults6thOrderQC");
367 }
368 else if(method=="8,QC")
369 {
370 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults8thOrderQC");
371 }
372 } // end of if(methodList)
b78897bc 373
0328db2d 374 // Access histogram with results for reference flow or integrated flow of RPs or POIs:
375 TH1D *hist = NULL;
376 if(label=="")
377 {
378 hist = commonHistRes->GetHistIntFlow();
379 } else if(label=="RP")
380 {
381 hist = commonHistRes->GetHistIntFlowRP();
382 } else if(label=="POI")
383 {
384 hist = commonHistRes->GetHistIntFlowPOI();
385 }
b78897bc 386
0328db2d 387 if(hist) return hist;
b78897bc 388
0328db2d 389} // end of TH1D *GetHistogramWithResult(TString method, TString rf_rp_poi, TString file);
390
391// =============================================================================================
392
393void CrossCheckUserSettings()
394{
395 // Check in this method if the user settings make sense.
48385911 396
0328db2d 397 if(nFilesMax<=0)
398 {
399 cout<<endl;
400 cout<<"WARNING: nFilesMax must be a positive integer (not too large, though) !!!!"<<endl;
401 cout<<endl;
402 exit(0);
b78897bc 403 }
0328db2d 404 if(nFilesMax>44)
b78897bc 405 {
0328db2d 406 cout<<endl;
407 cout<<"WARNING: You may want to set nFilesMax to the smaller value."<<endl;
408 cout<<" Otherwise you might wait forever to see the plots."<<endl;
409 }
b78897bc 410
0328db2d 411} // end of void CrossCheckUserSettings()
e47370f7 412
0328db2d 413// =============================================================================================
414
415void LoadLibrariesSS(const libModes mode) {
e47370f7 416
417 //--------------------------------------
418 // Load the needed libraries most of them already loaded by aliroot
419 //--------------------------------------
b5425e51 420 //gSystem->Load("libTree");
b125a454 421 gSystem->Load("libGeom");
422 gSystem->Load("libVMC");
423 gSystem->Load("libXMLIO");
424 gSystem->Load("libPhysics");
e47370f7 425
426 //----------------------------------------------------------
427 // >>>>>>>>>>> Local mode <<<<<<<<<<<<<<
428 //----------------------------------------------------------
429 if (mode==mLocal) {
430 //--------------------------------------------------------
431 // If you want to use already compiled libraries
432 // in the aliroot distribution
433 //--------------------------------------------------------
434
435 //==================================================================================
436 //load needed libraries:
437 gSystem->AddIncludePath("-I$ROOTSYS/include");
b5425e51 438 //gSystem->Load("libTree");
e47370f7 439
440 // for AliRoot
441 gSystem->AddIncludePath("-I$ALICE_ROOT/include");
b125a454 442 gSystem->Load("libANALYSIS");
443 gSystem->Load("libPWG2flowCommon");
b5425e51 444 //cerr<<"libPWG2flowCommon loaded ..."<<endl;
e47370f7 445
446 }
447
448 else if (mode==mLocalSource) {
449
450 // In root inline compile
451
452 // Constants
453 gROOT->LoadMacro("AliFlowCommon/AliFlowCommonConstants.cxx+");
454 gROOT->LoadMacro("AliFlowCommon/AliFlowLYZConstants.cxx+");
5062cb0f 455
e47370f7 456 // Flow event
457 gROOT->LoadMacro("AliFlowCommon/AliFlowVector.cxx+");
5062cb0f 458 gROOT->LoadMacro("AliFlowCommon/AliFlowTrackSimple.cxx+");
e47370f7 459 gROOT->LoadMacro("AliFlowCommon/AliFlowTrackSimpleCuts.cxx+");
5062cb0f 460 gROOT->LoadMacro("AliFlowCommon/AliFlowEventSimple.cxx+");
461
0328db2d 462 // Output histograms
e47370f7 463 gROOT->LoadMacro("AliFlowCommon/AliFlowCommonHist.cxx+");
464 gROOT->LoadMacro("AliFlowCommon/AliFlowCommonHistResults.cxx+");
465 gROOT->LoadMacro("AliFlowCommon/AliFlowLYZHist1.cxx+");
466 gROOT->LoadMacro("AliFlowCommon/AliFlowLYZHist2.cxx+");
0328db2d 467
468 // Functions needed for various methods
469 gROOT->LoadMacro("AliFlowCommon/AliCumulantsFunctions.cxx+");
470 gROOT->LoadMacro("AliFlowCommon/AliFlowLYZEventPlane.cxx+");
471
472 // Flow Analysis code for various methods
473 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithMCEventPlane.cxx+");
474 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithScalarProduct.cxx+");
475 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithLYZEventPlane.cxx+");
476 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithLeeYangZeros.cxx+");
477 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithCumulants.cxx+");
478 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithQCumulants.cxx+");
479 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithFittingQDistribution.cxx+");
480 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithMixedHarmonics.cxx+");
481 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithNestedLoops.cxx+");
482
e47370f7 483 cout << "finished loading macros!" << endl;
484
0328db2d 485 } // end of else if (mode==mLocalSource)
e47370f7 486
0328db2d 487} // end of void LoadLibrariesSS(const libModes mode)