ROOT logo
// ... 

enum libModes {mLocal,mLocalSource};

const Int_t nFilesMax = 10; // number of files to be accessed to estimate spread

Bool_t showPlotForReferenceFlow = kTRUE;
Bool_t showPlotForIntegratedFlowRP = kTRUE;
Bool_t showPlotForIntegratedFlowPOI = kTRUE;
Bool_t showErrorOnMergedResult = kTRUE; 

const Int_t nMethods = 13;
TString method[nMethods] = {"MCEP","SP","2,GFC","2,QC","4,GFC","4,QC","6,GFC","6,QC","8,GFC","8,QC","FQD","LYZ1SUM","LYZ1PROD"};
Int_t methodMarkerStyle[nMethods] = {21,21,21,21,21,21,21,21,21,21,21,21,21};
Int_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};
Int_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};

/*
const Int_t nMethods = 4;
TString method[nMethods] = {"2,QC","4,QC","6,QC","8,QC"};
Int_t methodMarkerStyle[nMethods] = {21,21,21,21};
Int_t methodMarkerColor[nMethods] = {kRed-7,kRed-7,kRed-7,kRed-7};
Int_t methodMeshColor[nMethods] = {kRed-10,kRed-10,kRed-10,kRed-10};
*/

void showSpread(TString type="", Int_t mode=mLocal)
{
 // type: type of analysis can be ESD, AOD, MC, ESDMCkineESD, ESDMCkineMC
 //       (if type="" output files are from MC simulation (default))
 // mode: if mode = mLocal: analyze data on your computer using aliroot
 //       if mode = mLocalSource: analyze data on your computer using root + source files 

 // Cross-check if the user's settings make sense:
 CrossCheckUserSettings();
 
 // Load needed libraries:                       
 LoadLibrariesSS(mode);  
  
 // Output file name:
 TString outputFileName = "AnalysisResults.root"; 
 
 // Labels for reference flow, integrated flow of RPs and of POIs:
 TString label[3] = {"","RP","POI"};
  
 // Standard magic:
 TString *baseDirPath = new TString(gSystem->pwd());
 TSystemDirectory *baseDir = new TSystemDirectory(".",baseDirPath->Data());          
 TList *listOfFilesInBaseDir = baseDir->GetListOfFiles();
 TStopwatch timer;
 timer.Start();
 // listOfFilesInBaseDir->Print();
 Int_t nFiles = listOfFilesInBaseDir->GetEntries();
 Int_t fileCounter = 0;
 Double_t result[nMethods][3][nFilesMax] = {{{0.}}}; // [3 = "", "RP" or "POI"]
 Double_t error[nMethods][3][nFilesMax] = {{{0.}}}; // [3 = "", "RP" or "POI"]
 Double_t resultMinMax[nMethods][3][2] = {{{0.}}}; // [3 = "", "RP" or "POI"], [2 = min value, max value]
 for(Int_t m=0;m<nMethods;m++)
 {
  for(Int_t l=0;l<3;l++)
  {
   resultMinMax[m][l][0] = 44.;
   resultMinMax[m][l][1] = -44.;
  }
 } 
 Double_t styleHistMinMax[3][2] = {{0.}}; // [3 = "", "RP" or "POI"], [2 = min value, max value]
 for(Int_t l=0;l<3;l++)
 {
  styleHistMinMax[l][0] = 44.;
  styleHistMinMax[l][1] = -44.;
 }  
 cout<<endl;
 for(Int_t iFile=0;iFile<nFiles;iFile++)
 {
  TSystemFile *currentFile = (TSystemFile*)listOfFilesInBaseDir->At(iFile);
  // Consider only subdirectories: 
  if(!currentFile || 
     !currentFile->IsDirectory() || 
     strcmp(currentFile->GetName(), ".") == 0 || 
    strcmp(currentFile->GetName(), "..") == 0) continue; 
  // Accessing the output file "AnalysisResults.root" in current subdirectory: 
  TString currentSubDirName = baseDirPath->Data();
  (currentSubDirName+="/")+=currentFile->GetName();
  currentSubDirName+="/";
  TString fileName = currentSubDirName; 
  fileName+=outputFileName.Data();
  if(!(gSystem->AccessPathName(fileName.Data(),kFileExists)))
  {
   TFile *file = NULL; 
   file = TFile::Open(fileName.Data(),"READ");
   for(Int_t m=0;m<nMethods;m++)
   {
    // Access from common output file the output file for particular method:
    TDirectoryFile *methodFile = NULL;
    methodFile = GetMethodFile(file,method[m],type);  
    for(Int_t l=0;l<3;l++)
    {
     TH1D *histResult = NULL;
     histResult = GetHistogramWithResult(method[m],label[l],methodFile);
     if(histResult)
     {
      // Access the results:
      result[m][l][fileCounter] = histResult->GetBinContent(1); 
      // Access the errors:
      error[m][l][fileCounter] = histResult->GetBinError(1);
      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)
      {
       // Establish min and max values for results:
       if(resultMinMax[m][l][0] > result[m][l][fileCounter]) resultMinMax[m][l][0] = result[m][l][fileCounter]; // min value
       if(resultMinMax[m][l][1] < result[m][l][fileCounter]) resultMinMax[m][l][1] = result[m][l][fileCounter]; // max value
       // Establish min and max values for style histograms:
       if(styleHistMinMax[l][0] > result[m][l][fileCounter]) styleHistMinMax[l][0] = result[m][l][fileCounter]; // min value
       if(styleHistMinMax[l][1] < result[m][l][fileCounter]) styleHistMinMax[l][1] = result[m][l][fileCounter]; // max value    
      }
     }
    } // end of for(Int_t l=0;l<3;l++)
   } // end of for(Int_t m=0;m<nMethods;m++)
   if(file) file->Close();
   fileCounter++;
   //if(fileCounter%10==0)
   //{
    cout<<Form("Accessed %d files \"AnalysisResults.root\" so far....",fileCounter)<<"\r"<<flush;
   //}   
  } 
  if(fileCounter == nFilesMax) break;
 } // end of for(Int_t iFile=0;iFile<nFiles;iFile++)   
  
 cout<<Form("Accessed %d files \"AnalysisResults.root\" in total to estimate spread. ",fileCounter)<<endl;
 cout<<endl;
 if(fileCounter==0){exit(0);}
 const Int_t nFilesFinal = fileCounter;

 // Make for each method graph holding results:
 TGraph *methodGraph[nMethods][3] = {{NULL}}; // [3 = "", "RP" or "POI"] 
 Double_t x[nMethods][nFilesFinal] = {{0.}};
 for(Int_t m=0;m<nMethods;m++)
 {
  for(Int_t f=0;f<nFilesFinal;f++)
  {
   x[m][f]=m+0.5;
  } 
 }
 for(Int_t m=0;m<nMethods;m++)
 {
  for(Int_t l=0;l<3;l++)
  {
   methodGraph[m][l] = new TGraph(nFilesFinal,x[m],result[m][l]);
   methodGraph[m][l]->SetMarkerStyle(methodMarkerStyle[m]);
   methodGraph[m][l]->SetMarkerColor(methodMarkerColor[m]);
  } // end of for(Int_t l=0;l<3;l++)
 } // for(Int_t m=0;m<nMethods;m++)
 
 // Make for each method coloured mesh out of min and max values:
 Double_t meshWidth = 0.25;
 TGraph *methodMesh[nMethods][3] = {{NULL}}; // [3 = "", "RP" or "POI"]
 for(Int_t m=0;m<nMethods;m++)
 {
  for(Int_t l=0;l<3;l++)
  {
   if(resultMinMax[m][l][0]<44. && resultMinMax[m][l][1]>-44.)
   {
    methodMesh[m][l] = new TGraph(5);
    methodMesh[m][l]->SetPoint(0,(m+1-0.5)-meshWidth,resultMinMax[m][l][0]);
    methodMesh[m][l]->SetPoint(1,(m+1-0.5)+meshWidth,resultMinMax[m][l][0]);
    methodMesh[m][l]->SetPoint(2,(m+1-0.5)+meshWidth,resultMinMax[m][l][1]);
    methodMesh[m][l]->SetPoint(3,(m+1-0.5)-meshWidth,resultMinMax[m][l][1]);
    methodMesh[m][l]->SetPoint(4,(m+1-0.5)-meshWidth,resultMinMax[m][l][0]);    
    methodMesh[m][l]->SetFillStyle(1001);
    methodMesh[m][l]->SetFillColor(methodMeshColor[m]);
   } 
  }
 }
  
 // Access for each method the results from the merged, large statistics file:
 Double_t resultMerged[nMethods][3] = {{0.}}; // [3 = "", "RP" or "POI"]
 TString mergedFileName = Form("%s%s%s",gSystem->pwd(),"/",outputFileName.Data());
 TFile *mergedFile = NULL; 
 mergedFile = TFile::Open(mergedFileName.Data(),"READ"); 
 for(Int_t m=0;m<nMethods;m++)
 {
  TDirectoryFile *methodFile = NULL;
  if(!(gSystem->AccessPathName(fileName.Data(),kFileExists)))
  {
   if(mergedFile) methodFile = GetMethodFile(mergedFile,method[m],type);  
  } else
    {
     cout<<"WARNING: Couldn't find the merged, large statistics file "<<endl;
     cout<<"         "<<fileName.Data()<<endl;
     cout<<"         in directory "<<gSystem->pwd()<<" !!!!"<<endl;     
     cout<<"         Use macros mergeOuput.C and redoFinish.C to get it."<<endl;
     cout<<endl;
     break;
    }
  for(Int_t l=0;l<3;l++)
  {
   TH1D *histResult = NULL;
   if(methodFile)
   { 
    histResult = GetHistogramWithResult(method[m],label[l],methodFile);
   }
   if(histResult)
   {
    // Access the results from the merged, large statistics file:
    resultMerged[m][l] = histResult->GetBinContent(1);
   } // end of for(Int_t l=0;l<3;l++)
  }
 } // end of for(Int_t m=0;m<nMethods;m++)  
 if(mergedFile) mergedFile->Close();
        
 // Make for each method graph holding results from the merged, large statistics file
 // and the errors from the randomly chosen small statistics file:
 TGraphErrors *methodMergedGraph[nMethods][3] = {{NULL}}; // [3 = "", "RP" or "POI"] 
 Double_t xMerged[nMethods] = {0.};
 for(Int_t m=0;m<nMethods;m++)
 {
  xMerged[m]=m+0.5; 
 }
 // Select randomly small statistics file:
 gRandom->SetSeed((UInt_t) (4400*timer.RealTime()/fileCounter));
 Int_t randomFile = (Int_t)gRandom->Uniform(0,fileCounter); 
 for(Int_t m=0;m<nMethods;m++)
 {
  for(Int_t l=0;l<3;l++)
  {
   methodMergedGraph[m][l] = new TGraphErrors(1);
   methodMergedGraph[m][l]->SetPoint(0,xMerged[m],resultMerged[m][l]);
   if(showErrorOnMergedResult) methodMergedGraph[m][l]->SetPointError(0,0.,error[m][l][randomFile]);
   methodMergedGraph[m][l]->SetMarkerStyle(25);
   methodMergedGraph[m][l]->SetMarkerColor(kBlack);
  } // end of for(Int_t l=0;l<3;l++)
 } // for(Int_t m=0;m<nMethods;m++)
 
 // Final drawing:
 gROOT->SetStyle("Plain"); // removing default gray color and setting white instead
 gStyle->SetOptStat(0); // removing statistics box from all histograms
 Bool_t showPlot[3] = {showPlotForReferenceFlow,showPlotForIntegratedFlowRP,showPlotForIntegratedFlowPOI};
 TString title[3] = {"Reference Flow","Integrated Flow (RP)","Integrated Flow (POI)"}
 TCanvas *canvas[3] = {NULL}; // [3 = "", "RP" or "POI"]
 for(Int_t l=0;l<3;l++)
 {
  if(showPlot[l])
  {
   canvas[l] = new TCanvas(Form("%s",title[l].Data()),Form("%s",title[l].Data()));
   TH1D *styleHist = StyleHist(title[l]);
   styleHist->SetMinimum(0.99*styleHistMinMax[l][0]);
   styleHist->SetMaximum(1.01*styleHistMinMax[l][1]);
   styleHist->Draw();
   for(Int_t m=0;m<nMethods;m++)
   {
    if(methodMesh[m][l]) methodMesh[m][l]->Draw("lfsame");
    if(methodGraph[m][l]) methodGraph[m][l]->Draw("psame");  
    if(TMath::Abs(*(methodMergedGraph[m][l]->GetY()))>pow(10.,-6.)) // draw only if not == 0.
    {
     methodMergedGraph[m][l]->Draw("psame");
    } 
   } // end of for(Int_t m=0;m<nMethods;m++)
  } // end of if(showPlot[l])
 } // end of for(Int_t l=0;l<3;l++)
 
 timer.Stop();
 timer.Print(); 
 cout<<endl;
 
} // end of void showSpread(TString type="", Int_t mode=mLocal)

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

