ROOT logo
// Macro plotCumulants.C is used to represent true correlations, a.k.a. cumulants,
// as a function of reference multiplicity. Different order cumulants provide
// independent estimates of the flow harmonics. In the ideal case when only flow
// correlations are present we have: 
//         c{2} = v^2, c{4} = -v^4, c{6} = 4v^6 and c{8} = -33v^8.
// In practice cumulants can are calculated via Q-vectors (QC) or via formalism
// of generating functions (GFC). 

// Set how many output analysis files in total you want to access:
const Int_t nFiles = 2;
 
// Set how many of those output analysis files you want to represent with a mesh (usually used to represent results of simulations):
const Int_t nSim = 0;

// Set paths of all output analysis files (first the ones to be represented with mesh (simulations), then the ones to be represented with markers (real data))
TString files[nFiles] = {"trackletsCorrectedNUA","default"}; // subdirectory names holding <commonOutputFileName>.root
//TString files[nFiles] = {"outputCentrality0","outputCentrality1"}; // file names (use case: centrality train)

// Set analysis types for all output analysis files (can be "ESD","AOD","MC","","MK", ....):
TString type[nFiles] = {"ESD","ESD"};
//TString type[nFiles] = {"MK","MK"};
 
// Set mesh color:
Int_t meshColor[nSim] = {};

// Set marker styles:
Int_t markerStyle[nFiles-nSim] = {kFullSquare,kOpenSquare};

// Set marker colors:
Int_t markerColor[nFiles-nSim] = {kBlack,kRed};

// Set legend entries:
TString legendEntry[nFiles] = {"",""};
 
// Set if you want to rebin the histograms into wider multiplicity bins (set for each cumulant order separately):
Bool_t rebin = kFALSE;
Int_t nMergedBins[4] = {10,10,10,10}; // set how many original multiplicity bins will be merged into 1 new one 
 
// Set if you whish to plot cumulants versus <reference multiplicity> (by default they are plotted versus # of RPs):
Bool_t plotCumulantsVsReferenceMultiplicity = kFALSE;
Bool_t showReferenceMultiplicityVsNoOfRPs = kFALSE; 

// Set flow values whose theoretical contribution to cumulants will be shown on the plots with the straight coloured lines: 
Bool_t showTheoreticalLines = kFALSE;
const Int_t nFlowValues = 1;
Double_t v[nFlowValues] = {0.05};
Int_t lineColor[nFlowValues] = {kRed}; 

// If the statistical error of 6th and 8th order cumulant is huge you may prefer not to show them:
Bool_t plotOnly2ndAnd4thOrderCumulant = kFALSE;

// Set if you want independent canvas with results for reference flow vs multiplicity:
Bool_t showRefFlowVsM = kTRUE;
Int_t refFlowVsMMarkerStyle[nFiles] = {kFullSquare,kOpenSquare}; // marker style is different for different file
Int_t refFlowVsMMarkerColor[4] = {kBlack,kRed,kBlue,kGreen+2}; // marker color is different for different cumulant order
Int_t refFlowVsMeshOrder = -1; // set results of which order will be plotted as mesh in all pads [0=2nd, 1=4th, 2=6th, 3=8th, -1=do not show]
Int_t refFlowVsMMeshColor = kRed-10; // mesh color for above specified order
Double_t refFlowVsMxRange[2] = {1.,11000.}; // x range on the plots for reference multiplicity vs M
Double_t refFlowVsMyRange[2] = {0.0,0.194}; // x range on the plots for reference multiplicity vs M

// Set if you want to show theoretical curves for the toy model:
Bool_t showToyModel = kFALSE;
const Int_t nToyModels = 2; // number of toy models with different parameters k, vn, v2n
Double_t k[nToyModels] = {2.,4.};
Double_t vn[nToyModels] = {0.25,0.25};
Double_t v2n[nToyModels] = {0.0,0.0};
Int_t lineColorToyModel[nToyModels] = {kBlack,kRed};

// For comparison sake show also GFC results with dotted line:
Bool_t showAlsoGFCResults = kFALSE;
Int_t gfcLineStyle = 3;

// For comparison sake show also Monte Carlo QC results with coloured mesh:
Bool_t showAlsoMCEPResults = kFALSE; 
Bool_t showOnlyMCEPResults = kFALSE;
Int_t mcepMeshColor[nSim] = {};

// Set the naming convention:
Bool_t bLookInSubdirectories = kFALSE; // if kTRUE: Look in subdirectories <files[0]>, <files[1]>, ..., for output files <commonOutputFileName>
                                      // if kFALSE: Look in <pwd> for files <files[0]>.root, <files[1]>.root, ....
TString commonOutputFileName = "AnalysisResults.root"; 

// Set method names which calculate cumulants vs multiplicity (do not touch these settings unless you are looking for a trouble):
const Int_t nMethods = 3;
TString method[nMethods] = {"QC","GFC","MCEP"}; 

TFile *commonOutputFiles[nFiles] = {NULL}; // common output files "AnalysisResults.root"
TList *lists[nFiles][nMethods] = {{NULL}}; // lists cobj<method> holding objects with results for each method
TH1D *cumulantsVsM[nFiles][nMethods][4] = {{{NULL}}}; // histograms with results for cumulants vs multiplicity (4 stands for 4 cumulant orders)
TH1D *refFlowVsM[nFiles][nMethods][4] = {{{NULL}}}; // histograms with results for reference flow vs multiplicity (4 stands for 4 cumulant orders)
TGraph *lines[nFlowValues][4] = {{NULL}}; // lines denoting theoretical flow contribution to cumulants
TProfile *refMultVsNoOfRPs[nFiles] = {NULL}; // <reference multipicity> versus # of RPs
TF1 *toyModel[2][nToyModels] = {{NULL}}; // [cumulant order][number of toy models]

// Ranges for plots:
Double_t xMin[4]={0.};
Double_t xMax[4]={0.};
Double_t yMin[4]={0.};
Double_t yMax[4]={0.};

enum libModes {mLocal,mLocalSource};

void plotCumulants(Int_t analysisMode=mLocal)
{
 // analysisMode: if analysisMode = mLocal -> analyze data on your computer using aliroot
 //               if analysisMode = mLocalSource -> analyze data on your computer using root + source files 
 
 // Cross-check user settings:
 CrossCheckSettings();
    
 // Load needed libraries:
 LoadLibrariesPC(analysisMode);
 
 // Global settings which will affect all plots:
 GlobalSettings();
  
 // Access all common output files:
 AccessCommonOutputFiles(commonOutputFileName);
  
 // Get from common output files the lists holding histograms for each method:
 GetLists();
    
 // Get histograms with results for cumulants vs multiplicity:
 GetHistograms();

 // Determine ranges for plots:
 DetermineMinMax();
  
 // Make lines which indicate theoretical contributions of flow to cumulants:
 Lines();
 
 // Print number of events and average multiplicities for each common output file:
 Print();  
 
 // Make plots for cumulants vs multiplicity: // to be improved
 PlotCumulantsVsM(); 

 // Make plots for reference flow vs multiplicity:  
 if(showRefFlowVsM){PlotRefFlowVsM();}

} // end of void plotCumulants(Int_t analysisMode=mLocal)  

// =====================================================================================

void PlotRefFlowVsM()
{
 // Make plots for reference flow vs multiplicity.
 
 // Calculate reference flow from cumulants vs M:
 CalculateReferenceFlowFromCumulantsVsM();
 
 TCanvas *cRefFlowVsM = new TCanvas("cRefFlowVsM","Reference Flow");
 cRefFlowVsM->Divide(2,2);

 TLegend *lRefFlowVsM = new TLegend(0.1,0.7,0.33,0.9);
 lRefFlowVsM->SetFillStyle(0);
 lRefFlowVsM->SetHeader("     Therminator (20-30%)");

 TString refFlowVsMFlag[4] = {"v_{2}{2,QC}","v_{2}{4,QC}","v_{2}{6,QC}","v_{2}{8,QC}"};

 for(Int_t f=0;f<nFiles;f++)
 {
  for(Int_t m=0;m<1+(Int_t)(showAlsoGFCResults)+(Int_t)(showAlsoMCEPResults);m++)
  {
   for(Int_t co=0;co<4;co++) // cumulant order
   {
    cRefFlowVsM->cd(co+1);
    // Style histogram:
    if(f==0) // superimpose histograms from other files on top of this one
    {
     TH1D *styleHist = (TH1D*)StyleHist(refFlowVsMFlag[co].Data(),co)->Clone();
     if(styleHist)
     {
      styleHist->GetXaxis()->SetRangeUser(refFlowVsMxRange[0],refFlowVsMxRange[1]);
      styleHist->GetYaxis()->SetRangeUser(refFlowVsMyRange[0],refFlowVsMyRange[1]);
      styleHist->Draw();
     }
    } // end of if(f==0)    
    // Plot first the mesh for reference flow of specified order in all pads:
    if(refFlowVsMeshOrder != -1)
    {
     TGraph *rfMeshOutOf = GetErrorMesh(refFlowVsM[f][m][refFlowVsMeshOrder]);
     if(rfMeshOutOf)
     {
      rfMeshOutOf->SetFillColor(refFlowVsMMeshColor);
      rfMeshOutOf->Draw("lfsame"); 
      if(refFlowVsMeshOrder==co){lRefFlowVsM->AddEntry(rfMeshOutOf,Form("v_{2}{%i,QC} stat. error",2*(refFlowVsMeshOrder+1)),"f");}
     }
    } // end of if(refFlowVsMeshOrder != -1)
    // Plot reference flow vs M:
    refFlowVsM[f][m][co]->SetMarkerStyle(refFlowVsMMarkerStyle[f]);
    refFlowVsM[f][m][co]->SetMarkerColor(refFlowVsMMarkerColor[co]);
    refFlowVsM[f][m][co]->Draw("e1same");
    lRefFlowVsM->AddEntry(refFlowVsM[f][m][co],Form("v_{2}{%i,QC}, %s",2*(co+1),files[f].Data()),"p"); 
   } // end of for(Int_t co=0;co<4;co++) // cumulant order
  } // end of for(Int_t m=0;m<nMethods;m++)
 } // end of for(Int_t f=0;f<nFiles;f++)   
 
 // Draw a common legend in the 1st pad:
 cRefFlowVsM->cd(1);
 lRefFlowVsM->Draw("same");

} // end of void PlotRefFlowVsM()

// =====================================================================================

