hooks for PMD flow analysis
[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;
6324dcfd 129 if(fileCounter==0){exit(0);}
0328db2d 130 const Int_t nFilesFinal = fileCounter;
131
132 // Make for each method graph holding results:
133 TGraph *methodGraph[nMethods][3] = {{NULL}}; // [3 = "", "RP" or "POI"]
134 Double_t x[nMethods][nFilesFinal] = {{0.}};
135 for(Int_t m=0;m<nMethods;m++)
b5425e51 136 {
0328db2d 137 for(Int_t f=0;f<nFilesFinal;f++)
b5425e51 138 {
0328db2d 139 x[m][f]=m+0.5;
140 }
141 }
142 for(Int_t m=0;m<nMethods;m++)
143 {
144 for(Int_t l=0;l<3;l++)
b5425e51 145 {
0328db2d 146 methodGraph[m][l] = new TGraph(nFilesFinal,x[m],result[m][l]);
147 methodGraph[m][l]->SetMarkerStyle(methodMarkerStyle[m]);
148 methodGraph[m][l]->SetMarkerColor(methodMarkerColor[m]);
149 } // end of for(Int_t l=0;l<3;l++)
150 } // for(Int_t m=0;m<nMethods;m++)
151
152 // Make for each method coloured mesh out of min and max values:
153 Double_t meshWidth = 0.25;
154 TGraph *methodMesh[nMethods][3] = {{NULL}}; // [3 = "", "RP" or "POI"]
155 for(Int_t m=0;m<nMethods;m++)
156 {
157 for(Int_t l=0;l<3;l++)
b5425e51 158 {
0328db2d 159 if(resultMinMax[m][l][0]<44. && resultMinMax[m][l][1]>-44.)
160 {
161 methodMesh[m][l] = new TGraph(5);
162 methodMesh[m][l]->SetPoint(0,(m+1-0.5)-meshWidth,resultMinMax[m][l][0]);
163 methodMesh[m][l]->SetPoint(1,(m+1-0.5)+meshWidth,resultMinMax[m][l][0]);
164 methodMesh[m][l]->SetPoint(2,(m+1-0.5)+meshWidth,resultMinMax[m][l][1]);
165 methodMesh[m][l]->SetPoint(3,(m+1-0.5)-meshWidth,resultMinMax[m][l][1]);
166 methodMesh[m][l]->SetPoint(4,(m+1-0.5)-meshWidth,resultMinMax[m][l][0]);
167 methodMesh[m][l]->SetFillStyle(1001);
168 methodMesh[m][l]->SetFillColor(methodMeshColor[m]);
b5425e51 169 }
170 }
0328db2d 171 }
172
173 // Access for each method the results from the merged, large statistics file:
174 Double_t resultMerged[nMethods][3] = {{0.}}; // [3 = "", "RP" or "POI"]
175 TString mergedFileName = Form("%s%s%s",gSystem->pwd(),"/",outputFileName.Data());
176 TFile *mergedFile = NULL;
177 mergedFile = TFile::Open(mergedFileName.Data(),"READ");
178 for(Int_t m=0;m<nMethods;m++)
179 {
180 TDirectoryFile *methodFile = NULL;
181 if(!(gSystem->AccessPathName(fileName.Data(),kFileExists)))
b5425e51 182 {
0328db2d 183 if(mergedFile) methodFile = GetMethodFile(mergedFile,method[m],type);
184 } else
185 {
186 cout<<"WARNING: Couldn't find the merged, large statistics file "<<endl;
187 cout<<" "<<fileName.Data()<<endl;
188 cout<<" in directory "<<gSystem->pwd()<<" !!!!"<<endl;
189 cout<<" Use macros mergeOuput.C and redoFinish.C to get it."<<endl;
190 cout<<endl;
191 break;
192 }
193 for(Int_t l=0;l<3;l++)
b5425e51 194 {
0328db2d 195 TH1D *histResult = NULL;
196 if(methodFile)
197 {
198 histResult = GetHistogramWithResult(method[m],label[l],methodFile);
199 }
200 if(histResult)
b5425e51 201 {
0328db2d 202 // Access the results from the merged, large statistics file:
203 resultMerged[m][l] = histResult->GetBinContent(1);
204 } // end of for(Int_t l=0;l<3;l++)
b5425e51 205 }
0328db2d 206 } // end of for(Int_t m=0;m<nMethods;m++)
207 if(mergedFile) mergedFile->Close();
208
209 // Make for each method graph holding results from the merged, large statistics file
210 // and the errors from the randomly chosen small statistics file:
211 TGraphErrors *methodMergedGraph[nMethods][3] = {{NULL}}; // [3 = "", "RP" or "POI"]
212 Double_t xMerged[nMethods] = {0.};
213 for(Int_t m=0;m<nMethods;m++)
9455e15e 214 {
0328db2d 215 xMerged[m]=m+0.5;
9455e15e 216 }
0328db2d 217 // Select randomly small statistics file:
218 gRandom->SetSeed((UInt_t) (4400*timer.RealTime()/fileCounter));
219 Int_t randomFile = (Int_t)gRandom->Uniform(0,fileCounter);
220 for(Int_t m=0;m<nMethods;m++)
95de4bf0 221 {
0328db2d 222 for(Int_t l=0;l<3;l++)
223 {
224 methodMergedGraph[m][l] = new TGraphErrors(1);
225 methodMergedGraph[m][l]->SetPoint(0,xMerged[m],resultMerged[m][l]);
226 if(showErrorOnMergedResult) methodMergedGraph[m][l]->SetPointError(0,0.,error[m][l][randomFile]);
227 methodMergedGraph[m][l]->SetMarkerStyle(25);
228 methodMergedGraph[m][l]->SetMarkerColor(kBlack);
229 } // end of for(Int_t l=0;l<3;l++)
230 } // for(Int_t m=0;m<nMethods;m++)
231
232 // Final drawing:
233 gROOT->SetStyle("Plain"); // removing default gray color and setting white instead
234 gStyle->SetOptStat(0); // removing statistics box from all histograms
235 Bool_t showPlot[3] = {showPlotForReferenceFlow,showPlotForIntegratedFlowRP,showPlotForIntegratedFlowPOI};
236 TString title[3] = {"Reference Flow","Integrated Flow (RP)","Integrated Flow (POI)"}
237 TCanvas *canvas[3] = {NULL}; // [3 = "", "RP" or "POI"]
238 for(Int_t l=0;l<3;l++)
e47370f7 239 {
0328db2d 240 if(showPlot[l])
9455e15e 241 {
0328db2d 242 canvas[l] = new TCanvas(Form("%s",title[l].Data()),Form("%s",title[l].Data()));
243 TH1D *styleHist = StyleHist(title[l]);
244 styleHist->SetMinimum(0.99*styleHistMinMax[l][0]);
245 styleHist->SetMaximum(1.01*styleHistMinMax[l][1]);
246 styleHist->Draw();
247 for(Int_t m=0;m<nMethods;m++)
248 {
249 if(methodMesh[m][l]) methodMesh[m][l]->Draw("lfsame");
250 if(methodGraph[m][l]) methodGraph[m][l]->Draw("psame");
251 if(TMath::Abs(*(methodMergedGraph[m][l]->GetY()))>pow(10.,-6.)) // draw only if not == 0.
9455e15e 252 {
0328db2d 253 methodMergedGraph[m][l]->Draw("psame");
254 }
255 } // end of for(Int_t m=0;m<nMethods;m++)
256 } // end of if(showPlot[l])
257 } // end of for(Int_t l=0;l<3;l++)
e47370f7 258
0328db2d 259 timer.Stop();
260 timer.Print();
261 cout<<endl;
6a6afe42 262
0328db2d 263} // end of void showSpread(TString type="", Int_t mode=mLocal)
6a6afe42 264
0328db2d 265// =============================================================================================
6a6afe42 266
0328db2d 267TH1D *StyleHist(TString histTitle)
268{
269 // Make the style histogram.
270 Int_t n = 2; // harmonic (to be improved - access this from common control hist)
271 TH1D *styleHist = new TH1D(Form("%s",histTitle.Data()),Form("%s",histTitle.Data()),nMethods,0,nMethods);
272 styleHist->GetYaxis()->SetTickLength(0.01);
273 for(Int_t m=0;m<nMethods;m++)
274 {
275 styleHist->GetXaxis()->SetBinLabel(m+1,Form("v_{%d}{%s}",n,method[m].Data()));
276 if(method[m]=="LYZ1SUM" || method[m]=="LYZ2SUM")
277 {
278 styleHist->GetXaxis()->SetBinLabel(m+1,Form("v_{%d}{%s}",n,"LYZ,sum"));
279 }
280 else if(method[m]=="LYZ1PROD" || method[m]=="LYZ2PROD")
281 {
282 styleHist->GetXaxis()->SetBinLabel(m+1,Form("v_{%d}{%s}",n,"LYZ,prod"));
283 }
284 } // end of for(Int_t m=0;m<nMethods;m++)
6a6afe42 285
0328db2d 286 return styleHist;
287}
288
289// =============================================================================================
290
291TDirectoryFile* GetMethodFile(TFile *commonFile, TString method, TString type)
292{
293 // Form a file name for each method:
294 TString methodFileName = "output";
295 if(method.Contains("GFC"))
9455e15e 296 {
0328db2d 297 methodFileName+="GFC";
298 } else if(method.Contains("QC"))
9455e15e 299 {
0328db2d 300 methodFileName+="QC";
301 } else
302 {
303 methodFileName+=method.Data();
304 }
305 methodFileName+="analysis";
306 methodFileName+=type.Data();
307 TDirectoryFile *methodFile = NULL;
308 if(commonFile)
b78897bc 309 {
0328db2d 310 methodFile = (TDirectoryFile*)commonFile->FindObjectAny(methodFileName.Data());
311 }
b78897bc 312
0328db2d 313 return methodFile;
b78897bc 314
0328db2d 315} // end of TDirectoryFile* AccessMethodFile(TString commonFile, TString method, TString type)
b78897bc 316
0328db2d 317// =============================================================================================
e47370f7 318
0328db2d 319TH1D* GetHistogramWithResult(TString method, TString label, TDirectoryFile *methodFile)
320{
321 // Access first the common list holding all output histograms:
322 TList *methodList = NULL;
323 if(method.Contains("GFC"))
324 {
325 methodFile->GetObject("cobjGFC",methodList);
326 } else if(method.Contains("QC"))
327 {
328 methodFile->GetObject("cobjQC",methodList);
329 } else
330 {
331 methodFile->GetObject(Form("cobj%s",method.Data()),methodList);
332 }
333 // Access from the common list the needed histogram:
334 if(methodList)
335 {
336 AliFlowCommonHistResults *commonHistRes = NULL;
337 if(!(method.Contains("GFC") || method.Contains("QC")))
338 {
339 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject(Form("AliFlowCommonHistResults%s",method.Data()));
340 }
341 else if(method=="2,GFC")
342 {
343 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults2ndOrderGFC");
344 }
345 else if(method=="4,GFC")
346 {
347 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults4thOrderGFC");
348 }
349 else if(method=="6,GFC")
350 {
351 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults6thOrderGFC");
352 }
353 else if(method=="8,GFC")
354 {
355 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults8thOrderGFC");
356 }
357 else if(method=="2,QC")
358 {
359 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults2ndOrderQC");
360 }
361 else if(method=="4,QC")
362 {
363 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults4thOrderQC");
364 }
365 else if(method=="6,QC")
366 {
367 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults6thOrderQC");
368 }
369 else if(method=="8,QC")
370 {
371 commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults8thOrderQC");
372 }
373 } // end of if(methodList)
b78897bc 374
0328db2d 375 // Access histogram with results for reference flow or integrated flow of RPs or POIs:
376 TH1D *hist = NULL;
377 if(label=="")
378 {
379 hist = commonHistRes->GetHistIntFlow();
380 } else if(label=="RP")
381 {
382 hist = commonHistRes->GetHistIntFlowRP();
383 } else if(label=="POI")
384 {
385 hist = commonHistRes->GetHistIntFlowPOI();
386 }
b78897bc 387
0328db2d 388 if(hist) return hist;
b78897bc 389
0328db2d 390} // end of TH1D *GetHistogramWithResult(TString method, TString rf_rp_poi, TString file);
391
392// =============================================================================================
393
394void CrossCheckUserSettings()
395{
396 // Check in this method if the user settings make sense.
48385911 397
0328db2d 398 if(nFilesMax<=0)
399 {
400 cout<<endl;
401 cout<<"WARNING: nFilesMax must be a positive integer (not too large, though) !!!!"<<endl;
402 cout<<endl;
403 exit(0);
b78897bc 404 }
0328db2d 405 if(nFilesMax>44)
b78897bc 406 {
0328db2d 407 cout<<endl;
408 cout<<"WARNING: You may want to set nFilesMax to the smaller value."<<endl;
409 cout<<" Otherwise you might wait forever to see the plots."<<endl;
410 }
b78897bc 411
0328db2d 412} // end of void CrossCheckUserSettings()
e47370f7 413
0328db2d 414// =============================================================================================
415
416void LoadLibrariesSS(const libModes mode) {
e47370f7 417
418 //--------------------------------------
419 // Load the needed libraries most of them already loaded by aliroot
420 //--------------------------------------
b5425e51 421 //gSystem->Load("libTree");
b125a454 422 gSystem->Load("libGeom");
423 gSystem->Load("libVMC");
424 gSystem->Load("libXMLIO");
425 gSystem->Load("libPhysics");
e47370f7 426
427 //----------------------------------------------------------
428 // >>>>>>>>>>> Local mode <<<<<<<<<<<<<<
429 //----------------------------------------------------------
430 if (mode==mLocal) {
431 //--------------------------------------------------------
432 // If you want to use already compiled libraries
433 // in the aliroot distribution
434 //--------------------------------------------------------
435
436 //==================================================================================
437 //load needed libraries:
438 gSystem->AddIncludePath("-I$ROOTSYS/include");
b5425e51 439 //gSystem->Load("libTree");
e47370f7 440
441 // for AliRoot
442 gSystem->AddIncludePath("-I$ALICE_ROOT/include");
b125a454 443 gSystem->Load("libANALYSIS");
444 gSystem->Load("libPWG2flowCommon");
b5425e51 445 //cerr<<"libPWG2flowCommon loaded ..."<<endl;
e47370f7 446
447 }
448
449 else if (mode==mLocalSource) {
450
451 // In root inline compile
452
453 // Constants
454 gROOT->LoadMacro("AliFlowCommon/AliFlowCommonConstants.cxx+");
455 gROOT->LoadMacro("AliFlowCommon/AliFlowLYZConstants.cxx+");
5062cb0f 456
e47370f7 457 // Flow event
458 gROOT->LoadMacro("AliFlowCommon/AliFlowVector.cxx+");
5062cb0f 459 gROOT->LoadMacro("AliFlowCommon/AliFlowTrackSimple.cxx+");
e47370f7 460 gROOT->LoadMacro("AliFlowCommon/AliFlowTrackSimpleCuts.cxx+");
5062cb0f 461 gROOT->LoadMacro("AliFlowCommon/AliFlowEventSimple.cxx+");
462
0328db2d 463 // Output histograms
e47370f7 464 gROOT->LoadMacro("AliFlowCommon/AliFlowCommonHist.cxx+");
465 gROOT->LoadMacro("AliFlowCommon/AliFlowCommonHistResults.cxx+");
466 gROOT->LoadMacro("AliFlowCommon/AliFlowLYZHist1.cxx+");
467 gROOT->LoadMacro("AliFlowCommon/AliFlowLYZHist2.cxx+");
0328db2d 468
469 // Functions needed for various methods
470 gROOT->LoadMacro("AliFlowCommon/AliCumulantsFunctions.cxx+");
471 gROOT->LoadMacro("AliFlowCommon/AliFlowLYZEventPlane.cxx+");
472
473 // Flow Analysis code for various methods
474 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithMCEventPlane.cxx+");
475 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithScalarProduct.cxx+");
476 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithLYZEventPlane.cxx+");
477 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithLeeYangZeros.cxx+");
478 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithCumulants.cxx+");
479 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithQCumulants.cxx+");
480 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithFittingQDistribution.cxx+");
481 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithMixedHarmonics.cxx+");
482 gROOT->LoadMacro("AliFlowCommon/AliFlowAnalysisWithNestedLoops.cxx+");
483
e47370f7 484 cout << "finished loading macros!" << endl;
485
0328db2d 486 } // end of else if (mode==mLocalSource)
e47370f7 487
0328db2d 488} // end of void LoadLibrariesSS(const libModes mode)