TH1D *StyleHist(TString histTitle)
{
 // Make the style histogram.
 Int_t n = 2; // harmonic (to be improved - access this from common control hist)
 TH1D *styleHist = new TH1D(Form("%s",histTitle.Data()),Form("%s",histTitle.Data()),nMethods,0,nMethods);
 styleHist->GetYaxis()->SetTickLength(0.01);
 for(Int_t m=0;m<nMethods;m++)
 {
  styleHist->GetXaxis()->SetBinLabel(m+1,Form("v_{%d}{%s}",n,method[m].Data()));
  if(method[m]=="LYZ1SUM" || method[m]=="LYZ2SUM")
  {
   styleHist->GetXaxis()->SetBinLabel(m+1,Form("v_{%d}{%s}",n,"LYZ,sum"));
  } 
  else if(method[m]=="LYZ1PROD" || method[m]=="LYZ2PROD")
  {
   styleHist->GetXaxis()->SetBinLabel(m+1,Form("v_{%d}{%s}",n,"LYZ,prod"));
  } 
 } // end of for(Int_t m=0;m<nMethods;m++)
 
 return styleHist;
}

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

TDirectoryFile* GetMethodFile(TFile *commonFile, TString method, TString type)
{
 // Form a file name for each method:
 TString methodFileName = "output";
 if(method.Contains("GFC"))
 {
  methodFileName+="GFC";
 } else if(method.Contains("QC"))
   {
    methodFileName+="QC";
   } else
     {
      methodFileName+=method.Data();
     } 
 methodFileName+="analysis";
 methodFileName+=type.Data();
 TDirectoryFile *methodFile = NULL;
 if(commonFile)
 {
  methodFile = (TDirectoryFile*)commonFile->FindObjectAny(methodFileName.Data());
 } 
 
 return methodFile;

} // end of TDirectoryFile* AccessMethodFile(TString commonFile, TString method, TString type)

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