void PlotCumulantsVsM()
{
 // Make plots for cumulants vs multiplicity: // to be improved
 
 TCanvas *c = NULL;
 Int_t coMax = 0;
 if(!plotOnly2ndAnd4thOrderCumulant)
 {
  c = new TCanvas("c","cumulants");
  c->Divide(2,2);
  coMax = 4; 
 } else 
   {
    c = new TCanvas("c","cumulants",1200,500);
    c->Divide(2,1);  
    coMax = 2; 
   }  
   
 TLegend *legend = new TLegend(0.1,0.7,0.33,0.9);
 legend->SetFillStyle(0);
 //legend->SetHeader("     minClustersTpcRP");

 TString qcFlag[4] = {"QC{2}","QC{4}","QC{6}","QC{8}"};
 
 for(Int_t co=0;co<coMax;co++) // cumulant order
 {
  c->cd(co+1);
  TH1D *styleHist = (TH1D*) StyleHist(qcFlag[co].Data(),co)->Clone(); 
  if(styleHist){styleHist->Draw();}
  if(co==0)
  {
   if(showToyModel)
   {
    for(Int_t ntm=0;ntm<nToyModels;ntm++)
    {
     TF1 *tm = ToyModel(co,k[ntm],vn[ntm],v2n[ntm]);
     if(tm)
     {
      tm->SetLineColor(lineColorToyModel[ntm]);
      tm->Draw("same");
     }
    } // for(Int_t ntm=0;ntm<nToyModels;ntm++)
   } // end of if(showToyModel)
  } // end of if(co==0)
  if(co==1)
  {    
   if(showToyModel)
   {
    for(Int_t ntm=0;ntm<nToyModels;ntm++)
    {
     TF1 *tm = ToyModel(co,k[ntm],vn[ntm],v2n[ntm]);
     if(tm)
     {
      tm->SetLineColor(lineColorToyModel[ntm]);
      tm->Draw("same");
     }
    } // for(Int_t ntm=0;ntm<nToyModels;ntm++)
   } // end of if(showToyModel)   
  } // end of if(co==1)
  
  // simulations:
  for(Int_t s=0;s<nSim;s++) 
  {
   // Monte Carlo QC:
   if(showAlsoMCEPResults)
   {
    TGraph *mcepQC = GetErrorMesh(cumulantsVsM[s][2][co]);    
    if(mcepQC)
    {
     mcepQC->SetFillColor(mcepMeshColor[s]);
     mcepQC->Draw("lfsame");
    }
    if(co==0){legend->AddEntry(mcepQC,Form("%s (MC)",legendEntry[s].Data()),"f");}   
   } // end of if(showAlsoMCEPResults)  
   // QC:
   TGraph *errorMesh = GetErrorMesh(cumulantsVsM[s][0][co]);
   if(errorMesh)
   {
    errorMesh->SetFillColor(meshColor[s]);
    if(!(showOnlyMCEPResults && showAlsoMCEPResults)){errorMesh->Draw("lfsame");}
   }
   if(co==0 && !(showOnlyMCEPResults && showAlsoMCEPResults)){legend->AddEntry(errorMesh,legendEntry[s].Data(),"f");}  
  } // end of if(Int_t s=0;s<nSim;s++) 
  // Theoretical lines:
  if(showTheoreticalLines)
  {
   for(Int_t fv=0;fv<nFlowValues;fv++)
   { 
    lines[fv][co]->Draw("lsame");
    if(co==0){legend->AddEntry(lines[fv][co],Form("v_{2} = %g",v[fv]),"l");}  
   } 
  } 
  // data:
  for(Int_t f=nSim;f<nFiles;f++)
  {
   // QC results:
   if(cumulantsVsM[f][0][co])
   {
    cumulantsVsM[f][0][co]->Draw("e1same"); 
    cumulantsVsM[f][0][co]->SetMarkerStyle(markerStyle[f-nSim]);  
    cumulantsVsM[f][0][co]->SetMarkerColor(markerColor[f-nSim]); 
    if(co==0)
    {
     if(showAlsoGFCResults)
     {
      legend->AddEntry(cumulantsVsM[f][0][co],Form("%s (QC)",legendEntry[f].Data()),"p");
     } else
       {
        legend->AddEntry(cumulantsVsM[f][0][co],legendEntry[f].Data(),"p");     
       }
    }
   }
   // GFC results:
   if(showAlsoGFCResults && cumulantsVsM[f][1][co])
   {
    cumulantsVsM[f][1][co]->Draw("lsame");  
    cumulantsVsM[f][1][co]->SetLineStyle(gfcLineStyle);    
    if(co==0){legend->AddEntry(cumulantsVsM[f][1][co],Form("%s (GFC)",legendEntry[f].Data()),"l");}
   }
  } 
  // Draw legend:
  if(co==0){legend->Draw("same");}
 } // end of for(Int_t co=0;co<4;co++) // cumulant order
 
 // Plot also <reference multiplicity> vs # of RPs:
 if(plotCumulantsVsReferenceMultiplicity && showReferenceMultiplicityVsNoOfRPs)
 {
  TCanvas *cRefMultVsNoOfRPs = new TCanvas("cRefMultVsNoOfRPs","#LTreference multiplicity#GT vs # of RPs",1200,600);
  cRefMultVsNoOfRPs->Divide(nFiles,1);
  for(Int_t f=0;f<nFiles;f++)
  {
   cRefMultVsNoOfRPs->cd(f+1);
   if(refMultVsNoOfRPs[f])
   {
    refMultVsNoOfRPs[f]->SetTitle(legendEntry[f].Data());
    refMultVsNoOfRPs[f]->GetXaxis()->SetRangeUser(0,refMultVsNoOfRPs[f]->FindLastBinAbove());
    refMultVsNoOfRPs[f]->Draw();   
   } else
     {
      cout<<endl;
      cout<<"WARNING: refMultVsNoOfRPs[f] is NULL in Plot(), f = "<<f<<" !!!!"<<endl;
      cout<<endl;
     }
  }   
 }   
 
} // end of void PlotCumulantsVsM()
 
// =====================================================================================

void CrossCheckSettings()
{
 // Cross-check user settings in this method.
 
 if(showAlsoGFCResults && rebin)
 {
  cout<<endl;
  cout<<" WARNING: Rebinning in M not supported for GFC yet !!!!"<<endl;
  cout<<endl;
  exit(0);
 }

 if(showAlsoGFCResults && plotCumulantsVsReferenceMultiplicity)
 {
  cout<<endl;
  cout<<" WARNING: Showing GFC versus <reference multiplicity> not supported yet !!!!"<<endl;
  cout<<endl;
  exit(0);
 }

} // end of void CrossCheckSettings()

// =====================================================================================

void Lines()
{
 // Make lines denoting theoretical contribution of flow to cumulants.
 
 for(Int_t fv=0;fv<nFlowValues;fv++)
 {
  lines[fv][0] = new TGraph(2);
  lines[fv][0]->SetPoint(0,xMin[0],pow(v[fv],2));  
  lines[fv][0]->SetPoint(1,xMax[0]+0.5,pow(v[fv],2));  
  lines[fv][0]->SetLineColor(lineColor[fv]);
  lines[fv][1] = new TGraph(2);
  lines[fv][1]->SetPoint(0,xMin[1],-pow(v[fv],4));  
  lines[fv][1]->SetPoint(1,xMax[1]+0.5,-pow(v[fv],4));  
  lines[fv][1]->SetLineColor(lineColor[fv]); 
  lines[fv][2] = new TGraph(2);
  lines[fv][2]->SetPoint(0,xMin[2],4.*pow(v[fv],6));  
  lines[fv][2]->SetPoint(1,xMax[2]+0.5,4.*pow(v[fv],6));  
  lines[fv][2]->SetLineColor(lineColor[fv]);  
  lines[fv][3] = new TGraph(2);
  lines[fv][3]->SetPoint(0,xMin[3],-33.*pow(v[fv],8));  
  lines[fv][3]->SetPoint(1,xMax[3]+0.5,-33.*pow(v[fv],8));  
  lines[fv][3]->SetLineColor(lineColor[fv]);
 }

} // end of void Lines()

// =====================================================================================

TF1* ToyModel(Int_t co, Double_t k, Double_t vn, Double_t v2n)
{
 // Make theoretical curves for the toy model.
 
 TF1 *function = NULL;
 
 if(co==0) 
 {
  function = new TF1("function","([1]*[1]*(x-0.5-[0])+[0]-1)/((x-0.5)-1)",1.5,1000);
  function->SetParameter(0,k);
  function->SetParameter(1,vn);
 } 
 else if(co==1)
 {
  function = new TF1("function","-1.*([1]*[1]*[1]*[1]*([0]-(x-0.5))*(12.*[0]-6.*[0]*[0]-12.*(x-0.5)-5.*[0]*(x-0.5)+6.*[0]*[0]*(x-0.5)+9.*(x-0.5)*(x-0.5)-3.*[0]*(x-0.5)*(x-0.5)-(x-0.5)*(x-0.5)*(x-0.5))+[1]*[1]*4.*([0]-1.)*(x-0.5-[0])*([0]*(x-0.5-1.)-2.*(x-0.5-2.))-[1]*[1]*[2]*2.*(x-0.5-1.)*([0]-1.)*(x-0.5-[0])*(x-0.5-2.*[0])-[2]*[2]*([0]-1.)*([0]-1.)*((x-0.5)-[0])*(x-0.5-1.)+([0]-1.)*(-6.+9*[0]-[0]*[0]+2.*(x-0.5)-5.*[0]*(x-0.5)+[0]*[0]*(x-0.5)))/((x-0.5-1.)*(x-0.5-1.)*(x-0.5-2.)*(x-0.5-3.))",3.5,100);         
  function->SetParameter(0,k);
  function->SetParameter(1,vn);
  function->SetParameter(2,v2n); 
 }
 
 return function;
 
} // end of TF1* ToyModel(Int_t co)

// =====================================================================================

void CalculateReferenceFlowFromCumulantsVsM()
{
 // Calculate reference flow from cumulants vs M:
 
 for(Int_t f=0;f<nFiles;f++)
 {
  for(Int_t m=0;m<1+(Int_t)(showAlsoGFCResults)+(Int_t)(showAlsoMCEPResults);m++)
  {
   for(Int_t co=0;co<4;co++) // cumulant order
   {
    if(cumulantsVsM[f][m][co])
    {
     refFlowVsM[f][m][co] = (TH1D*)cumulantsVsM[f][m][co]->Clone(Form("%i,%i,%i",f,m,co));
     if(!refFlowVsM[f][m][co]){cout<<" WARNING: "<<Form("refFlowVsM[%i][%i][%i]",f,m,co)<<" is NULL in PlotRefFlowVsM() !!!!"<<exit(0)<<endl;}
     refFlowVsM[f][m][co]->Reset(); // to have empty histogram with the same binning as the one with cumulants
     Int_t nBins = refFlowVsM[f][m][co]->GetNbinsX();  
     for(Int_t b=1;b<=nBins;b++)
     {
      Double_t qcVsM = cumulantsVsM[f][m][co]->GetBinContent(b); // QC vs M 
      Double_t qcErrorVsM = cumulantsVsM[f][m][co]->GetBinError(b); // QC vs M stat. error  
      Double_t vVsM = 0.; // reference flow vs M  
      Double_t vErrorVsM = 0.; // reference flow vs M stat. error  
      if(co==0) // 2nd order
      {
       if(qcVsM>0.)
       {
        vVsM = pow(qcVsM,1./2.);
        vErrorVsM = (1./2.)*pow(qcVsM,-1./2.)*qcErrorVsM;
       }      
      } // end of if(co==0) 2nd order
      else if(co==1) // 4th order
      {
       if(qcVsM<0.)
       {
        vVsM = pow(-1.*qcVsM,1./4.);
        vErrorVsM = (1./4.)*pow(-qcVsM,-3./4.)*qcErrorVsM;
       } 
      } // end of if(co==1) 4th order
      else if(co==2) // 6th order
      {
       if(qcVsM>0.)
       {
        vVsM = pow((1./4.)*qcVsM,1./6.);
        vErrorVsM = (1./6.)*pow(2.,-1./3.)*pow(qcVsM,-5./6.)*qcErrorVsM;
       }
      } // end of if(co==2) 6th order
      else if(co==3) // 8th order
      {
       if(qcVsM<0.)
       {
        vVsM = pow((-1./33.)*qcVsM,1./8.);
        vErrorVsM = (1./8.)*pow(33.,-1./8.)*pow(-qcVsM,-7./8.)*qcErrorVsM;
       }
      } // end of if(co==3) 8th order     
      // Store final results and statisticial errror for reference flow:
      refFlowVsM[f][m][co]->SetBinContent(b,vVsM);
      refFlowVsM[f][m][co]->SetBinError(b,vErrorVsM);
     } // end of for(Int_t b=1;b<=nBins;b++)
    } else
      {
       cout<<endl;
       cout<<" WARNING: "<<Form("cumulantsVsM[%i][%i][%i]",f,m,co)<<" is NULL in CalculateReferenceFlowFromCumulantsVsM() !!!!"<<endl;
       cout<<endl;
      } 
   } // end of for(Int_t co=0;co<4;co++) // cumulant order
  } // end of for(Int_t m=0;m<nMethods;m++)
 } // end of for(Int_t f=0;f<nFiles;f++)   

} // end of void CalculateReferenceFlowFromCumulantsVsM()

// =====================================================================================

void Print()
{
 // Print number of events and average multiplicities for each common output file.
 
 cout<<endl;
 cout<<"Accessed files:"<<endl;
 cout<<endl;
 for(Int_t f=0;f<nFiles;f++)
 {
  cout<<commonOutputFiles[f]->GetName()<<endl;
  for(Int_t m=0;m<nMethods;m++)
  {
   AliFlowCommonHist *commonHist = NULL;
   if(lists[f][m])
   {
    commonHist = dynamic_cast<AliFlowCommonHist*> (lists[f][m]->FindObject(Form("AliFlowCommonHist%s",method[m].Data())));
   }
   Double_t nEvts = 0.;
   Double_t AvM = 0.;
   if(commonHist && commonHist->GetHistMultRP())
   {
    nEvts = commonHist->GetHistMultRP()->GetEntries();
    AvM = commonHist->GetHistMultRP()->GetMean();
   }
   if(!(strcmp(method[m].Data(),"QC")))
   {
    cout<<Form("%s:",method[m].Data())<<"  <M> = "<<AvM<<", N = "<<nEvts<<endl;
   }
   if(!(strcmp(method[m].Data(),"GFC")) && showAlsoGFCResults)
   {
    cout<<Form("%s:",method[m].Data())<<"  <M> = "<<AvM<<", N = "<<nEvts<<endl;
   }
  } // end of for(Int_t m=0;m<nMethods;m++)
  cout<<endl;
 } // end of for(Int_t f=0;f<nFiles;f++) 

} // end of void Print()

// =====================================================================================

void DetermineMinMax()
{
 // Determine ranges for plots.
 
 for(Int_t co=0;co<4;co++)
 {
  xMin[co] = 0.; yMin[co] = 44.;
  xMax[co] = -440000.; yMax[co] = -44.;
 }
 
 Double_t tfc[nFlowValues][4] = {{0.}}; // theoretical flow contribution
 for(Int_t fv=0;fv<nFlowValues;fv++)
 {
  tfc[fv][0] = pow(v[fv],2);
  tfc[fv][1] = -pow(v[fv],4);
  tfc[fv][2] = 4.*pow(v[fv],6);
  tfc[fv][3] = -33.*pow(v[fv],8);
 }
  
 for(Int_t f=0;f<nFiles;f++)
 {
  for(Int_t m=0;m<1+(Int_t)(showAlsoGFCResults)+(Int_t)(showAlsoMCEPResults);m++)
  { 
   for(Int_t co=0;co<4;co++)
   { 
    if(cumulantsVsM[f][m][co]) 
    {
     Int_t nBins = cumulantsVsM[f][m][co]->GetXaxis()->GetNbins();
     for(Int_t b=1;b<=nBins;b++)
     {
      Double_t result = cumulantsVsM[f][m][co]->GetBinContent(b);
      Double_t error = cumulantsVsM[f][m][co]->GetBinError(b);
      if(TMath::Abs(result)>1.e-44 && TMath::Abs(error)>1.e-44)
      {
       // y-axis:
       if(yMin[co] > result-error){yMin[co] = result-error;} // min value
       if(yMax[co] < result+error){yMax[co] = result+error;} // max value    
       // x-axis:
       if(xMax[co] < cumulantsVsM[f][m][co]->GetBinLowEdge(b+1)){xMax[co] = cumulantsVsM[f][m][co]->GetBinLowEdge(b+1);}
      }
     } // end of for(Int_t b=1;b<=cumulantsVsM[f][m][co]->GetXaxis()->GetNbins();b++) 
     // theoretical contributions:
     if(showTheoreticalLines)
     {
      for(Int_t fv=0;fv<nFlowValues;fv++)
      {
       if(yMin[co] > tfc[fv][co]) {yMin[co] = tfc[fv][co];} // min value
       if(yMax[co] < tfc[fv][co]) {yMax[co] = tfc[fv][co];} // max value      
      } // end of for(Int_t fv=0;fv<nFlowValues;fv++)
     } // end of if(showTheoreticalLines) 
    } // end of if(cumulantsVsM[f][m][co])
   } // end of for(Int_t co=0;co<4;co++)
  } // end of for(Int_t m=0;m<nMethods;m++)
 } // end of for(Int_t f=0;f<nFiles;f++)
 
} // end of void DetermineMinMax()

// =====================================================================================

void GetHistograms()
{
 // Get all histograms and profiles.
 
 // a) Get profiles holding results for <refMult> vs number of Reference Particles (RPs); 
 // b) Get histograms holding results for cumulants and reference flow vs multiplicity.
 
 // a) Get profiles holding results for <refMult> vs number of Reference Particles (RPs): 
 if(plotCumulantsVsReferenceMultiplicity){GetProfileRefMultVsNoOfRPs();}
  
 // b) Get histograms holding results for cumulants and reference flow vs multiplicity:
 TString qcFlag[4] = {"QC{2}","QC{4}","QC{6}","QC{8}"};
 TString gfcFlag[4] = {"GFC{2}","GFC{4}","GFC{6}","GFC{8}"};
 for(Int_t f=0;f<nFiles;f++)
 {
  for(Int_t m=0;m<nMethods;m++)
  { 
   TList *temp = NULL;
   if(!(strcmp(method[m].Data(),"QC")) && lists[f][m])
   {
    temp = dynamic_cast<TList*> (lists[f][m]->FindObject("Integrated Flow"));
    if(temp) {temp = dynamic_cast<TList*> (temp->FindObject("Results"));}
    if(temp) 
    {
     for(Int_t co=0;co<4;co++)
     {
      // Cumulants vs multiplicity:
      cumulantsVsM[f][m][co] = dynamic_cast<TH1D*> (temp->FindObject(Form("fIntFlowQcumulantsVsM, %s",qcFlag[co].Data())));
      if(plotCumulantsVsReferenceMultiplicity && cumulantsVsM[f][m][co])
      {
       cumulantsVsM[f][m][co] = Map(cumulantsVsM[f][m][co],f);
      }    
      if(rebin && cumulantsVsM[f][m][co])
      {
       cumulantsVsM[f][m][co] = Rebin(cumulantsVsM[f][m][co],co);
      }
     } // end of for(Int_t co=0;co<4;co++)
    } // end of if(temp) 
   } // end of if(!(strcmp(method[m].Data(),"QC")))
   else if(!(strcmp(method[m].Data(),"GFC")) && lists[f][m])
   {
    temp = dynamic_cast<TList*> (lists[f][m]->FindObject("Reference Flow"));
    if(temp) {temp = dynamic_cast<TList*> (temp->FindObject("Results"));}
    if(temp) 
    {
     for(Int_t co=0;co<4;co++)
     {
      cumulantsVsM[f][m][co] = dynamic_cast<TH1D*> (temp->FindObject(Form("fReferenceFlowCumulantsVsM, %s",gfcFlag[co].Data())));
      if(showAlsoGFCResults && !cumulantsVsM[f][m][co])
      {
       cout<<endl;
       cout<<Form(" WARNING: Couldn't access histogram fReferenceFlowCumulantsVsM, %s in the ",gfcFlag[co].Data())<<endl;
       cout<<"          file "<<commonOutputFiles[f]->GetName()<<" !!!!"<<endl;
       cout<<"          Did you enable calculation of GFC vs M in the analysis which produced this file?"<<endl;
       cout<<endl;  
      }
      if(plotCumulantsVsReferenceMultiplicity && cumulantsVsM[f][m][co])
      {
       cumulantsVsM[f][m][co] = Map(cumulantsVsM[f][m][co],f);
      }
      if(rebin && cumulantsVsM[f][m][co])
      {
       cumulantsVsM[f][m][co] = Rebin(cumulantsVsM[f][m][co],co);
      }       
     } // end of for(Int_t co=0;co<4;co++)
    } // end of if(temp)
   } // end of else if(!(strcmp(method[m].Data(),"GFC")))
   else if(!(strcmp(method[m].Data(),"MCEP")) && lists[f][m])
   {
    TProfile *mcepVsM = dynamic_cast<TProfile*> (lists[f][m]->FindObject("FlowPro_VsM_MCEP"));
    if(!mcepVsM)
    {
     cout<<endl;
     cout<<" WARNING: Couldn't access TProfile FlowPro_VsM_MCEP in the file "<<commonOutputFiles[f]->GetName()<<" !!!!"<<endl;
     cout<<endl;
     return;
    } 
    for(Int_t co=0;co<4;co++)
    {
     cumulantsVsM[f][m][co] = new TH1D("",Form("Monte Carlo QC{%i} #font[72]{vs} M",2*(co+1)),
                                       mcepVsM->GetNbinsX(),mcepVsM->GetBinLowEdge(1),mcepVsM->GetBinLowEdge(1+mcepVsM->GetNbinsX()));
    } // end of for(Int_t co=0;co<4;co++)
    for(Int_t b=1;b<=mcepVsM->GetNbinsX();b++)
    {
     Double_t v = mcepVsM->GetBinContent(b);
     Double_t vError = mcepVsM->GetBinError(b);
     if(TMath::Abs(v)<1.e-44 || TMath::Abs(vError)<1.e-44){continue;}
     // Monte Carlo QC{2}:     
     Double_t qc2 = pow(v,2.);
     Double_t qc2Error = 2.*TMath::Abs(v)*vError; // error propagation for f(x) = x^2
     cumulantsVsM[f][m][0]->SetBinContent(b,qc2);
     cumulantsVsM[f][m][0]->SetBinError(b,qc2Error);
     // Monte Carlo QC{4}:     
     Double_t qc4 = -pow(v,4.);
     Double_t qc4Error = 4.*TMath::Abs(pow(v,3.))*vError; // error propagation for f(x) = -x^4
     cumulantsVsM[f][m][1]->SetBinContent(b,qc4);
     cumulantsVsM[f][m][1]->SetBinError(b,qc4Error);    
     // Monte Carlo QC{6}:     
     Double_t qc6 = 4.*pow(v,6.);
     Double_t qc6Error = 24.*TMath::Abs(pow(v,5.))*vError; // error propagation for f(x) = 4x^6
     cumulantsVsM[f][m][2]->SetBinContent(b,qc6);
     cumulantsVsM[f][m][2]->SetBinError(b,qc6Error);
     // Monte Carlo QC{8}:     
     Double_t qc8 = -33.*pow(v,8.);
     Double_t qc8Error = 264.*TMath::Abs(pow(v,7.))*vError; // error propagation for f(x) = -33x^8
     cumulantsVsM[f][m][3]->SetBinContent(b,qc8);
     cumulantsVsM[f][m][3]->SetBinError(b,qc8Error);
    } // end of for(Int_t b=1;b<=mcepVsM->GetNbinsX();b++)
    for(Int_t co=0;co<4;co++)
    {
     if(plotCumulantsVsReferenceMultiplicity && cumulantsVsM[f][m][co])
     {
      cumulantsVsM[f][m][co] = Map(cumulantsVsM[f][m][co],f);
     }     
     if(rebin && cumulantsVsM[f][m][co])
     {
      cumulantsVsM[f][m][co] = Rebin(cumulantsVsM[f][m][co],co);
     }    
    } // end of for(Int_t co=0;co<4;co++)
   } // end of else if(!(strcmp(method[m].Data(),"MCEP")))
  } // end of  for(Int_t m=0;m<nMethods;m++)
 } // end of for(Int_t f=0;f<nFiles;f++)

 Int_t counter = 0;
 for(Int_t f=0;f<nFiles;f++)
 {
  for(Int_t m=0;m<nMethods;m++)
  { 
   for(Int_t co=0;co<4;co++)
   {
    if(cumulantsVsM[f][m][co]){counter++;}
   }
  }
 }
 
 if(counter == 0)
 {
  cout<<endl;
  cout<<" WARNING: Couldn't access a single histogram with results vs multiplicity !!!!"<<endl;
  cout<<"          Did you enable this calculation before running over data?"<<endl;
  cout<<endl;
  exit(0);
 }   

} // end of void GetHistograms()