TH1D* GetHistogramWithResult(TString method, TString label, TDirectoryFile *methodFile)
{
 // Access first the common list holding all output histograms:
 TList *methodList = NULL;
 if(method.Contains("GFC"))
 {
  methodFile->GetObject("cobjGFC",methodList);
 } else if(method.Contains("QC"))
   {
    methodFile->GetObject("cobjQC",methodList);
   } else
     {
      methodFile->GetObject(Form("cobj%s",method.Data()),methodList);
     } 
 // Access from the common list the needed histogram:
 if(methodList)
 {
  AliFlowCommonHistResults *commonHistRes = NULL; 
  if(!(method.Contains("GFC") || method.Contains("QC")))
  {
   commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject(Form("AliFlowCommonHistResults%s",method.Data()));
  } 
  else if(method=="2,GFC")
  {
   commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults2ndOrderGFC");    
  } 
  else if(method=="4,GFC")
  {
   commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults4thOrderGFC");    
  } 
  else if(method=="6,GFC")
  {
   commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults6thOrderGFC");    
  } 
  else if(method=="8,GFC")
  {
   commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults8thOrderGFC");    
  }    
  else if(method=="2,QC")
  {
   commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults2ndOrderQC");    
  } 
  else if(method=="4,QC")
  {
   commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults4thOrderQC");    
  } 
  else if(method=="6,QC")
  {
   commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults6thOrderQC");    
  } 
  else if(method=="8,QC")
  {
   commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject("AliFlowCommonHistResults8thOrderQC");    
  }  
 } // end of if(methodList)
 
 // Access histogram with results for reference flow or integrated flow of RPs or POIs:
 TH1D *hist = NULL;
 if(label=="")
 {
  hist = commonHistRes->GetHistIntFlow();
 } else if(label=="RP")
   {
    hist = commonHistRes->GetHistIntFlowRP(); 
   } else if(label=="POI")
     {
      hist = commonHistRes->GetHistIntFlowPOI(); 
     }

 if(hist) return hist;

} // end of TH1D *GetHistogramWithResult(TString method, TString rf_rp_poi, TString file);

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