// =====================================================================================

void GetProfileRefMultVsNoOfRPs()
{
 // Get profiles holding results for <reference multiplicity> vs number of Reference Particles (RPs).
 
 // Set here from which method's output file this profile will be accessed:
 TString methodName = "QC"; // Alternatives are GFC and MCEP
 Int_t i = -1; 
 for(Int_t m=0;m<nMethods;m++)
 {
  if(method[m] == methodName){i=m;}
 }
 if(i==-1)
 {
  cout<<endl;
  cout<<" WARNING: Unknown method name in GetProfileRefMultVsNoOfRPs() !!!!"<<endl;
  cout<<"          Try something else for TString methodName in GetProfileRefMultVsNoOfRPs()."<<endl;
  cout<<endl;exit(0);    
 }
  
 for(Int_t f=0;f<nFiles;f++)
 {
  AliFlowCommonHist *commonHist = NULL;
  if(lists[f][i])
  {
   commonHist = dynamic_cast<AliFlowCommonHist*> (lists[f][i]->FindObject(Form("AliFlowCommonHist%s",method[i].Data())));
  } else
    {
     cout<<endl;
     cout<<Form(" WARNING: lists[%i][%i] is NULL in GetProfileRefMultVsNoOfRPs() !!!!",f,i)<<endl;
     cout<<Form("          Did you use method %s in the analysis which has produced output",method[i].Data())<<endl;
     cout<<Form("          file %s?",commonOutputFiles[f]->GetName())<<endl;
    } 
  if(commonHist && commonHist->GetRefMultVsNoOfRPs())
  {
   refMultVsNoOfRPs[f] = commonHist->GetRefMultVsNoOfRPs();
  } else
    {
     cout<<endl;
     cout<<" WARNING: commonHist && commonHist->GetRefMultVsNoOfRPs() is NULL in GetProfileRefMultVsNoOfRPs() !!!!"<<endl;
     cout<<endl;
    }
 } // end of for(Int_t f=0;f<nFiles;f++)
  
 return;  
 
} // end of void GetProfileRefMultVsNoOfRPs()

// =====================================================================================

TH1D* Map(TH1D *hist, Int_t f)
{
 // Map cumulant versus # of RPs into cumulants versus <reference multiplicity>.
 
 if(!refMultVsNoOfRPs[f])
 {
  cout<<endl;
  cout<<Form(" WARNING: refMultVsNoOfRPs[%i] is NULL in Map(...) !!!!",f)<<endl;
  cout<<endl;
 }
 
 Int_t rpMinBin = refMultVsNoOfRPs[f]->FindFirstBinAbove(); // FindFirstBinAbove(Double_t threshold = 0, Int_t axis = 1) 
 Int_t rpMaxBin = refMultVsNoOfRPs[f]->FindLastBinAbove(); // FindLastBinAbove(Double_t threshold = 0, Int_t axis = 1) 
 Int_t rmMinBin = 440000;; 
 Int_t rmMaxBin = (Int_t)TMath::Floor(refMultVsNoOfRPs[f]->GetMaximum()); 
 for(Int_t rpBin=rpMinBin;rpBin<=rpMaxBin;rpBin++) // non-empty # of RPs bins
 {
  if(refMultVsNoOfRPs[f]->GetBinContent(rpBin)>0. && refMultVsNoOfRPs[f]->GetBinContent(rpBin)<rmMinBin)
  {
   rmMinBin = (Int_t)TMath::Floor(refMultVsNoOfRPs[f]->GetBinContent(rpBin));
  }
 } // end of for(Int_t rpBin=rpMinBin;rpBin<=rpMaxBin;rpBin++) // non-empty # of RPs bins 
  
 if(hist)
 {
  temp = (TH1D*) hist->Clone();
  temp->Reset();
  for(Int_t rmBin=rmMinBin;rmBin<=rmMaxBin;rmBin++) // reference multiplicity bins
  { 
   Double_t value = 0.;
   Double_t error = 0.;
   Double_t dSum1 = 0.; // sum value_i/(error_i)^2
   Double_t dSum2 = 0.; // sum 1/(error_i)^2
   for(Int_t rpBin=rpMinBin;rpBin<=rpMaxBin;rpBin++) // # of RPs bins
   {
    if((Int_t)TMath::Floor(refMultVsNoOfRPs[f]->GetBinContent(rpBin)) >= temp->GetBinLowEdge(rmBin) &&
       (Int_t)TMath::Floor(refMultVsNoOfRPs[f]->GetBinContent(rpBin)) < temp->GetBinLowEdge(rmBin+1))
    {        
     value = hist->GetBinContent(rpBin);  
     error = hist->GetBinError(rpBin);  
     if(error>0.)
     {
      dSum1+=value/(error*error);
      dSum2+=1./(error*error);
     }
    }
   } // end of for(Int_t rpBin=1;rpBin<=nBins;rpBin++) // # of RPs bins
   if(dSum2>0.)
   {
    temp->SetBinContent(rmBin,dSum1/dSum2);
    temp->SetBinError(rmBin,pow(1./dSum2,0.5));
   } 
  } // end of for(Int_t rmBin=1;rmBin<=nBins;rmBin++) // reference multiplicity bins
 } // end of if(hist)
     
 return temp;
     
} // end of Map()

// =====================================================================================

TH1D* Rebin(TH1D *hist, Int_t co)
{
 // Rebin original histograms.
 
 if(nMergedBins[co] == 0)
 {
  cout<<endl;
  cout<<Form(" WARNING: nMergedBins[%i] == 0 !!!!",co)<<endl;
  cout<<endl;
  exit(0);
 } 
 if(!hist)
 {
  cout<<endl;
  cout<<" WARNING: hist is NULL in Rebin() !!!!"<<endl;
  cout<<endl;
  exit(0); 
 } 
 
 Int_t nBinsOld = hist->GetXaxis()->GetNbins(); 
 if(nBinsOld == 0){cout<<" WARNING: nBinsOld == 0 !!!!"<<endl;exit(0);}
 Double_t xMinOld = hist->GetXaxis()->GetXmin(); 
 Double_t xMaxOld = hist->GetXaxis()->GetXmax(); 
 Double_t binWidthOld = (xMaxOld-xMinOld)/nBinsOld;
 Int_t nBinsNew = TMath::Floor(nBinsOld/nMergedBins[co]);
 Double_t xMinNew = xMinOld;
 Double_t xMaxNew = xMinOld + nBinsNew*nMergedBins[co]*binWidthOld;
  
 TH1D *temp = new TH1D("","",nBinsNew,xMinNew,xMaxNew); // rebinned histogram 
 Int_t binNew = 1;
 Double_t value = 0.;
 Double_t error = 0.;
 Double_t dSum1 = 0.; // sum value_i/(error_i)^2
 Double_t dSum2 = 0.; // sum 1/(error_i)^2
 for(Int_t b=1;b<=nBinsOld;b++)
 {
  value = hist->GetBinContent(b);  
  error = hist->GetBinError(b);  
  if(error>0.)
  {
   dSum1+=value/(error*error);
   dSum2+=1./(error*error);
  }
  if(b%nMergedBins[co] == 0)
  {
   if(dSum2>0.)
   {
    temp->SetBinContent(binNew,dSum1/dSum2);
    temp->SetBinError(binNew,pow(1./dSum2,0.5));
   }
   binNew++;
   dSum1 = 0.;
   dSum2 = 0.;
  } // end of if(b%nMergedBins[co] == 0)
 } // end of for(Int_t b=1;b<=nBinsOld;b++)
  
 return temp;
      
} // end of TH1D* Rebin(TH1D *hist, Int_t co)

// =====================================================================================

TGraphErrors* GetGraphErrors(Int_t bin, Int_t nFiles, TH1D** qc)
{
 TGraphErrors *ge = new TGraphErrors(nFiles);
 for(Int_t f=0;f<nFiles;f++)
 {
  ge->SetPoint(f,f+0.5,qc[f]->GetBinContent(bin+1));
  ge->SetPointError(f,0,qc[f]->GetBinError(bin+1));
 }

 return ge;

} // end of TGraphErrors* GetGraphErrors(Int_t bin, Int_t nFiles, TH1D** qc)

// =====================================================================================

TH1D* StyleHist(TString yAxisTitle, Int_t co) 
{
 // Style histogram.
 
 TH1D *styleHist = new TH1D(yAxisTitle.Data(),"",(Int_t)xMax[co],0,xMax[co]);
 // y-axis:
 styleHist->GetYaxis()->SetRangeUser(yMin[co],yMax[co]);
 
 if(plotCumulantsVsReferenceMultiplicity)
 {
  styleHist->GetXaxis()->SetTitle("#LTreference multiplicity#GT");     
 } else
   {
    styleHist->GetXaxis()->SetTitle("# of RPs");         
   }
 
 styleHist->GetYaxis()->SetTitle(yAxisTitle.Data());
 
 return styleHist;

} // end of TH1D* StyleHist(TString yAxisTitle, Int_t co)  
  
// ===========================================================================================

TGraph* GetErrorMesh(TH1D *hist)
{
 // Error mesh.
 
 if(hist)
 {
  Int_t nBins = hist->GetNbinsX();
  Double_t value = 0.;
  Double_t error = 0.;
  // Counting the non-empty bins: 
  Int_t nNonEmptyBins = 0;
  for(Int_t i=1;i<nBins+1;i++)
  {
   value = hist->GetBinContent(i);
   error = hist->GetBinError(i);
   if(TMath::Abs(value)>0.0 && error>0.0)
   {
    nNonEmptyBins++;
   }
  } // end of for(Int_t i=1;i<nBins+1;i++)  
  // Error mesh:
  TGraph *errorMesh = new TGraph(2*nNonEmptyBins+1); 
  Int_t count = 0;
  Double_t binCenter = 0.;
  for(Int_t i=1;i<nBins+1;i++)
  {
   value = hist->GetBinContent(i);
   error = hist->GetBinError(i);
   // Setting up the the mesh:
   if(TMath::Abs(value)>0.0 && error>0.0)
   {    
    binCenter = hist->GetBinCenter(i);   
    errorMesh->SetPoint(count,binCenter,value+error);
    errorMesh->SetPoint(2*nNonEmptyBins-(count+1),binCenter,value-error);
    count++;
   }
  } // end of for(Int_t i=1;i<nBins+1;i++)
  // Closing the mesh area:
  Double_t xStart = 0.;
  Double_t yStart = 0.;
  errorMesh->GetPoint(0,xStart,yStart);
  errorMesh->SetPoint(2*nNonEmptyBins,xStart,yStart);   
 } // end if(hist)
 
 return errorMesh;
 
} // end of TGraph* GetErrorMesh(TH1D *hist)

// ===========================================================================================

void GlobalSettings()
{
 // Settings which will affect all plots.
 
 gROOT->SetStyle("Plain"); // default color is white instead of gray
 gStyle->SetOptStat(0); // remove stat. box from all histos
 TGaxis::SetMaxDigits(4); // prefer exp notation for 5 and more significant digits
 
} // end of void GlobalSettings()

// ===========================================================================================

void GetLists() 
{
 // Get from common output files the lists holding histograms for each method.

 TString fileName[nFiles][nMethods]; 
 TDirectoryFile *dirFile[nFiles][nMethods] = {{NULL}}; 
 TString listName[nFiles][nMethods]; 
 for(Int_t f=0;f<nFiles;f++)
 { 
  for(Int_t i=0;i<nMethods;i++)
  {
   // Form a file name for each method:
   fileName[f][i]+="output";
   fileName[f][i]+=method[i].Data();
   fileName[f][i]+="analysis";
   fileName[f][i]+=type[f].Data();
   // Access this file:
   if(commonOutputFiles[f]){dirFile[f][i] = (TDirectoryFile*)commonOutputFiles[f]->FindObjectAny(fileName[f][i].Data());}
   // Form a list name for each method:
   if(dirFile[f][i])
   {
    TList* listTemp = dirFile[f][i]->GetListOfKeys();
    if(listTemp && listTemp->GetEntries() == 1)
    {
     listName[f][i] = listTemp->At(0)->GetName(); // to be improved - implemented better
     dirFile[f][i]->GetObject(listName[f][i].Data(),lists[f][i]);
    } else
      {
       cout<<endl;
       cout<<" WARNING: Couldn't find a list "<<listName[f][i].Data()<<" in "<<commonOutputFiles[f]->GetName()<<" !!!!"<<endl;
       cout<<"          Did you use method "<<method[i].Data()<<" in the analysis which produced this file?"<<endl;
      }
   } else 
     {
      cout<<" WARNING: Couldn't find a file "<<fileName[f][i].Data()<<".root in "<<commonOutputFiles[f]->GetName()<<" !!!!"<<endl;
     }   
  } // end of for(Int_t i=0;i<nMethods;i++)   
 } // end of for(Int_t f=0;f<nFiles;f++)

} // end of void GetLists() 

// ===========================================================================================

void AccessCommonOutputFiles(TString commonOutputFileName)
{
 // Access all output files.
 
 for(Int_t f=0;f<nFiles;f++)
 { 
  if(bLookInSubdirectories)
  {
   if(!(gSystem->AccessPathName(Form("%s/%s/%s",gSystem->pwd(),files[f].Data(),commonOutputFileName.Data()),kFileExists)))
   {
    commonOutputFiles[f] = TFile::Open(Form("%s/%s/%s",gSystem->pwd(),files[f].Data(),commonOutputFileName.Data()),"READ");
   } else
     { 
      cout<<endl;
      cout<<" WARNING: Couldn't find the file "<<Form("%s/%s/%s",gSystem->pwd(),files[f].Data(),commonOutputFileName.Data())<<" !!!!"<<endl;
      cout<<"          Did you specify correctly all paths in TString files[nFiles]?"<<endl;
      cout<<"          Or you are misusing 'Bool_t bLookInSubdirectories'? "<<endl;
      cout<<endl;
      exit(0);
     }
  } else // to if(bLookInSubdirectories)
    {
     if(!(gSystem->AccessPathName(Form("%s/%s%s",gSystem->pwd(),files[f].Data(),".root"),kFileExists)))
     {
      commonOutputFiles[f] = TFile::Open(Form("%s/%s%s",gSystem->pwd(),files[f].Data(),".root"),"READ");
     } else
       { 
        cout<<endl;
        cout<<" WARNING: Couldn't find the file "<<Form("%s/%s%s",gSystem->pwd(),files[f].Data(),".root")<<" !!!!"<<endl;
        cout<<"          Did you specify correctly all file names in TString files[nFiles]?"<<endl;
        cout<<endl;
        exit(0);
       }
    }
 } // end of for(Int_t f=0;f<nFiles;f++)
 
} // void AccessCommonOutputFiles(TString commonOutputFileName);

// ===========================================================================================