void CrossCheckUserSettings() 
{
 // Check in this method if the user settings make sense.
 
 if(nFilesMax<=0)
 {
  cout<<endl;
  cout<<"WARNING: nFilesMax must be a positive integer (not too large, though) !!!!"<<endl;
  cout<<endl;
  exit(0);
 }
 if(nFilesMax>44)
 { 
  cout<<endl;
  cout<<"WARNING: You may want to set nFilesMax to the smaller value."<<endl;
  cout<<"         Otherwise you might wait forever to see the plots."<<endl;
 } 
 
} // end of void CrossCheckUserSettings()

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

void LoadLibrariesSS(const libModes mode) {
  
  //--------------------------------------
  // 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 (mode==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 (mode==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 histograms
    gROOT->LoadMacro("Base/AliFlowCommonHist.cxx+");
    gROOT->LoadMacro("Base/AliFlowCommonHistResults.cxx+");
    gROOT->LoadMacro("Base/AliFlowLYZHist1.cxx+");
    gROOT->LoadMacro("Base/AliFlowLYZHist2.cxx+");
    
    // Functions needed for various methods
    gROOT->LoadMacro("Base/AliCumulantsFunctions.cxx+");
    gROOT->LoadMacro("Base/AliFlowLYZEventPlane.cxx+");
    
    // Flow Analysis code for various methods
    gROOT->LoadMacro("Base/AliFlowAnalysisWithMCEventPlane.cxx+"); 
    gROOT->LoadMacro("Base/AliFlowAnalysisWithScalarProduct.cxx+");
    gROOT->LoadMacro("Base/AliFlowAnalysisWithLYZEventPlane.cxx+");
    gROOT->LoadMacro("Base/AliFlowAnalysisWithLeeYangZeros.cxx+");
    gROOT->LoadMacro("Base/AliFlowAnalysisWithCumulants.cxx+");
    gROOT->LoadMacro("Base/AliFlowAnalysisWithQCumulants.cxx+"); 
    gROOT->LoadMacro("Base/AliFlowAnalysisWithFittingQDistribution.cxx+");
    gROOT->LoadMacro("Base/AliFlowAnalysisWithMixedHarmonics.cxx+");    
    gROOT->LoadMacro("Base/AliFlowAnalysisWithNestedLoops.cxx+");          
    
    cout << "finished loading macros!" << endl;  
    
  } // end of else if (mode==mLocalSource) 
  
} // end of void LoadLibrariesSS(const libModes mode)
 showSpread.C:1
 showSpread.C:2
 showSpread.C:3
 showSpread.C:4
 showSpread.C:5
 showSpread.C:6
 showSpread.C:7
 showSpread.C:8
 showSpread.C:9
 showSpread.C:10
 showSpread.C:11
 showSpread.C:12
 showSpread.C:13
 showSpread.C:14
 showSpread.C:15
 showSpread.C:16
 showSpread.C:17
 showSpread.C:18
 showSpread.C:19
 showSpread.C:20
 showSpread.C:21
 showSpread.C:22
 showSpread.C:23
 showSpread.C:24
 showSpread.C:25
 showSpread.C:26
 showSpread.C:27
 showSpread.C:28
 showSpread.C:29
 showSpread.C:30
 showSpread.C:31
 showSpread.C:32
 showSpread.C:33
 showSpread.C:34
 showSpread.C:35
 showSpread.C:36
 showSpread.C:37
 showSpread.C:38
 showSpread.C:39
 showSpread.C:40
 showSpread.C:41
 showSpread.C:42
 showSpread.C:43
 showSpread.C:44
 showSpread.C:45
 showSpread.C:46
 showSpread.C:47
 showSpread.C:48
 showSpread.C:49
 showSpread.C:50
 showSpread.C:51
 showSpread.C:52
 showSpread.C:53
 showSpread.C:54
 showSpread.C:55
 showSpread.C:56
 showSpread.C:57
 showSpread.C:58
 showSpread.C:59
 showSpread.C:60
 showSpread.C:61
 showSpread.C:62
 showSpread.C:63
 showSpread.C:64
 showSpread.C:65
 showSpread.C:66
 showSpread.C:67
 showSpread.C:68
 showSpread.C:69
 showSpread.C:70
 showSpread.C:71
 showSpread.C:72
 showSpread.C:73
 showSpread.C:74
 showSpread.C:75
 showSpread.C:76
 showSpread.C:77
 showSpread.C:78
 showSpread.C:79
 showSpread.C:80
 showSpread.C:81
 showSpread.C:82
 showSpread.C:83
 showSpread.C:84
 showSpread.C:85
 showSpread.C:86
 showSpread.C:87
 showSpread.C:88
 showSpread.C:89
 showSpread.C:90
 showSpread.C:91
 showSpread.C:92
 showSpread.C:93
 showSpread.C:94
 showSpread.C:95
 showSpread.C:96
 showSpread.C:97
 showSpread.C:98
 showSpread.C:99
 showSpread.C:100
 showSpread.C:101
 showSpread.C:102
 showSpread.C:103
 showSpread.C:104
 showSpread.C:105
 showSpread.C:106
 showSpread.C:107
 showSpread.C:108
 showSpread.C:109
 showSpread.C:110
 showSpread.C:111
 showSpread.C:112
 showSpread.C:113
 showSpread.C:114
 showSpread.C:115
 showSpread.C:116
 showSpread.C:117
 showSpread.C:118
 showSpread.C:119
 showSpread.C:120
 showSpread.C:121
 showSpread.C:122
 showSpread.C:123
 showSpread.C:124
 showSpread.C:125
 showSpread.C:126
 showSpread.C:127
 showSpread.C:128
 showSpread.C:129
 showSpread.C:130
 showSpread.C:131
 showSpread.C:132
 showSpread.C:133
 showSpread.C:134
 showSpread.C:135
 showSpread.C:136
 showSpread.C:137
 showSpread.C:138
 showSpread.C:139
 showSpread.C:140
 showSpread.C:141
 showSpread.C:142
 showSpread.C:143
 showSpread.C:144
 showSpread.C:145
 showSpread.C:146
 showSpread.C:147
 showSpread.C:148
 showSpread.C:149
 showSpread.C:150
 showSpread.C:151
 showSpread.C:152
 showSpread.C:153
 showSpread.C:154
 showSpread.C:155
 showSpread.C:156
 showSpread.C:157
 showSpread.C:158
 showSpread.C:159
 showSpread.C:160
 showSpread.C:161
 showSpread.C:162
 showSpread.C:163
 showSpread.C:164
 showSpread.C:165
 showSpread.C:166
 showSpread.C:167
 showSpread.C:168
 showSpread.C:169
 showSpread.C:170
 showSpread.C:171
 showSpread.C:172
 showSpread.C:173
 showSpread.C:174
 showSpread.C:175
 showSpread.C:176
 showSpread.C:177
 showSpread.C:178
 showSpread.C:179
 showSpread.C:180
 showSpread.C:181
 showSpread.C:182
 showSpread.C:183
 showSpread.C:184
 showSpread.C:185
 showSpread.C:186
 showSpread.C:187
 showSpread.C:188
 showSpread.C:189
 showSpread.C:190
 showSpread.C:191
 showSpread.C:192
 showSpread.C:193
 showSpread.C:194
 showSpread.C:195
 showSpread.C:196
 showSpread.C:197
 showSpread.C:198
 showSpread.C:199
 showSpread.C:200
 showSpread.C:201
 showSpread.C:202
 showSpread.C:203
 showSpread.C:204
 showSpread.C:205
 showSpread.C:206
 showSpread.C:207
 showSpread.C:208
 showSpread.C:209
 showSpread.C:210
 showSpread.C:211
 showSpread.C:212
 showSpread.C:213
 showSpread.C:214
 showSpread.C:215
 showSpread.C:216
 showSpread.C:217
 showSpread.C:218
 showSpread.C:219
 showSpread.C:220
 showSpread.C:221
 showSpread.C:222
 showSpread.C:223
 showSpread.C:224
 showSpread.C:225
 showSpread.C:226
 showSpread.C:227
 showSpread.C:228
 showSpread.C:229
 showSpread.C:230
 showSpread.C:231
 showSpread.C:232
 showSpread.C:233
 showSpread.C:234
 showSpread.C:235
 showSpread.C:236
 showSpread.C:237
 showSpread.C:238
 showSpread.C:239
 showSpread.C:240
 showSpread.C:241
 showSpread.C:242
 showSpread.C:243
 showSpread.C:244
 showSpread.C:245
 showSpread.C:246
 showSpread.C:247
 showSpread.C:248
 showSpread.C:249
 showSpread.C:250
 showSpread.C:251
 showSpread.C:252
 showSpread.C:253
 showSpread.C:254
 showSpread.C:255
 showSpread.C:256
 showSpread.C:257
 showSpread.C:258
 showSpread.C:259
 showSpread.C:260
 showSpread.C:261
 showSpread.C:262
 showSpread.C:263
 showSpread.C:264
 showSpread.C:265
 showSpread.C:266
 showSpread.C:267
 showSpread.C:268
 showSpread.C:269
 showSpread.C:270
 showSpread.C:271
 showSpread.C:272
 showSpread.C:273
 showSpread.C:274
 showSpread.C:275
 showSpread.C:276
 showSpread.C:277
 showSpread.C:278
 showSpread.C:279
 showSpread.C:280
 showSpread.C:281
 showSpread.C:282
 showSpread.C:283
 showSpread.C:284
 showSpread.C:285
 showSpread.C:286
 showSpread.C:287
 showSpread.C:288
 showSpread.C:289
 showSpread.C:290
 showSpread.C:291
 showSpread.C:292
 showSpread.C:293
 showSpread.C:294
 showSpread.C:295
 showSpread.C:296
 showSpread.C:297
 showSpread.C:298
 showSpread.C:299
 showSpread.C:300
 showSpread.C:301
 showSpread.C:302
 showSpread.C:303
 showSpread.C:304
 showSpread.C:305
 showSpread.C:306
 showSpread.C:307
 showSpread.C:308
 showSpread.C:309
 showSpread.C:310
 showSpread.C:311
 showSpread.C:312
 showSpread.C:313
 showSpread.C:314
 showSpread.C:315
 showSpread.C:316
 showSpread.C:317
 showSpread.C:318
 showSpread.C:319
 showSpread.C:320
 showSpread.C:321
 showSpread.C:322
 showSpread.C:323
 showSpread.C:324
 showSpread.C:325
 showSpread.C:326
 showSpread.C:327
 showSpread.C:328
 showSpread.C:329
 showSpread.C:330
 showSpread.C:331
 showSpread.C:332
 showSpread.C:333
 showSpread.C:334
 showSpread.C:335
 showSpread.C:336
 showSpread.C:337
 showSpread.C:338
 showSpread.C:339
 showSpread.C:340
 showSpread.C:341
 showSpread.C:342
 showSpread.C:343
 showSpread.C:344
 showSpread.C:345
 showSpread.C:346
 showSpread.C:347
 showSpread.C:348
 showSpread.C:349
 showSpread.C:350
 showSpread.C:351
 showSpread.C:352
 showSpread.C:353
 showSpread.C:354
 showSpread.C:355
 showSpread.C:356
 showSpread.C:357
 showSpread.C:358
 showSpread.C:359
 showSpread.C:360
 showSpread.C:361
 showSpread.C:362
 showSpread.C:363
 showSpread.C:364
 showSpread.C:365
 showSpread.C:366
 showSpread.C:367
 showSpread.C:368
 showSpread.C:369
 showSpread.C:370
 showSpread.C:371
 showSpread.C:372
 showSpread.C:373
 showSpread.C:374
 showSpread.C:375
 showSpread.C:376
 showSpread.C:377
 showSpread.C:378
 showSpread.C:379
 showSpread.C:380
 showSpread.C:381
 showSpread.C:382
 showSpread.C:383
 showSpread.C:384
 showSpread.C:385
 showSpread.C:386
 showSpread.C:387
 showSpread.C:388
 showSpread.C:389
 showSpread.C:390
 showSpread.C:391
 showSpread.C:392
 showSpread.C:393
 showSpread.C:394
 showSpread.C:395
 showSpread.C:396
 showSpread.C:397
 showSpread.C:398
 showSpread.C:399
 showSpread.C:400
 showSpread.C:401
 showSpread.C:402
 showSpread.C:403
 showSpread.C:404
 showSpread.C:405
 showSpread.C:406
 showSpread.C:407
 showSpread.C:408
 showSpread.C:409
 showSpread.C:410
 showSpread.C:411
 showSpread.C:412
 showSpread.C:413
 showSpread.C:414
 showSpread.C:415
 showSpread.C:416
 showSpread.C:417
 showSpread.C:418
 showSpread.C:419
 showSpread.C:420
 showSpread.C:421
 showSpread.C:422
 showSpread.C:423
 showSpread.C:424
 showSpread.C:425
 showSpread.C:426
 showSpread.C:427
 showSpread.C:428
 showSpread.C:429
 showSpread.C:430
 showSpread.C:431
 showSpread.C:432
 showSpread.C:433
 showSpread.C:434
 showSpread.C:435
 showSpread.C:436
 showSpread.C:437
 showSpread.C:438
 showSpread.C:439
 showSpread.C:440
 showSpread.C:441
 showSpread.C:442
 showSpread.C:443
 showSpread.C:444
 showSpread.C:445
 showSpread.C:446
 showSpread.C:447
 showSpread.C:448
 showSpread.C:449
 showSpread.C:450
 showSpread.C:451
 showSpread.C:452
 showSpread.C:453
 showSpread.C:454
 showSpread.C:455
 showSpread.C:456
 showSpread.C:457
 showSpread.C:458
 showSpread.C:459
 showSpread.C:460
 showSpread.C:461
 showSpread.C:462
 showSpread.C:463
 showSpread.C:464
 showSpread.C:465
 showSpread.C:466
 showSpread.C:467
 showSpread.C:468
 showSpread.C:469
 showSpread.C:470
 showSpread.C:471
 showSpread.C:472
 showSpread.C:473
 showSpread.C:474
 showSpread.C:475
 showSpread.C:476
 showSpread.C:477
 showSpread.C:478
 showSpread.C:479
 showSpread.C:480
 showSpread.C:481
 showSpread.C:482
 showSpread.C:483
 showSpread.C:484
 showSpread.C:485
 showSpread.C:486
 showSpread.C:487
 showSpread.C:488
 showSpread.C:489