void LoadLibrariesPC(const libModes analysisMode) {
  
  //--------------------------------------
  // Load the needed libraries most of them already loaded by aliroot
  //--------------------------------------
  //gSystem->Load("libTree");
  gSystem->Load("libGeom");
  gSystem->Load("libVMC");
  gSystem->Load("libXMLIO");
  gSystem->Load("libPhysics");
  
  //----------------------------------------------------------
  // >>>>>>>>>>> Local mode <<<<<<<<<<<<<< 
  //----------------------------------------------------------
  if (analysisMode==mLocal) {
    //--------------------------------------------------------
    // If you want to use already compiled libraries 
    // in the aliroot distribution
    //--------------------------------------------------------
    
    //==================================================================================  
    //load needed libraries:
    gSystem->AddIncludePath("-I$ROOTSYS/include");
    //gSystem->Load("libTree");
    
    // for AliRoot
    gSystem->AddIncludePath("-I$ALICE_ROOT/include");
    //gSystem->Load("libANALYSIS");
    gSystem->Load("libPWGflowBase");
    //cerr<<"libPWGflowBase loaded ..."<<endl;
    
  }
  
  else if (analysisMode==mLocalSource) {
    
    // In root inline compile
   
    // Constants  
    gROOT->LoadMacro("Base/AliFlowCommonConstants.cxx+");
    gROOT->LoadMacro("Base/AliFlowLYZConstants.cxx+");
    
    // Flow event
    gROOT->LoadMacro("Base/AliFlowVector.cxx+"); 
    gROOT->LoadMacro("Base/AliFlowTrackSimple.cxx+");    
    gROOT->LoadMacro("Base/AliFlowTrackSimpleCuts.cxx+");    
    gROOT->LoadMacro("Base/AliFlowEventSimple.cxx+");
   
    // Output histosgrams
    gROOT->LoadMacro("Base/AliFlowCommonHist.cxx+");
    gROOT->LoadMacro("Base/AliFlowCommonHistResults.cxx+");
    gROOT->LoadMacro("Base/AliFlowLYZHist1.cxx+");
    gROOT->LoadMacro("Base/AliFlowLYZHist2.cxx+");
    
    cout << "finished loading macros!" << endl;  
    
  }  
  
} // end of void LoadLibraries(const libModes analysisMode) 
 plotCumulants.C:1
 plotCumulants.C:2
 plotCumulants.C:3
 plotCumulants.C:4
 plotCumulants.C:5
 plotCumulants.C:6
 plotCumulants.C:7
 plotCumulants.C:8
 plotCumulants.C:9
 plotCumulants.C:10
 plotCumulants.C:11
 plotCumulants.C:12
 plotCumulants.C:13
 plotCumulants.C:14
 plotCumulants.C:15
 plotCumulants.C:16
 plotCumulants.C:17
 plotCumulants.C:18
 plotCumulants.C:19
 plotCumulants.C:20
 plotCumulants.C:21
 plotCumulants.C:22
 plotCumulants.C:23
 plotCumulants.C:24
 plotCumulants.C:25
 plotCumulants.C:26
 plotCumulants.C:27
 plotCumulants.C:28
 plotCumulants.C:29
 plotCumulants.C:30
 plotCumulants.C:31
 plotCumulants.C:32
 plotCumulants.C:33
 plotCumulants.C:34
 plotCumulants.C:35
 plotCumulants.C:36
 plotCumulants.C:37
 plotCumulants.C:38
 plotCumulants.C:39
 plotCumulants.C:40
 plotCumulants.C:41
 plotCumulants.C:42
 plotCumulants.C:43
 plotCumulants.C:44
 plotCumulants.C:45
 plotCumulants.C:46
 plotCumulants.C:47
 plotCumulants.C:48
 plotCumulants.C:49
 plotCumulants.C:50
 plotCumulants.C:51
 plotCumulants.C:52
 plotCumulants.C:53
 plotCumulants.C:54
 plotCumulants.C:55
 plotCumulants.C:56
 plotCumulants.C:57
 plotCumulants.C:58
 plotCumulants.C:59
 plotCumulants.C:60
 plotCumulants.C:61
 plotCumulants.C:62
 plotCumulants.C:63
 plotCumulants.C:64
 plotCumulants.C:65
 plotCumulants.C:66
 plotCumulants.C:67
 plotCumulants.C:68
 plotCumulants.C:69
 plotCumulants.C:70
 plotCumulants.C:71
 plotCumulants.C:72
 plotCumulants.C:73
 plotCumulants.C:74
 plotCumulants.C:75
 plotCumulants.C:76
 plotCumulants.C:77
 plotCumulants.C:78
 plotCumulants.C:79
 plotCumulants.C:80
 plotCumulants.C:81
 plotCumulants.C:82
 plotCumulants.C:83
 plotCumulants.C:84
 plotCumulants.C:85
 plotCumulants.C:86
 plotCumulants.C:87
 plotCumulants.C:88
 plotCumulants.C:89
 plotCumulants.C:90
 plotCumulants.C:91
 plotCumulants.C:92
 plotCumulants.C:93
 plotCumulants.C:94
 plotCumulants.C:95
 plotCumulants.C:96
 plotCumulants.C:97
 plotCumulants.C:98
 plotCumulants.C:99
 plotCumulants.C:100
 plotCumulants.C:101
 plotCumulants.C:102
 plotCumulants.C:103
 plotCumulants.C:104
 plotCumulants.C:105
 plotCumulants.C:106
 plotCumulants.C:107
 plotCumulants.C:108
 plotCumulants.C:109
 plotCumulants.C:110
 plotCumulants.C:111
 plotCumulants.C:112
 plotCumulants.C:113
 plotCumulants.C:114
 plotCumulants.C:115
 plotCumulants.C:116
 plotCumulants.C:117
 plotCumulants.C:118
 plotCumulants.C:119
 plotCumulants.C:120
 plotCumulants.C:121
 plotCumulants.C:122
 plotCumulants.C:123
 plotCumulants.C:124
 plotCumulants.C:125
 plotCumulants.C:126
 plotCumulants.C:127
 plotCumulants.C:128
 plotCumulants.C:129
 plotCumulants.C:130
 plotCumulants.C:131
 plotCumulants.C:132
 plotCumulants.C:133
 plotCumulants.C:134
 plotCumulants.C:135
 plotCumulants.C:136
 plotCumulants.C:137
 plotCumulants.C:138
 plotCumulants.C:139
 plotCumulants.C:140
 plotCumulants.C:141
 plotCumulants.C:142
 plotCumulants.C:143
 plotCumulants.C:144
 plotCumulants.C:145
 plotCumulants.C:146
 plotCumulants.C:147
 plotCumulants.C:148
 plotCumulants.C:149
 plotCumulants.C:150
 plotCumulants.C:151
 plotCumulants.C:152
 plotCumulants.C:153
 plotCumulants.C:154
 plotCumulants.C:155
 plotCumulants.C:156
 plotCumulants.C:157
 plotCumulants.C:158
 plotCumulants.C:159
 plotCumulants.C:160
 plotCumulants.C:161
 plotCumulants.C:162
 plotCumulants.C:163
 plotCumulants.C:164
 plotCumulants.C:165
 plotCumulants.C:166
 plotCumulants.C:167
 plotCumulants.C:168
 plotCumulants.C:169
 plotCumulants.C:170
 plotCumulants.C:171
 plotCumulants.C:172
 plotCumulants.C:173
 plotCumulants.C:174
 plotCumulants.C:175
 plotCumulants.C:176
 plotCumulants.C:177
 plotCumulants.C:178
 plotCumulants.C:179
 plotCumulants.C:180
 plotCumulants.C:181
 plotCumulants.C:182
 plotCumulants.C:183
 plotCumulants.C:184
 plotCumulants.C:185
 plotCumulants.C:186
 plotCumulants.C:187
 plotCumulants.C:188
 plotCumulants.C:189
 plotCumulants.C:190
 plotCumulants.C:191
 plotCumulants.C:192
 plotCumulants.C:193
 plotCumulants.C:194
 plotCumulants.C:195
 plotCumulants.C:196
 plotCumulants.C:197
 plotCumulants.C:198
 plotCumulants.C:199
 plotCumulants.C:200
 plotCumulants.C:201
 plotCumulants.C:202
 plotCumulants.C:203
 plotCumulants.C:204
 plotCumulants.C:205
 plotCumulants.C:206
 plotCumulants.C:207
 plotCumulants.C:208
 plotCumulants.C:209
 plotCumulants.C:210
 plotCumulants.C:211
 plotCumulants.C:212
 plotCumulants.C:213
 plotCumulants.C:214
 plotCumulants.C:215
 plotCumulants.C:216
 plotCumulants.C:217
 plotCumulants.C:218
 plotCumulants.C:219
 plotCumulants.C:220
 plotCumulants.C:221
 plotCumulants.C:222
 plotCumulants.C:223
 plotCumulants.C:224
 plotCumulants.C:225
 plotCumulants.C:226
 plotCumulants.C:227
 plotCumulants.C:228
 plotCumulants.C:229
 plotCumulants.C:230
 plotCumulants.C:231
 plotCumulants.C:232
 plotCumulants.C:233
 plotCumulants.C:234
 plotCumulants.C:235
 plotCumulants.C:236
 plotCumulants.C:237
 plotCumulants.C:238
 plotCumulants.C:239
 plotCumulants.C:240
 plotCumulants.C:241
 plotCumulants.C:242
 plotCumulants.C:243
 plotCumulants.C:244
 plotCumulants.C:245
 plotCumulants.C:246
 plotCumulants.C:247
 plotCumulants.C:248
 plotCumulants.C:249
 plotCumulants.C:250
 plotCumulants.C:251
 plotCumulants.C:252
 plotCumulants.C:253
 plotCumulants.C:254
 plotCumulants.C:255
 plotCumulants.C:256
 plotCumulants.C:257
 plotCumulants.C:258
 plotCumulants.C:259
 plotCumulants.C:260
 plotCumulants.C:261
 plotCumulants.C:262
 plotCumulants.C:263
 plotCumulants.C:264
 plotCumulants.C:265
 plotCumulants.C:266
 plotCumulants.C:267
 plotCumulants.C:268
 plotCumulants.C:269
 plotCumulants.C:270
 plotCumulants.C:271
 plotCumulants.C:272
 plotCumulants.C:273
 plotCumulants.C:274
 plotCumulants.C:275
 plotCumulants.C:276
 plotCumulants.C:277
 plotCumulants.C:278
 plotCumulants.C:279
 plotCumulants.C:280
 plotCumulants.C:281
 plotCumulants.C:282
 plotCumulants.C:283
 plotCumulants.C:284
 plotCumulants.C:285
 plotCumulants.C:286
 plotCumulants.C:287
 plotCumulants.C:288
 plotCumulants.C:289
 plotCumulants.C:290
 plotCumulants.C:291
 plotCumulants.C:292
 plotCumulants.C:293
 plotCumulants.C:294
 plotCumulants.C:295
 plotCumulants.C:296
 plotCumulants.C:297
 plotCumulants.C:298
 plotCumulants.C:299
 plotCumulants.C:300
 plotCumulants.C:301
 plotCumulants.C:302
 plotCumulants.C:303
 plotCumulants.C:304
 plotCumulants.C:305
 plotCumulants.C:306
 plotCumulants.C:307
 plotCumulants.C:308
 plotCumulants.C:309
 plotCumulants.C:310
 plotCumulants.C:311
 plotCumulants.C:312
 plotCumulants.C:313
 plotCumulants.C:314
 plotCumulants.C:315
 plotCumulants.C:316
 plotCumulants.C:317
 plotCumulants.C:318
 plotCumulants.C:319
 plotCumulants.C:320
 plotCumulants.C:321
 plotCumulants.C:322
 plotCumulants.C:323
 plotCumulants.C:324
 plotCumulants.C:325
 plotCumulants.C:326
 plotCumulants.C:327
 plotCumulants.C:328
 plotCumulants.C:329
 plotCumulants.C:330
 plotCumulants.C:331
 plotCumulants.C:332
 plotCumulants.C:333
 plotCumulants.C:334
 plotCumulants.C:335
 plotCumulants.C:336
 plotCumulants.C:337
 plotCumulants.C:338
 plotCumulants.C:339
 plotCumulants.C:340
 plotCumulants.C:341
 plotCumulants.C:342
 plotCumulants.C:343
 plotCumulants.C:344
 plotCumulants.C:345
 plotCumulants.C:346
 plotCumulants.C:347
 plotCumulants.C:348
 plotCumulants.C:349
 plotCumulants.C:350
 plotCumulants.C:351
 plotCumulants.C:352
 plotCumulants.C:353
 plotCumulants.C:354
 plotCumulants.C:355
 plotCumulants.C:356
 plotCumulants.C:357
 plotCumulants.C:358
 plotCumulants.C:359
 plotCumulants.C:360
 plotCumulants.C:361
 plotCumulants.C:362
 plotCumulants.C:363
 plotCumulants.C:364
 plotCumulants.C:365
 plotCumulants.C:366
 plotCumulants.C:367
 plotCumulants.C:368
 plotCumulants.C:369
 plotCumulants.C:370
 plotCumulants.C:371
 plotCumulants.C:372
 plotCumulants.C:373
 plotCumulants.C:374
 plotCumulants.C:375
 plotCumulants.C:376
 plotCumulants.C:377
 plotCumulants.C:378
 plotCumulants.C:379
 plotCumulants.C:380
 plotCumulants.C:381
 plotCumulants.C:382
 plotCumulants.C:383
 plotCumulants.C:384
 plotCumulants.C:385
 plotCumulants.C:386
 plotCumulants.C:387
 plotCumulants.C:388
 plotCumulants.C:389
 plotCumulants.C:390
 plotCumulants.C:391
 plotCumulants.C:392
 plotCumulants.C:393
 plotCumulants.C:394
 plotCumulants.C:395
 plotCumulants.C:396
 plotCumulants.C:397
 plotCumulants.C:398
 plotCumulants.C:399
 plotCumulants.C:400
 plotCumulants.C:401
 plotCumulants.C:402
 plotCumulants.C:403
 plotCumulants.C:404
 plotCumulants.C:405
 plotCumulants.C:406
 plotCumulants.C:407
 plotCumulants.C:408
 plotCumulants.C:409
 plotCumulants.C:410
 plotCumulants.C:411
 plotCumulants.C:412
 plotCumulants.C:413
 plotCumulants.C:414
 plotCumulants.C:415
 plotCumulants.C:416
 plotCumulants.C:417
 plotCumulants.C:418
 plotCumulants.C:419
 plotCumulants.C:420
 plotCumulants.C:421
 plotCumulants.C:422
 plotCumulants.C:423
 plotCumulants.C:424
 plotCumulants.C:425
 plotCumulants.C:426
 plotCumulants.C:427
 plotCumulants.C:428
 plotCumulants.C:429
 plotCumulants.C:430
 plotCumulants.C:431
 plotCumulants.C:432
 plotCumulants.C:433
 plotCumulants.C:434
 plotCumulants.C:435
 plotCumulants.C:436
 plotCumulants.C:437
 plotCumulants.C:438
 plotCumulants.C:439
 plotCumulants.C:440
 plotCumulants.C:441
 plotCumulants.C:442
 plotCumulants.C:443
 plotCumulants.C:444
 plotCumulants.C:445
 plotCumulants.C:446
 plotCumulants.C:447
 plotCumulants.C:448
 plotCumulants.C:449
 plotCumulants.C:450
 plotCumulants.C:451
 plotCumulants.C:452
 plotCumulants.C:453
 plotCumulants.C:454
 plotCumulants.C:455
 plotCumulants.C:456
 plotCumulants.C:457
 plotCumulants.C:458
 plotCumulants.C:459
 plotCumulants.C:460
 plotCumulants.C:461
 plotCumulants.C:462
 plotCumulants.C:463
 plotCumulants.C:464
 plotCumulants.C:465
 plotCumulants.C:466
 plotCumulants.C:467
 plotCumulants.C:468
 plotCumulants.C:469
 plotCumulants.C:470
 plotCumulants.C:471
 plotCumulants.C:472
 plotCumulants.C:473
 plotCumulants.C:474
 plotCumulants.C:475
 plotCumulants.C:476
 plotCumulants.C:477
 plotCumulants.C:478
 plotCumulants.C:479
 plotCumulants.C:480
 plotCumulants.C:481
 plotCumulants.C:482
 plotCumulants.C:483
 plotCumulants.C:484
 plotCumulants.C:485
 plotCumulants.C:486
 plotCumulants.C:487
 plotCumulants.C:488
 plotCumulants.C:489
 plotCumulants.C:490
 plotCumulants.C:491
 plotCumulants.C:492
 plotCumulants.C:493
 plotCumulants.C:494
 plotCumulants.C:495
 plotCumulants.C:496
 plotCumulants.C:497
 plotCumulants.C:498
 plotCumulants.C:499
 plotCumulants.C:500
 plotCumulants.C:501
 plotCumulants.C:502
 plotCumulants.C:503
 plotCumulants.C:504
 plotCumulants.C:505
 plotCumulants.C:506
 plotCumulants.C:507
 plotCumulants.C:508
 plotCumulants.C:509
 plotCumulants.C:510
 plotCumulants.C:511
 plotCumulants.C:512
 plotCumulants.C:513
 plotCumulants.C:514
 plotCumulants.C:515
 plotCumulants.C:516
 plotCumulants.C:517
 plotCumulants.C:518
 plotCumulants.C:519
 plotCumulants.C:520
 plotCumulants.C:521
 plotCumulants.C:522
 plotCumulants.C:523
 plotCumulants.C:524
 plotCumulants.C:525
 plotCumulants.C:526
 plotCumulants.C:527
 plotCumulants.C:528
 plotCumulants.C:529
 plotCumulants.C:530
 plotCumulants.C:531
 plotCumulants.C:532
 plotCumulants.C:533
 plotCumulants.C:534
 plotCumulants.C:535
 plotCumulants.C:536
 plotCumulants.C:537
 plotCumulants.C:538
 plotCumulants.C:539
 plotCumulants.C:540
 plotCumulants.C:541
 plotCumulants.C:542
 plotCumulants.C:543
 plotCumulants.C:544
 plotCumulants.C:545
 plotCumulants.C:546
 plotCumulants.C:547
 plotCumulants.C:548
 plotCumulants.C:549
 plotCumulants.C:550
 plotCumulants.C:551
 plotCumulants.C:552
 plotCumulants.C:553
 plotCumulants.C:554
 plotCumulants.C:555
 plotCumulants.C:556
 plotCumulants.C:557
 plotCumulants.C:558
 plotCumulants.C:559
 plotCumulants.C:560
 plotCumulants.C:561
 plotCumulants.C:562
 plotCumulants.C:563
 plotCumulants.C:564
 plotCumulants.C:565
 plotCumulants.C:566
 plotCumulants.C:567
 plotCumulants.C:568
 plotCumulants.C:569
 plotCumulants.C:570
 plotCumulants.C:571
 plotCumulants.C:572
 plotCumulants.C:573
 plotCumulants.C:574
 plotCumulants.C:575
 plotCumulants.C:576
 plotCumulants.C:577
 plotCumulants.C:578
 plotCumulants.C:579
 plotCumulants.C:580
 plotCumulants.C:581
 plotCumulants.C:582
 plotCumulants.C:583
 plotCumulants.C:584
 plotCumulants.C:585
 plotCumulants.C:586
 plotCumulants.C:587
 plotCumulants.C:588
 plotCumulants.C:589
 plotCumulants.C:590
 plotCumulants.C:591
 plotCumulants.C:592
 plotCumulants.C:593
 plotCumulants.C:594
 plotCumulants.C:595
 plotCumulants.C:596
 plotCumulants.C:597
 plotCumulants.C:598
 plotCumulants.C:599
 plotCumulants.C:600
 plotCumulants.C:601
 plotCumulants.C:602
 plotCumulants.C:603
 plotCumulants.C:604
 plotCumulants.C:605
 plotCumulants.C:606
 plotCumulants.C:607
 plotCumulants.C:608
 plotCumulants.C:609
 plotCumulants.C:610
 plotCumulants.C:611
 plotCumulants.C:612
 plotCumulants.C:613
 plotCumulants.C:614
 plotCumulants.C:615
 plotCumulants.C:616
 plotCumulants.C:617
 plotCumulants.C:618
 plotCumulants.C:619
 plotCumulants.C:620
 plotCumulants.C:621
 plotCumulants.C:622
 plotCumulants.C:623
 plotCumulants.C:624
 plotCumulants.C:625
 plotCumulants.C:626
 plotCumulants.C:627
 plotCumulants.C:628
 plotCumulants.C:629
 plotCumulants.C:630
 plotCumulants.C:631
 plotCumulants.C:632
 plotCumulants.C:633
 plotCumulants.C:634
 plotCumulants.C:635
 plotCumulants.C:636
 plotCumulants.C:637
 plotCumulants.C:638
 plotCumulants.C:639
 plotCumulants.C:640
 plotCumulants.C:641
 plotCumulants.C:642
 plotCumulants.C:643
 plotCumulants.C:644
 plotCumulants.C:645
 plotCumulants.C:646
 plotCumulants.C:647
 plotCumulants.C:648
 plotCumulants.C:649
 plotCumulants.C:650
 plotCumulants.C:651
 plotCumulants.C:652
 plotCumulants.C:653
 plotCumulants.C:654
 plotCumulants.C:655
 plotCumulants.C:656
 plotCumulants.C:657
 plotCumulants.C:658
 plotCumulants.C:659
 plotCumulants.C:660
 plotCumulants.C:661
 plotCumulants.C:662
 plotCumulants.C:663
 plotCumulants.C:664
 plotCumulants.C:665
 plotCumulants.C:666
 plotCumulants.C:667
 plotCumulants.C:668
 plotCumulants.C:669
 plotCumulants.C:670
 plotCumulants.C:671
 plotCumulants.C:672
 plotCumulants.C:673
 plotCumulants.C:674
 plotCumulants.C:675
 plotCumulants.C:676
 plotCumulants.C:677
 plotCumulants.C:678
 plotCumulants.C:679
 plotCumulants.C:680
 plotCumulants.C:681
 plotCumulants.C:682
 plotCumulants.C:683
 plotCumulants.C:684
 plotCumulants.C:685
 plotCumulants.C:686
 plotCumulants.C:687
 plotCumulants.C:688
 plotCumulants.C:689
 plotCumulants.C:690
 plotCumulants.C:691
 plotCumulants.C:692
 plotCumulants.C:693
 plotCumulants.C:694
 plotCumulants.C:695
 plotCumulants.C:696
 plotCumulants.C:697
 plotCumulants.C:698
 plotCumulants.C:699
 plotCumulants.C:700
 plotCumulants.C:701
 plotCumulants.C:702
 plotCumulants.C:703
 plotCumulants.C:704
 plotCumulants.C:705
 plotCumulants.C:706
 plotCumulants.C:707
 plotCumulants.C:708
 plotCumulants.C:709
 plotCumulants.C:710
 plotCumulants.C:711
 plotCumulants.C:712
 plotCumulants.C:713
 plotCumulants.C:714
 plotCumulants.C:715
 plotCumulants.C:716
 plotCumulants.C:717
 plotCumulants.C:718
 plotCumulants.C:719
 plotCumulants.C:720
 plotCumulants.C:721
 plotCumulants.C:722
 plotCumulants.C:723
 plotCumulants.C:724
 plotCumulants.C:725
 plotCumulants.C:726
 plotCumulants.C:727
 plotCumulants.C:728
 plotCumulants.C:729
 plotCumulants.C:730
 plotCumulants.C:731
 plotCumulants.C:732
 plotCumulants.C:733
 plotCumulants.C:734
 plotCumulants.C:735
 plotCumulants.C:736
 plotCumulants.C:737
 plotCumulants.C:738
 plotCumulants.C:739
 plotCumulants.C:740
 plotCumulants.C:741
 plotCumulants.C:742
 plotCumulants.C:743
 plotCumulants.C:744
 plotCumulants.C:745
 plotCumulants.C:746
 plotCumulants.C:747
 plotCumulants.C:748
 plotCumulants.C:749
 plotCumulants.C:750
 plotCumulants.C:751
 plotCumulants.C:752
 plotCumulants.C:753
 plotCumulants.C:754
 plotCumulants.C:755
 plotCumulants.C:756
 plotCumulants.C:757
 plotCumulants.C:758
 plotCumulants.C:759
 plotCumulants.C:760
 plotCumulants.C:761
 plotCumulants.C:762
 plotCumulants.C:763
 plotCumulants.C:764
 plotCumulants.C:765
 plotCumulants.C:766
 plotCumulants.C:767
 plotCumulants.C:768
 plotCumulants.C:769
 plotCumulants.C:770
 plotCumulants.C:771
 plotCumulants.C:772
 plotCumulants.C:773
 plotCumulants.C:774
 plotCumulants.C:775
 plotCumulants.C:776
 plotCumulants.C:777
 plotCumulants.C:778
 plotCumulants.C:779
 plotCumulants.C:780
 plotCumulants.C:781
 plotCumulants.C:782
 plotCumulants.C:783
 plotCumulants.C:784
 plotCumulants.C:785
 plotCumulants.C:786
 plotCumulants.C:787
 plotCumulants.C:788
 plotCumulants.C:789
 plotCumulants.C:790
 plotCumulants.C:791
 plotCumulants.C:792
 plotCumulants.C:793
 plotCumulants.C:794
 plotCumulants.C:795
 plotCumulants.C:796
 plotCumulants.C:797
 plotCumulants.C:798
 plotCumulants.C:799
 plotCumulants.C:800
 plotCumulants.C:801
 plotCumulants.C:802
 plotCumulants.C:803
 plotCumulants.C:804
 plotCumulants.C:805
 plotCumulants.C:806
 plotCumulants.C:807
 plotCumulants.C:808
 plotCumulants.C:809
 plotCumulants.C:810
 plotCumulants.C:811
 plotCumulants.C:812
 plotCumulants.C:813
 plotCumulants.C:814
 plotCumulants.C:815
 plotCumulants.C:816
 plotCumulants.C:817
 plotCumulants.C:818
 plotCumulants.C:819
 plotCumulants.C:820
 plotCumulants.C:821
 plotCumulants.C:822
 plotCumulants.C:823
 plotCumulants.C:824
 plotCumulants.C:825
 plotCumulants.C:826
 plotCumulants.C:827
 plotCumulants.C:828
 plotCumulants.C:829
 plotCumulants.C:830
 plotCumulants.C:831
 plotCumulants.C:832
 plotCumulants.C:833
 plotCumulants.C:834
 plotCumulants.C:835
 plotCumulants.C:836
 plotCumulants.C:837
 plotCumulants.C:838
 plotCumulants.C:839
 plotCumulants.C:840
 plotCumulants.C:841
 plotCumulants.C:842
 plotCumulants.C:843
 plotCumulants.C:844
 plotCumulants.C:845
 plotCumulants.C:846
 plotCumulants.C:847
 plotCumulants.C:848
 plotCumulants.C:849
 plotCumulants.C:850
 plotCumulants.C:851
 plotCumulants.C:852
 plotCumulants.C:853
 plotCumulants.C:854
 plotCumulants.C:855
 plotCumulants.C:856
 plotCumulants.C:857
 plotCumulants.C:858
 plotCumulants.C:859
 plotCumulants.C:860
 plotCumulants.C:861
 plotCumulants.C:862
 plotCumulants.C:863
 plotCumulants.C:864
 plotCumulants.C:865
 plotCumulants.C:866
 plotCumulants.C:867
 plotCumulants.C:868
 plotCumulants.C:869
 plotCumulants.C:870
 plotCumulants.C:871
 plotCumulants.C:872
 plotCumulants.C:873
 plotCumulants.C:874
 plotCumulants.C:875
 plotCumulants.C:876
 plotCumulants.C:877
 plotCumulants.C:878
 plotCumulants.C:879
 plotCumulants.C:880
 plotCumulants.C:881
 plotCumulants.C:882
 plotCumulants.C:883
 plotCumulants.C:884
 plotCumulants.C:885
 plotCumulants.C:886
 plotCumulants.C:887
 plotCumulants.C:888
 plotCumulants.C:889
 plotCumulants.C:890
 plotCumulants.C:891
 plotCumulants.C:892
 plotCumulants.C:893
 plotCumulants.C:894
 plotCumulants.C:895
 plotCumulants.C:896
 plotCumulants.C:897
 plotCumulants.C:898
 plotCumulants.C:899
 plotCumulants.C:900
 plotCumulants.C:901
 plotCumulants.C:902
 plotCumulants.C:903
 plotCumulants.C:904
 plotCumulants.C:905
 plotCumulants.C:906
 plotCumulants.C:907
 plotCumulants.C:908
 plotCumulants.C:909
 plotCumulants.C:910
 plotCumulants.C:911
 plotCumulants.C:912
 plotCumulants.C:913
 plotCumulants.C:914
 plotCumulants.C:915
 plotCumulants.C:916
 plotCumulants.C:917
 plotCumulants.C:918
 plotCumulants.C:919
 plotCumulants.C:920
 plotCumulants.C:921
 plotCumulants.C:922
 plotCumulants.C:923
 plotCumulants.C:924
 plotCumulants.C:925
 plotCumulants.C:926
 plotCumulants.C:927
 plotCumulants.C:928
 plotCumulants.C:929
 plotCumulants.C:930
 plotCumulants.C:931
 plotCumulants.C:932
 plotCumulants.C:933
 plotCumulants.C:934
 plotCumulants.C:935
 plotCumulants.C:936
 plotCumulants.C:937
 plotCumulants.C:938
 plotCumulants.C:939
 plotCumulants.C:940
 plotCumulants.C:941
 plotCumulants.C:942
 plotCumulants.C:943
 plotCumulants.C:944
 plotCumulants.C:945
 plotCumulants.C:946
 plotCumulants.C:947
 plotCumulants.C:948
 plotCumulants.C:949
 plotCumulants.C:950
 plotCumulants.C:951
 plotCumulants.C:952
 plotCumulants.C:953
 plotCumulants.C:954
 plotCumulants.C:955
 plotCumulants.C:956
 plotCumulants.C:957
 plotCumulants.C:958
 plotCumulants.C:959
 plotCumulants.C:960
 plotCumulants.C:961
 plotCumulants.C:962
 plotCumulants.C:963
 plotCumulants.C:964
 plotCumulants.C:965
 plotCumulants.C:966
 plotCumulants.C:967
 plotCumulants.C:968
 plotCumulants.C:969
 plotCumulants.C:970
 plotCumulants.C:971
 plotCumulants.C:972
 plotCumulants.C:973
 plotCumulants.C:974
 plotCumulants.C:975
 plotCumulants.C:976
 plotCumulants.C:977
 plotCumulants.C:978
 plotCumulants.C:979
 plotCumulants.C:980
 plotCumulants.C:981
 plotCumulants.C:982
 plotCumulants.C:983
 plotCumulants.C:984
 plotCumulants.C:985
 plotCumulants.C:986
 plotCumulants.C:987
 plotCumulants.C:988
 plotCumulants.C:989
 plotCumulants.C:990
 plotCumulants.C:991
 plotCumulants.C:992
 plotCumulants.C:993
 plotCumulants.C:994
 plotCumulants.C:995
 plotCumulants.C:996
 plotCumulants.C:997
 plotCumulants.C:998
 plotCumulants.C:999
 plotCumulants.C:1000
 plotCumulants.C:1001
 plotCumulants.C:1002
 plotCumulants.C:1003
 plotCumulants.C:1004
 plotCumulants.C:1005
 plotCumulants.C:1006
 plotCumulants.C:1007
 plotCumulants.C:1008
 plotCumulants.C:1009
 plotCumulants.C:1010
 plotCumulants.C:1011
 plotCumulants.C:1012
 plotCumulants.C:1013
 plotCumulants.C:1014
 plotCumulants.C:1015
 plotCumulants.C:1016
 plotCumulants.C:1017
 plotCumulants.C:1018
 plotCumulants.C:1019
 plotCumulants.C:1020
 plotCumulants.C:1021
 plotCumulants.C:1022
 plotCumulants.C:1023
 plotCumulants.C:1024
 plotCumulants.C:1025
 plotCumulants.C:1026
 plotCumulants.C:1027
 plotCumulants.C:1028
 plotCumulants.C:1029
 plotCumulants.C:1030
 plotCumulants.C:1031
 plotCumulants.C:1032
 plotCumulants.C:1033
 plotCumulants.C:1034
 plotCumulants.C:1035
 plotCumulants.C:1036
 plotCumulants.C:1037
 plotCumulants.C:1038
 plotCumulants.C:1039
 plotCumulants.C:1040
 plotCumulants.C:1041
 plotCumulants.C:1042
 plotCumulants.C:1043
 plotCumulants.C:1044
 plotCumulants.C:1045
 plotCumulants.C:1046
 plotCumulants.C:1047
 plotCumulants.C:1048
 plotCumulants.C:1049
 plotCumulants.C:1050
 plotCumulants.C:1051
 plotCumulants.C:1052
 plotCumulants.C:1053
 plotCumulants.C:1054
 plotCumulants.C:1055
 plotCumulants.C:1056
 plotCumulants.C:1057
 plotCumulants.C:1058
 plotCumulants.C:1059
 plotCumulants.C:1060
 plotCumulants.C:1061
 plotCumulants.C:1062
 plotCumulants.C:1063
 plotCumulants.C:1064
 plotCumulants.C:1065
 plotCumulants.C:1066
 plotCumulants.C:1067
 plotCumulants.C:1068
 plotCumulants.C:1069
 plotCumulants.C:1070
 plotCumulants.C:1071
 plotCumulants.C:1072
 plotCumulants.C:1073
 plotCumulants.C:1074
 plotCumulants.C:1075
 plotCumulants.C:1076
 plotCumulants.C:1077
 plotCumulants.C:1078
 plotCumulants.C:1079
 plotCumulants.C:1080
 plotCumulants.C:1081
 plotCumulants.C:1082
 plotCumulants.C:1083
 plotCumulants.C:1084
 plotCumulants.C:1085
 plotCumulants.C:1086
 plotCumulants.C:1087
 plotCumulants.C:1088
 plotCumulants.C:1089
 plotCumulants.C:1090
 plotCumulants.C:1091
 plotCumulants.C:1092
 plotCumulants.C:1093
 plotCumulants.C:1094
 plotCumulants.C:1095
 plotCumulants.C:1096
 plotCumulants.C:1097
 plotCumulants.C:1098
 plotCumulants.C:1099
 plotCumulants.C:1100
 plotCumulants.C:1101
 plotCumulants.C:1102
 plotCumulants.C:1103
 plotCumulants.C:1104
 plotCumulants.C:1105
 plotCumulants.C:1106
 plotCumulants.C:1107
 plotCumulants.C:1108
 plotCumulants.C:1109
 plotCumulants.C:1110
 plotCumulants.C:1111
 plotCumulants.C:1112
 plotCumulants.C:1113
 plotCumulants.C:1114
 plotCumulants.C:1115
 plotCumulants.C:1116
 plotCumulants.C:1117
 plotCumulants.C:1118
 plotCumulants.C:1119
 plotCumulants.C:1120
 plotCumulants.C:1121
 plotCumulants.C:1122
 plotCumulants.C:1123
 plotCumulants.C:1124
 plotCumulants.C:1125
 plotCumulants.C:1126
 plotCumulants.C:1127
 plotCumulants.C:1128
 plotCumulants.C:1129
 plotCumulants.C:1130
 plotCumulants.C:1131
 plotCumulants.C:1132
 plotCumulants.C:1133
 plotCumulants.C:1134
 plotCumulants.C:1135
 plotCumulants.C:1136
 plotCumulants.C:1137
 plotCumulants.C:1138
 plotCumulants.C:1139
 plotCumulants.C:1140
 plotCumulants.C:1141
 plotCumulants.C:1142
 plotCumulants.C:1143
 plotCumulants.C:1144
 plotCumulants.C:1145
 plotCumulants.C:1146
 plotCumulants.C:1147
 plotCumulants.C:1148
 plotCumulants.C:1149
 plotCumulants.C:1150
 plotCumulants.C:1151
 plotCumulants.C:1152
 plotCumulants.C:1153
 plotCumulants.C:1154
 plotCumulants.C:1155
 plotCumulants.C:1156
 plotCumulants.C:1157
 plotCumulants.C:1158
 plotCumulants.C:1159
 plotCumulants.C:1160
 plotCumulants.C:1161
 plotCumulants.C:1162
 plotCumulants.C:1163
 plotCumulants.C:1164
 plotCumulants.C:1165
 plotCumulants.C:1166
 plotCumulants.C:1167
 plotCumulants.C:1168