ROOT logo
#include <Riostream.h>
#include <TStopwatch.h>
#include <TObjArray.h>
#include <TFile.h>
#include <TRandom3.h>
#include <TTimeStamp.h>

#include <Base/AliFlowCommonConstants.h>
#include <Base/AliFlowLYZConstants.h>
#include <Base/AliFlowCumuConstants.h>
#include <Base/AliFlowVector.h>
#include <Base/AliFlowTrackSimple.h>
#include <Base/AliFlowEvent.h>
#include <Base/AliFlowEventSimple.h>
#include <Base/AliFlowTrackSimpleCuts.h>
#include <Base/AliFlowCommonHist.h>
#include <Base/AliFlowCommonHistResults.h>
#include <Base/AliFlowLYZHist1.h>
#include <Base/AliFlowLYZHist2.h>
#include <Base/AliCumulantsFunctions.h>
#include <Base/AliFlowLYZEventPlane.h>
#include <Base/AliFlowAnalysisWithMCEventPlane.h>
#include <Base/AliFlowAnalysisWithScalarProduct.h>
#include <Base/AliFlowAnalysisWithLYZEventPlane.h>
#include <Base/AliFlowAnalysisWithLeeYangZeros.h>
#include <Base/AliFlowAnalysisWithCumulants.h>
#include <Base/AliFlowAnalysisWithQCumulants.h>
#include <Base/AliFlowAnalysisWithFittingQDistribution.h>
#include <Base/AliFlowAnalysisWithMixedHarmonics.h>
#include <Base/AliFlowAnalysisWithNestedLoops.h>

//--------------------------------------------------------------------------------------
// Run flow analysis on local data with custom FlowEvent maker
// RUN SETTINGS
//flow analysis method can be: (set to kTRUE or kFALSE)
Bool_t SP       = kTRUE;
Bool_t LYZ1SUM  = kTRUE;
Bool_t LYZ1PROD = kTRUE;
Bool_t LYZ2SUM  = kFALSE; 
Bool_t LYZ2PROD = kFALSE;
Bool_t LYZEP    = kFALSE; 
Bool_t GFC      = kTRUE;
Bool_t QC       = kTRUE;
Bool_t FQD      = kTRUE;
Bool_t MH       = kTRUE; 
Bool_t NL       = kFALSE; 
Bool_t MCEP     = kFALSE; //does not work yet 24/12/08
//--------------------------------------------------------------------------------------

// Weights 
// Use weights for Q vector
Bool_t usePhiWeights = kFALSE; //Phi (correction for non-uniform azimuthal acceptance)
Bool_t usePtWeights  = kFALSE; //v'(pt) (differential flow in pt)
Bool_t useEtaWeights = kFALSE; //v'(eta) (differential flow in eta)

//--------------------------------------------------------------------------------------
// CUT SETTINGS
//integrated selection
Double_t ptMaxInt  = 10.;
Double_t ptMinInt  = 0.;
Double_t etaMaxInt = 1.;
Double_t etaMinInt = -1.;
Double_t phiMaxInt = 7.5;
Double_t phiMinInt = 0.;
Int_t PIDInt       = 211;

//differential selection
Double_t ptMaxDiff  = 10.;
Double_t ptMinDiff  = 0.;
Double_t etaMaxDiff = 1.;
Double_t etaMinDiff = -1.;
Double_t phiMaxDiff = 7.5;
Double_t phiMinDiff = 0.;
Int_t PIDDiff       = 211;
/*
//--------------------------------------------------------------------------------------
// FLOW SETTINGS (R.Rietkerk)
Int_t nLoops=1; 		// Number of times to use the same particle (nonflow).
Double_t xEllipticFlowValue=0.1;// Add Elliptic Flow. Must be in range [0,1].
Int_t nMultiplicityOfEvent=500; // Set Average Multiplicity.
Double_t xSigmaFlow=0.00;	// Add Elliptic Flow. Must be in range [0,1].
Int_t nSigmaMult=50;            // Set Average Multiplicity.
//--------------------------------------------------------------------------------------
*/

enum anaModes {mLocal,mLocalSource,mLocalPAR,};
//mLocal: Analyze data on your computer using aliroot
//mLocalPAR: Analyze data on your computer using root + PAR files
//mLocalSource: Analyze data on your computer using root + source files

void LoadLibraries(const anaModes mode);

Int_t offset = 0;
                                          
int runFlowAnalysis(const anaModes mode=mLocal, Int_t aRuns = 100, const char* 
		    dir="/data/alice1/kolk/KineOnly3/")
		    //		    dir="/Users/snelling/alice_data/KineOnly3/")
		    //		    dir="/Users/snelling/alice_data/stoomboot/5b/")
{
  TStopwatch timer;
  timer.Start();
  
  if (LYZ1SUM && LYZ2SUM) {cout<<"WARNING: you cannot run LYZ1 and LYZ2 at the same time! LYZ2 needs the output from LYZ1."<<endl; exit(1); }
  if (LYZ1PROD && LYZ2PROD) {cout<<"WARNING: you cannot run LYZ1 and LYZ2 at the same time! LYZ2 needs the output from LYZ1."<<endl; exit(1); }
  if (LYZ2SUM && LYZEP) {cout<<"WARNING: you cannot run LYZ2 and LYZEP at the same time! LYZEP needs the output from LYZ2."<<endl; exit(1); }
  if (LYZ1SUM && LYZEP) {cout<<"WARNING: you cannot run LYZ1 and LYZEP at the same time! LYZEP needs the output from LYZ2."<<endl; exit(1); }


  cout<<endl;
  cout<<" ---- BEGIN ANALYSIS ---- "<<endl;
  cout<<endl;
  
  LoadLibraries(mode);

  TRandom3 random3Temp; //init for manual settings (R.Rietkerk)
  TTimeStamp dt;
  Int_t sseed = dt.GetNanoSec()/1000;
  random3Temp.SetSeed(sseed);

  if (mode == mLocal || mode == mLocalPAR) {
  }
  else if (mode == mLocalSource) {
  }
  else{
    cout << "No supported running mode selected!" << endl;
    break;
  }


  //------------------------------------------------------------------------
  //cuts:
  AliFlowTrackSimpleCuts* cutsInt = new AliFlowTrackSimpleCuts();
  cutsInt->SetPtMax(ptMaxInt);
  cutsInt->SetPtMin(ptMinInt);
  cutsInt->SetEtaMax(etaMaxInt);
  cutsInt->SetEtaMin(etaMinInt);
  cutsInt->SetPhiMax(phiMaxInt);
  cutsInt->SetPhiMin(phiMinInt);
  cutsInt->SetPID(PIDInt);

  AliFlowTrackSimpleCuts* cutsDiff = new AliFlowTrackSimpleCuts();
  cutsDiff->SetPtMax(ptMaxDiff);
  cutsDiff->SetPtMin(ptMinDiff);
  cutsDiff->SetEtaMax(etaMaxDiff);
  cutsDiff->SetEtaMin(etaMinDiff);
  cutsDiff->SetPhiMax(phiMaxDiff);
  cutsDiff->SetPhiMin(phiMinDiff);
  cutsDiff->SetPID(PIDDiff);

  //if the weights are used: 
  TFile *fileWithWeights = NULL;
  TList *listWithWeights = NULL;
  
  if(usePhiWeights||usePtWeights||useEtaWeights) {
    fileWithWeights = TFile::Open("weights.root","READ");
    if(fileWithWeights) {
      listWithWeights = (TList*)fileWithWeights->Get("weights");
    }
    else
      {cout << " WARNING: the file <weights.root> with weights from the previous run was not found."<<endl;
	break;
      }    
  }

  //flow methods:  
  AliFlowAnalysisWithQCumulants *qc = NULL;
  AliFlowAnalysisWithCumulants *gfc = NULL;
  AliFlowAnalysisWithFittingQDistribution *fqd = NULL;
  AliFlowAnalysisWithLeeYangZeros *lyz1sum = NULL;
  AliFlowAnalysisWithLeeYangZeros *lyz1prod = NULL;
  AliFlowAnalysisWithLeeYangZeros *lyz2sum = NULL;
  AliFlowAnalysisWithLeeYangZeros *lyz2prod = NULL;
  AliFlowAnalysisWithLYZEventPlane *lyzep = NULL;
  AliFlowAnalysisWithScalarProduct *sp = NULL;
  AliFlowAnalysisWithMCEventPlane *mcep = NULL;     
  AliFlowAnalysisWithMixedHarmonics *mh = NULL;
  AliFlowAnalysisWithNestedLoops *nl = NULL;

  //MCEP = monte carlo event plane
  if (MCEP) {
    AliFlowAnalysisWithMCEventPlane *mcep = new AliFlowAnalysisWithMCEventPlane();
    mcep->Init();
  }

  //QC = Q-cumulants  
  if(QC) { 
    AliFlowAnalysisWithQCumulants* qc = new AliFlowAnalysisWithQCumulants();
    if(listWithWeights) qc->SetWeightsList(listWithWeights);
    if(usePhiWeights) qc->SetUsePhiWeights(usePhiWeights);
    if(usePtWeights) qc->SetUsePtWeights(usePtWeights);
    if(useEtaWeights) qc->SetUseEtaWeights(useEtaWeights);
    qc->Init();
  }
  
  //GFC = Generating Function Cumulants 
  if(GFC) {
    AliFlowAnalysisWithCumulants* gfc = new AliFlowAnalysisWithCumulants();
    if(listWithWeights) gfc->SetWeightsList(listWithWeights);
    if(usePhiWeights) gfc->SetUsePhiWeights(usePhiWeights);
    if(usePtWeights) gfc->SetUsePtWeights(usePtWeights);
    if(useEtaWeights) gfc->SetUseEtaWeights(useEtaWeights);
    gfc->Init();
  }
  
  //FQD = Fitting q-distribution 
  if(FQD) {
    AliFlowAnalysisWithFittingQDistribution* fqd = new AliFlowAnalysisWithFittingQDistribution();
    if(listWithWeights) fqd->SetWeightsList(listWithWeights);
    if(usePhiWeights) fqd->SetUsePhiWeights(usePhiWeights);
    fqd->Init();
  }

  //SP = Scalar Product 
  if(SP) {
    AliFlowAnalysisWithScalarProduct* sp = new AliFlowAnalysisWithScalarProduct();
    if(usePhiWeights) sp->SetUsePhiWeights(usePhiWeights);
    sp->Init();
  }

  //LYZ1 = Lee-Yang Zeroes first run
  if(LYZ1SUM) {
    AliFlowAnalysisWithLeeYangZeros* lyz1sum = new AliFlowAnalysisWithLeeYangZeros();
    lyz1sum->SetFirstRun(kTRUE);
    lyz1sum->SetUseSum(kTRUE);
    lyz1sum->Init();
  }
  if(LYZ1PROD) {
    AliFlowAnalysisWithLeeYangZeros* lyz1prod = new AliFlowAnalysisWithLeeYangZeros();
    lyz1prod->SetFirstRun(kTRUE);
    lyz1prod->SetUseSum(kFALSE);
    lyz1prod->Init();
  }
  //LYZ2 = Lee-Yang Zeroes second run
  if(LYZ2SUM) {
    AliFlowAnalysisWithLeeYangZeros* lyz2sum = new AliFlowAnalysisWithLeeYangZeros();
    // read the input file from the first run 
    TString inputFileNameLYZ2SUM = "outputLYZ1SUManalysis.root" ;
    TFile* inputFileLYZ2SUM = new TFile(inputFileNameLYZ2SUM.Data(),"READ");
    if(!inputFileLYZ2SUM || inputFileLYZ2SUM->IsZombie()) { 
      cerr << " ERROR: To run LYZ2SUM you need the output file from LYZ1SUM. This file is not there! Please run LYZ1SUM first." << endl ;
      break; 
    }
    else { 
      TList* inputListLYZ2SUM = (TList*)inputFileLYZ2SUM->Get("cobjLYZ1SUM");  
      if (!inputListLYZ2SUM) {cout<<"SUM Input list is NULL pointer!"<<endl; break;}
      else {
	cout<<"LYZ2SUM input file/list read..."<<endl;
	lyz2sum->SetFirstRunList(inputListLYZ2SUM);
	lyz2sum->SetFirstRun(kFALSE);
	lyz2sum->SetUseSum(kTRUE);
	lyz2sum->Init();
      }
    }
  }
  if(LYZ2PROD) {
    AliFlowAnalysisWithLeeYangZeros* lyz2prod = new AliFlowAnalysisWithLeeYangZeros();
    // read the input file from the first run 
    TString inputFileNameLYZ2PROD = "outputLYZ1PRODanalysis.root" ;
    TFile* inputFileLYZ2PROD = new TFile(inputFileNameLYZ2PROD.Data(),"READ");
    if(!inputFileLYZ2PROD || inputFileLYZ2PROD->IsZombie()) { 
      cerr << " ERROR: To run LYZ2PROD you need the output file from LYZ1PROD. This file is not there! Please run LYZ1PROD first." << endl ;
      break; 
    }
    else { 
      TList* inputListLYZ2PROD = (TList*)inputFileLYZ2PROD->Get("cobjLYZ1PROD");  
      if (!inputListLYZ2PROD) {cout<<"PROD Input list is NULL pointer!"<<endl; break;}
      else {
	cout<<"LYZ2PROD input file/list read..."<<endl;
	lyz2prod->SetFirstRunList(inputListLYZ2PROD);
	lyz2prod->SetFirstRun(kFALSE);
	lyz2prod->SetUseSum(kTRUE);
	lyz2prod->Init();
      }
    }
  }
 //LYZEP = Lee-Yang Zeroes event plane
  if(LYZEP) {
    AliFlowLYZEventPlane* ep = new AliFlowLYZEventPlane() ;
    AliFlowAnalysisWithLYZEventPlane* lyzep = new AliFlowAnalysisWithLYZEventPlane();
    // read the input file from the second lyz run 
    TString inputFileNameLYZEP = "outputLYZ2SUManalysis.root" ;
    TFile* inputFileLYZEP = new TFile(inputFileNameLYZEP.Data(),"READ");
    if(!inputFileLYZEP || inputFileLYZEP->IsZombie()) { 
      cerr << " ERROR: To run LYZEP you need the output file from LYZ2SUM. This file is not there! Please run LYZ2SUM first." << endl ; 
      break;
    }
    else { 
      TList* inputListLYZEP = (TList*)inputFileLYZEP->Get("cobjLYZ2SUM");  
      if (!inputListLYZEP) {cout<<"Input list is NULL pointer!"<<endl; break;}
      else {
	cout<<"LYZEP input file/list read..."<<endl;
	ep   ->SetSecondRunList(inputListLYZEP);
	lyzep->SetSecondRunList(inputListLYZEP);
	ep   ->Init();
	lyzep->Init();
      }
    }
  }
  // MH = Mixed Harmonics:  
  if(MH) { 
    AliFlowAnalysisWithMixedHarmonics* mh = new AliFlowAnalysisWithMixedHarmonics();
    if(listWithWeights) mh->SetWeightsList(listWithWeights);
    //if(usePhiWeights) mh->SetUsePhiWeights(usePhiWeights); // to be improved (enabled)
    //if(usePtWeights) mh->SetUsePtWeights(usePtWeights); // to be improved (enabled)
    //if(useEtaWeights) mh->SetUseEtaWeights(useEtaWeights); // to be improved (enabled)
    mh->Init();
  }
  // NL = Nested Loops:  
  if(NL) { 
    AliFlowAnalysisWithNestedLoops* nl = new AliFlowAnalysisWithNestedLoops();
    if(listWithWeights) nl->SetWeightsList(listWithWeights);
    //if(usePhiWeights) nl->SetUsePhiWeights(usePhiWeights); // to be improved (enabled)
    //if(usePtWeights) nl->SetUsePtWeights(usePtWeights); // to be improved (enabled)
    //if(useEtaWeights) nl->SetUseEtaWeights(useEtaWeights); // to be improved (enabled)
    nl->Init();
  }

  //------------------------------------------------------------------------
  
  
  //standard code to read files in directory
  Int_t fCount = 0;
  TString execDir(gSystem->pwd());
  TString targetDir(dir);
  TSystemDirectory* baseDir = new TSystemDirectory(".", dir);  
  TList* dirList 	   = baseDir->GetListOfFiles();
  if (!dirList) {
    cout << endl << "No input files in: " << targetDir.Data() << endl;
    break;
  }
  Int_t nDirs		   = dirList->GetEntries();
  cout<<endl;
  cout<<"Int_t nDirs = "<<nDirs<<endl;
  gSystem->cd(execDir);
  
  for(Int_t iDir=0;iDir<nDirs;++iDir)
    {
      TSystemFile* presentDir = (TSystemFile*)dirList->At(iDir);
      if(!presentDir || !presentDir->IsDirectory() || 
	 strcmp(presentDir->GetName(), ".") == 0 || 
	 strcmp(presentDir->GetName(), "..") == 0) 
	{
	  cout << endl; 
	  cout << "Directory (" << iDir << "): " << presentDir->GetName() << 
	    " - Skipping ... " << endl;
	  continue ;   
	}
      
      if(offset > 0) { --offset ; continue ; }
      if((aRuns > 0) && (fCount >= aRuns)) { break ; }
      
      TString presentDirName(dir); // aDataDir
      presentDirName += presentDir->GetName();
      presentDirName += "/";
      //cerr<<" presentDirName = "<<presentDirName<<endl;
      
      TString fileName = presentDirName; 
      fileName += "galice.root";
      Long_t *id, *size, *flags, *modtime;
      if(gSystem->GetPathInfo(fileName.Data(),id,size,flags,modtime)) 
	{ 
	  cout << " File : " << fileName << " does NOT exist ! - Skipping ... " 
	       << endl; 
	  continue; 
	}
      //      cout << endl ; cout << "Directory (" << iDir << "): " << presentDirName << " ... " << endl;
      
      //loop (simulations in the present dir) 
      TSystemDirectory* evtsDir = new TSystemDirectory(".", 
						       presentDirName.Data());
      TList* fileList 	    = evtsDir->GetListOfFiles();
      Int_t nFiles		    = fileList->GetEntries();
      //cout<<" Int_t nFiles = "<<nFiles<<endl;
      gSystem->cd(execDir);      
      for(Int_t iFiles=0; iFiles<nFiles; ++iFiles)
	{
	  TSystemFile* presentFile = (TSystemFile*) fileList->At(iFiles);
	  TString presentFileName(presentDirName);
	  presentFileName += presentFile->GetName();
	  
	  if(!(presentFileName.Contains("Kinematics") && 
	       presentFileName.Contains("root"))) { continue ; }
	  
	  //cout << " found: " << presentFileName.Data() << endl; 
	  
	  TFile* kineFile = new TFile(presentFileName.Data(), "READ"); 
	  // kineFile->ls();
	  Int_t nEvts = kineFile->GetNkeys() ; 
	  //cout << "  . found: " << nEvts << " KineTree(s) in " << presentFileName.Data() << endl;
	  TList* kineEventsList = (TList*)kineFile->GetListOfKeys(); 
	  TTree* kTree;
	  TIter next(kineEventsList); 
	  TKey* key;

	  Double_t xRPAngle;	  
	  //loop over the events
	  while( key=(TKey *)next() ) 
	    {
	      TDirectory* tDir = (TDirectory*)key->ReadObj();
	      if(!tDir) break;
	      
	      TString evtDir(tDir->GetName()); 
	      //cout << "  . . found: " << tDir->GetName() << endl;
	      
	      kTree = (TTree *)tDir->Get("TreeK");
	      if(!kTree) break;
	      
	      Int_t nPart = kTree->GetEntries();
	      //cout << "  . . . kTree " << fCount << " has " << nPart << " particles " << endl; 
	      
	      //-----------------------------------------------------------
	      //fill and save the flow event	      

	      /*
	      Int_t nNewMultOfEvent = random3Temp.Gaus(nMultiplicityOfEvent,nSigmaMult);
	      cout << "new multiplicity: " << nNewMultOfEvent << endl;
  	      Double_t xNewFlowValue = random3Temp.Gaus(xEllipticFlowValue,xSigmaFlow);
	      if ( (fCount % 100) == 0) {
		cout << "new multiplicity: " << nNewMultOfEvent << endl;
		cout << "new flow value: " << xNewFlowValue << endl;
	      }
	      */

	      AliFlowEventSimple *fEvent = new AliFlowEventSimple(kTree, cutsInt, cutsDiff); 
	      //xRPAngle=random3Temp.Uniform(0.0,TMath::TwoPi());
        //fEvent->SetMCReactionPlaneAngle(xRPAngle);
        //fEvent->SetV2(xNewFlowValue);
        //fEvent->CloneTracks(nLoops);
	                    
	      // do flow analysis for various methods
	      if(MCEP)    mcep->Make(fEvent);
	      if(QC)      qc->Make(fEvent);
	      if(GFC)     gfc->Make(fEvent);
	      if(FQD)     fqd->Make(fEvent);
	      if(LYZ1SUM) lyz1sum->Make(fEvent);
	      if(LYZ1PROD)lyz1prod->Make(fEvent);
	      if(LYZ2SUM) lyz2sum->Make(fEvent);
	      if(LYZ2PROD)lyz2prod->Make(fEvent);
	      if(LYZEP)   lyzep->Make(fEvent,ep);
	      if(SP)      sp->Make(fEvent);	      
	      if(MH)      mh->Make(fEvent);
	      if(NL)      nl->Make(fEvent);
	      //-----------------------------------------------------------
	      fCount++;
	      //cout << "# " << fCount << " events processed" << endl;
	      delete kTree;
	      delete fEvent;
	    }
	  delete kineFile ;
	}
      delete evtsDir ;
    }

 //---------------------------------------------------------------------------------------  
 // create a new file which will hold the final results of all methods:
 TString outputFileName = "AnalysisResults.root";  
 TFile *outputFile = new TFile(outputFileName.Data(),"RECREATE");
 // create a new file for each method wich will hold list with final results:
 const Int_t nMethods = 12;
 TString method[nMethods] = {"MCEP","SP","GFC","QC","FQD","LYZ1SUM","LYZ1PROD","LYZ2SUM","LYZ2PROD","LYZEP","MH","NL"};
 TDirectoryFile *dirFileFinal[nMethods] = {NULL};
 TString fileNameMethod[nMethods]; 
 for(Int_t i=0;i<nMethods;i++)
 {
  // form a file name for each method:
  fileNameMethod[i]+="output";
  fileNameMethod[i]+=method[i].Data();
  fileNameMethod[i]+="analysis";
  dirFileFinal[i] = new TDirectoryFile(fileNameMethod[i].Data(),fileNameMethod[i].Data());
 } 
 
 // calculating and storing the final results of default flow analysis:
 if(MCEP)    {mcep->Finish();    mcep->WriteHistograms(dirFileFinal[0]);}
 if(SP)      {sp->Finish();      sp->WriteHistograms(dirFileFinal[1]);}
 if(GFC)     {gfc->Finish();     gfc->WriteHistograms(dirFileFinal[2]);}
 if(QC)      {qc->Finish();      qc->WriteHistograms(dirFileFinal[3]);}
 if(FQD)     {fqd->Finish();     fqd->WriteHistograms(dirFileFinal[4]);}
 if(LYZ1SUM) {lyz1sum->Finish(); lyz1sum->WriteHistograms(dirFileFinal[5]);}
 if(LYZ1PROD){lyz1prod->Finish();lyz1prod->WriteHistograms(dirFileFinal[6]);}
 if(LYZ2SUM) {lyz2sum->Finish(); lyz2sum->WriteHistograms(dirFileFinal[7]);}
 if(LYZ2PROD){lyz2prod->Finish();lyz2prod->WriteHistograms(dirFileFinal[8]);}
 if(LYZEP)   {lyzep->Finish();   lyzep->WriteHistograms(dirFileFinal[9]);}
 if(MH)      {mh->Finish();      mh->WriteHistograms(dirFileFinal[10]);}
 if(NL)      {nl->Finish();      nl->WriteHistograms(dirFileFinal[11]);}
 //---------------------------------------------------------------------------------------  
 
 outputFile->Close();
 delete outputFile;
  
  cout << endl;
  cout << " Fini ... " << endl;
  cout << endl;
  
  timer.Stop();
  cout << endl;
  timer.Print();
}

void SetupPar(char* pararchivename)
{
  //Load par files, create analysis libraries
  //For testing, if par file already decompressed and modified
  //classes then do not decompress.
 
  TString cdir(Form("%s", gSystem->WorkingDirectory() )) ; 
  TString parpar(Form("%s.par", pararchivename)) ; 
  if ( gSystem->AccessPathName(parpar.Data()) ) {
    gSystem->ChangeDirectory(gSystem->Getenv("ALICE_ROOT")) ;
    TString processline(Form(".! make %s", parpar.Data())) ; 
    gROOT->ProcessLine(processline.Data()) ;
    gSystem->ChangeDirectory(cdir) ; 
    processline = Form(".! mv /tmp/%s .", parpar.Data()) ;
    gROOT->ProcessLine(processline.Data()) ;
  } 
  if ( gSystem->AccessPathName(pararchivename) ) {  
    TString processline = Form(".! tar xvzf %s",parpar.Data()) ;
    gROOT->ProcessLine(processline.Data());
  }
  
  TString ocwd = gSystem->WorkingDirectory();
  gSystem->ChangeDirectory(pararchivename);
  
  // check for BUILD.sh and execute
  if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
    printf("*******************************\n");
    printf("*** Building PAR archive    ***\n");
    cout<<pararchivename<<endl;
    printf("*******************************\n");
    
    if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
      Error("runProcess","Cannot Build the PAR Archive! - Abort!");
      return -1;
    }
  }
  // check for SETUP.C and execute
  if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
    printf("*******************************\n");
    printf("*** Setup PAR archive       ***\n");
    cout<<pararchivename<<endl;
    printf("*******************************\n");
    gROOT->Macro("PROOF-INF/SETUP.C");
  }
  
  gSystem->ChangeDirectory(ocwd.Data());
  printf("Current dir: %s\n", ocwd.Data());
}

void LoadLibraries(const anaModes 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
    //--------------------------------------------------------
    gSystem->Load("libSTEERBase");
    gSystem->Load("libESD");
    gSystem->Load("libAOD");
    gSystem->Load("libANALYSIS");
    gSystem->Load("libANALYSISalice");
    gSystem->Load("libCORRFW");
    cerr<<"libCORRFW loaded..."<<endl;
    gSystem->Load("libPWGflowBase");
    cerr<<"libPWGflowBase loaded..."<<endl;
    gSystem->Load("libPWGflowTasks");
    cerr<<"libPWGflowTasks loaded..."<<endl;
  }
  
  else if (mode == mLocalPAR) {
    //--------------------------------------------------------
    //If you want to use root and par files from aliroot
    //--------------------------------------------------------  
     //If you want to use root and par files from aliroot
    //--------------------------------------------------------  
    SetupPar("STEERBase");
    SetupPar("ESD");
    SetupPar("AOD");
    SetupPar("ANALYSIS");
    SetupPar("ANALYSISalice");
    SetupPar("PWG2AOD");
    SetupPar("CORRFW");
    SetupPar("PWGflowBase");
    cerr<<"PWGflowBase.par loaded..."<<endl;
    SetupPar("PWGflowTasks");
    cerr<<"PWGflowTasks.par loaded..."<<endl;
  }
  
  //---------------------------------------------------------
  // <<<<<<<<<< Source mode >>>>>>>>>>>>
  //---------------------------------------------------------
  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 histosgrams
    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;  
    
  }  
  
}


 runFlowAnalysis.C:1
 runFlowAnalysis.C:2
 runFlowAnalysis.C:3
 runFlowAnalysis.C:4
 runFlowAnalysis.C:5
 runFlowAnalysis.C:6
 runFlowAnalysis.C:7
 runFlowAnalysis.C:8
 runFlowAnalysis.C:9
 runFlowAnalysis.C:10
 runFlowAnalysis.C:11
 runFlowAnalysis.C:12
 runFlowAnalysis.C:13
 runFlowAnalysis.C:14
 runFlowAnalysis.C:15
 runFlowAnalysis.C:16
 runFlowAnalysis.C:17
 runFlowAnalysis.C:18
 runFlowAnalysis.C:19
 runFlowAnalysis.C:20
 runFlowAnalysis.C:21
 runFlowAnalysis.C:22
 runFlowAnalysis.C:23
 runFlowAnalysis.C:24
 runFlowAnalysis.C:25
 runFlowAnalysis.C:26
 runFlowAnalysis.C:27
 runFlowAnalysis.C:28
 runFlowAnalysis.C:29
 runFlowAnalysis.C:30
 runFlowAnalysis.C:31
 runFlowAnalysis.C:32
 runFlowAnalysis.C:33
 runFlowAnalysis.C:34
 runFlowAnalysis.C:35
 runFlowAnalysis.C:36
 runFlowAnalysis.C:37
 runFlowAnalysis.C:38
 runFlowAnalysis.C:39
 runFlowAnalysis.C:40
 runFlowAnalysis.C:41
 runFlowAnalysis.C:42
 runFlowAnalysis.C:43
 runFlowAnalysis.C:44
 runFlowAnalysis.C:45
 runFlowAnalysis.C:46
 runFlowAnalysis.C:47
 runFlowAnalysis.C:48
 runFlowAnalysis.C:49
 runFlowAnalysis.C:50
 runFlowAnalysis.C:51
 runFlowAnalysis.C:52
 runFlowAnalysis.C:53
 runFlowAnalysis.C:54
 runFlowAnalysis.C:55
 runFlowAnalysis.C:56
 runFlowAnalysis.C:57
 runFlowAnalysis.C:58
 runFlowAnalysis.C:59
 runFlowAnalysis.C:60
 runFlowAnalysis.C:61
 runFlowAnalysis.C:62
 runFlowAnalysis.C:63
 runFlowAnalysis.C:64
 runFlowAnalysis.C:65
 runFlowAnalysis.C:66
 runFlowAnalysis.C:67
 runFlowAnalysis.C:68
 runFlowAnalysis.C:69
 runFlowAnalysis.C:70
 runFlowAnalysis.C:71
 runFlowAnalysis.C:72
 runFlowAnalysis.C:73
 runFlowAnalysis.C:74
 runFlowAnalysis.C:75
 runFlowAnalysis.C:76
 runFlowAnalysis.C:77
 runFlowAnalysis.C:78
 runFlowAnalysis.C:79
 runFlowAnalysis.C:80
 runFlowAnalysis.C:81
 runFlowAnalysis.C:82
 runFlowAnalysis.C:83
 runFlowAnalysis.C:84
 runFlowAnalysis.C:85
 runFlowAnalysis.C:86
 runFlowAnalysis.C:87
 runFlowAnalysis.C:88
 runFlowAnalysis.C:89
 runFlowAnalysis.C:90
 runFlowAnalysis.C:91
 runFlowAnalysis.C:92
 runFlowAnalysis.C:93
 runFlowAnalysis.C:94
 runFlowAnalysis.C:95
 runFlowAnalysis.C:96
 runFlowAnalysis.C:97
 runFlowAnalysis.C:98
 runFlowAnalysis.C:99
 runFlowAnalysis.C:100
 runFlowAnalysis.C:101
 runFlowAnalysis.C:102
 runFlowAnalysis.C:103
 runFlowAnalysis.C:104
 runFlowAnalysis.C:105
 runFlowAnalysis.C:106
 runFlowAnalysis.C:107
 runFlowAnalysis.C:108
 runFlowAnalysis.C:109
 runFlowAnalysis.C:110
 runFlowAnalysis.C:111
 runFlowAnalysis.C:112
 runFlowAnalysis.C:113
 runFlowAnalysis.C:114
 runFlowAnalysis.C:115
 runFlowAnalysis.C:116
 runFlowAnalysis.C:117
 runFlowAnalysis.C:118
 runFlowAnalysis.C:119
 runFlowAnalysis.C:120
 runFlowAnalysis.C:121
 runFlowAnalysis.C:122
 runFlowAnalysis.C:123
 runFlowAnalysis.C:124
 runFlowAnalysis.C:125
 runFlowAnalysis.C:126
 runFlowAnalysis.C:127
 runFlowAnalysis.C:128
 runFlowAnalysis.C:129
 runFlowAnalysis.C:130
 runFlowAnalysis.C:131
 runFlowAnalysis.C:132
 runFlowAnalysis.C:133
 runFlowAnalysis.C:134
 runFlowAnalysis.C:135
 runFlowAnalysis.C:136
 runFlowAnalysis.C:137
 runFlowAnalysis.C:138
 runFlowAnalysis.C:139
 runFlowAnalysis.C:140
 runFlowAnalysis.C:141
 runFlowAnalysis.C:142
 runFlowAnalysis.C:143
 runFlowAnalysis.C:144
 runFlowAnalysis.C:145
 runFlowAnalysis.C:146
 runFlowAnalysis.C:147
 runFlowAnalysis.C:148
 runFlowAnalysis.C:149
 runFlowAnalysis.C:150
 runFlowAnalysis.C:151
 runFlowAnalysis.C:152
 runFlowAnalysis.C:153
 runFlowAnalysis.C:154
 runFlowAnalysis.C:155
 runFlowAnalysis.C:156
 runFlowAnalysis.C:157
 runFlowAnalysis.C:158
 runFlowAnalysis.C:159
 runFlowAnalysis.C:160
 runFlowAnalysis.C:161
 runFlowAnalysis.C:162
 runFlowAnalysis.C:163
 runFlowAnalysis.C:164
 runFlowAnalysis.C:165
 runFlowAnalysis.C:166
 runFlowAnalysis.C:167
 runFlowAnalysis.C:168
 runFlowAnalysis.C:169
 runFlowAnalysis.C:170
 runFlowAnalysis.C:171
 runFlowAnalysis.C:172
 runFlowAnalysis.C:173
 runFlowAnalysis.C:174
 runFlowAnalysis.C:175
 runFlowAnalysis.C:176
 runFlowAnalysis.C:177
 runFlowAnalysis.C:178
 runFlowAnalysis.C:179
 runFlowAnalysis.C:180
 runFlowAnalysis.C:181
 runFlowAnalysis.C:182
 runFlowAnalysis.C:183
 runFlowAnalysis.C:184
 runFlowAnalysis.C:185
 runFlowAnalysis.C:186
 runFlowAnalysis.C:187
 runFlowAnalysis.C:188
 runFlowAnalysis.C:189
 runFlowAnalysis.C:190
 runFlowAnalysis.C:191
 runFlowAnalysis.C:192
 runFlowAnalysis.C:193
 runFlowAnalysis.C:194
 runFlowAnalysis.C:195
 runFlowAnalysis.C:196
 runFlowAnalysis.C:197
 runFlowAnalysis.C:198
 runFlowAnalysis.C:199
 runFlowAnalysis.C:200
 runFlowAnalysis.C:201
 runFlowAnalysis.C:202
 runFlowAnalysis.C:203
 runFlowAnalysis.C:204
 runFlowAnalysis.C:205
 runFlowAnalysis.C:206
 runFlowAnalysis.C:207
 runFlowAnalysis.C:208
 runFlowAnalysis.C:209
 runFlowAnalysis.C:210
 runFlowAnalysis.C:211
 runFlowAnalysis.C:212
 runFlowAnalysis.C:213
 runFlowAnalysis.C:214
 runFlowAnalysis.C:215
 runFlowAnalysis.C:216
 runFlowAnalysis.C:217
 runFlowAnalysis.C:218
 runFlowAnalysis.C:219
 runFlowAnalysis.C:220
 runFlowAnalysis.C:221
 runFlowAnalysis.C:222
 runFlowAnalysis.C:223
 runFlowAnalysis.C:224
 runFlowAnalysis.C:225
 runFlowAnalysis.C:226
 runFlowAnalysis.C:227
 runFlowAnalysis.C:228
 runFlowAnalysis.C:229
 runFlowAnalysis.C:230
 runFlowAnalysis.C:231
 runFlowAnalysis.C:232
 runFlowAnalysis.C:233
 runFlowAnalysis.C:234
 runFlowAnalysis.C:235
 runFlowAnalysis.C:236
 runFlowAnalysis.C:237
 runFlowAnalysis.C:238
 runFlowAnalysis.C:239
 runFlowAnalysis.C:240
 runFlowAnalysis.C:241
 runFlowAnalysis.C:242
 runFlowAnalysis.C:243
 runFlowAnalysis.C:244
 runFlowAnalysis.C:245
 runFlowAnalysis.C:246
 runFlowAnalysis.C:247
 runFlowAnalysis.C:248
 runFlowAnalysis.C:249
 runFlowAnalysis.C:250
 runFlowAnalysis.C:251
 runFlowAnalysis.C:252
 runFlowAnalysis.C:253
 runFlowAnalysis.C:254
 runFlowAnalysis.C:255
 runFlowAnalysis.C:256
 runFlowAnalysis.C:257
 runFlowAnalysis.C:258
 runFlowAnalysis.C:259
 runFlowAnalysis.C:260
 runFlowAnalysis.C:261
 runFlowAnalysis.C:262
 runFlowAnalysis.C:263
 runFlowAnalysis.C:264
 runFlowAnalysis.C:265
 runFlowAnalysis.C:266
 runFlowAnalysis.C:267
 runFlowAnalysis.C:268
 runFlowAnalysis.C:269
 runFlowAnalysis.C:270
 runFlowAnalysis.C:271
 runFlowAnalysis.C:272
 runFlowAnalysis.C:273
 runFlowAnalysis.C:274
 runFlowAnalysis.C:275
 runFlowAnalysis.C:276
 runFlowAnalysis.C:277
 runFlowAnalysis.C:278
 runFlowAnalysis.C:279
 runFlowAnalysis.C:280
 runFlowAnalysis.C:281
 runFlowAnalysis.C:282
 runFlowAnalysis.C:283
 runFlowAnalysis.C:284
 runFlowAnalysis.C:285
 runFlowAnalysis.C:286
 runFlowAnalysis.C:287
 runFlowAnalysis.C:288
 runFlowAnalysis.C:289
 runFlowAnalysis.C:290
 runFlowAnalysis.C:291
 runFlowAnalysis.C:292
 runFlowAnalysis.C:293
 runFlowAnalysis.C:294
 runFlowAnalysis.C:295
 runFlowAnalysis.C:296
 runFlowAnalysis.C:297
 runFlowAnalysis.C:298
 runFlowAnalysis.C:299
 runFlowAnalysis.C:300
 runFlowAnalysis.C:301
 runFlowAnalysis.C:302
 runFlowAnalysis.C:303
 runFlowAnalysis.C:304
 runFlowAnalysis.C:305
 runFlowAnalysis.C:306
 runFlowAnalysis.C:307
 runFlowAnalysis.C:308
 runFlowAnalysis.C:309
 runFlowAnalysis.C:310
 runFlowAnalysis.C:311
 runFlowAnalysis.C:312
 runFlowAnalysis.C:313
 runFlowAnalysis.C:314
 runFlowAnalysis.C:315
 runFlowAnalysis.C:316
 runFlowAnalysis.C:317
 runFlowAnalysis.C:318
 runFlowAnalysis.C:319
 runFlowAnalysis.C:320
 runFlowAnalysis.C:321
 runFlowAnalysis.C:322
 runFlowAnalysis.C:323
 runFlowAnalysis.C:324
 runFlowAnalysis.C:325
 runFlowAnalysis.C:326
 runFlowAnalysis.C:327
 runFlowAnalysis.C:328
 runFlowAnalysis.C:329
 runFlowAnalysis.C:330
 runFlowAnalysis.C:331
 runFlowAnalysis.C:332
 runFlowAnalysis.C:333
 runFlowAnalysis.C:334
 runFlowAnalysis.C:335
 runFlowAnalysis.C:336
 runFlowAnalysis.C:337
 runFlowAnalysis.C:338
 runFlowAnalysis.C:339
 runFlowAnalysis.C:340
 runFlowAnalysis.C:341
 runFlowAnalysis.C:342
 runFlowAnalysis.C:343
 runFlowAnalysis.C:344
 runFlowAnalysis.C:345
 runFlowAnalysis.C:346
 runFlowAnalysis.C:347
 runFlowAnalysis.C:348
 runFlowAnalysis.C:349
 runFlowAnalysis.C:350
 runFlowAnalysis.C:351
 runFlowAnalysis.C:352
 runFlowAnalysis.C:353
 runFlowAnalysis.C:354
 runFlowAnalysis.C:355
 runFlowAnalysis.C:356
 runFlowAnalysis.C:357
 runFlowAnalysis.C:358
 runFlowAnalysis.C:359
 runFlowAnalysis.C:360
 runFlowAnalysis.C:361
 runFlowAnalysis.C:362
 runFlowAnalysis.C:363
 runFlowAnalysis.C:364
 runFlowAnalysis.C:365
 runFlowAnalysis.C:366
 runFlowAnalysis.C:367
 runFlowAnalysis.C:368
 runFlowAnalysis.C:369
 runFlowAnalysis.C:370
 runFlowAnalysis.C:371
 runFlowAnalysis.C:372
 runFlowAnalysis.C:373
 runFlowAnalysis.C:374
 runFlowAnalysis.C:375
 runFlowAnalysis.C:376
 runFlowAnalysis.C:377
 runFlowAnalysis.C:378
 runFlowAnalysis.C:379
 runFlowAnalysis.C:380
 runFlowAnalysis.C:381
 runFlowAnalysis.C:382
 runFlowAnalysis.C:383
 runFlowAnalysis.C:384
 runFlowAnalysis.C:385
 runFlowAnalysis.C:386
 runFlowAnalysis.C:387
 runFlowAnalysis.C:388
 runFlowAnalysis.C:389
 runFlowAnalysis.C:390
 runFlowAnalysis.C:391
 runFlowAnalysis.C:392
 runFlowAnalysis.C:393
 runFlowAnalysis.C:394
 runFlowAnalysis.C:395
 runFlowAnalysis.C:396
 runFlowAnalysis.C:397
 runFlowAnalysis.C:398
 runFlowAnalysis.C:399
 runFlowAnalysis.C:400
 runFlowAnalysis.C:401
 runFlowAnalysis.C:402
 runFlowAnalysis.C:403
 runFlowAnalysis.C:404
 runFlowAnalysis.C:405
 runFlowAnalysis.C:406
 runFlowAnalysis.C:407
 runFlowAnalysis.C:408
 runFlowAnalysis.C:409
 runFlowAnalysis.C:410
 runFlowAnalysis.C:411
 runFlowAnalysis.C:412
 runFlowAnalysis.C:413
 runFlowAnalysis.C:414
 runFlowAnalysis.C:415
 runFlowAnalysis.C:416
 runFlowAnalysis.C:417
 runFlowAnalysis.C:418
 runFlowAnalysis.C:419
 runFlowAnalysis.C:420
 runFlowAnalysis.C:421
 runFlowAnalysis.C:422
 runFlowAnalysis.C:423
 runFlowAnalysis.C:424
 runFlowAnalysis.C:425
 runFlowAnalysis.C:426
 runFlowAnalysis.C:427
 runFlowAnalysis.C:428
 runFlowAnalysis.C:429
 runFlowAnalysis.C:430
 runFlowAnalysis.C:431
 runFlowAnalysis.C:432
 runFlowAnalysis.C:433
 runFlowAnalysis.C:434
 runFlowAnalysis.C:435
 runFlowAnalysis.C:436
 runFlowAnalysis.C:437
 runFlowAnalysis.C:438
 runFlowAnalysis.C:439
 runFlowAnalysis.C:440
 runFlowAnalysis.C:441
 runFlowAnalysis.C:442
 runFlowAnalysis.C:443
 runFlowAnalysis.C:444
 runFlowAnalysis.C:445
 runFlowAnalysis.C:446
 runFlowAnalysis.C:447
 runFlowAnalysis.C:448
 runFlowAnalysis.C:449
 runFlowAnalysis.C:450
 runFlowAnalysis.C:451
 runFlowAnalysis.C:452
 runFlowAnalysis.C:453
 runFlowAnalysis.C:454
 runFlowAnalysis.C:455
 runFlowAnalysis.C:456
 runFlowAnalysis.C:457
 runFlowAnalysis.C:458
 runFlowAnalysis.C:459
 runFlowAnalysis.C:460
 runFlowAnalysis.C:461
 runFlowAnalysis.C:462
 runFlowAnalysis.C:463
 runFlowAnalysis.C:464
 runFlowAnalysis.C:465
 runFlowAnalysis.C:466
 runFlowAnalysis.C:467
 runFlowAnalysis.C:468
 runFlowAnalysis.C:469
 runFlowAnalysis.C:470
 runFlowAnalysis.C:471
 runFlowAnalysis.C:472
 runFlowAnalysis.C:473
 runFlowAnalysis.C:474
 runFlowAnalysis.C:475
 runFlowAnalysis.C:476
 runFlowAnalysis.C:477
 runFlowAnalysis.C:478
 runFlowAnalysis.C:479
 runFlowAnalysis.C:480
 runFlowAnalysis.C:481
 runFlowAnalysis.C:482
 runFlowAnalysis.C:483
 runFlowAnalysis.C:484
 runFlowAnalysis.C:485
 runFlowAnalysis.C:486
 runFlowAnalysis.C:487
 runFlowAnalysis.C:488
 runFlowAnalysis.C:489
 runFlowAnalysis.C:490
 runFlowAnalysis.C:491
 runFlowAnalysis.C:492
 runFlowAnalysis.C:493
 runFlowAnalysis.C:494
 runFlowAnalysis.C:495
 runFlowAnalysis.C:496
 runFlowAnalysis.C:497
 runFlowAnalysis.C:498
 runFlowAnalysis.C:499
 runFlowAnalysis.C:500
 runFlowAnalysis.C:501
 runFlowAnalysis.C:502
 runFlowAnalysis.C:503
 runFlowAnalysis.C:504
 runFlowAnalysis.C:505
 runFlowAnalysis.C:506
 runFlowAnalysis.C:507
 runFlowAnalysis.C:508
 runFlowAnalysis.C:509
 runFlowAnalysis.C:510
 runFlowAnalysis.C:511
 runFlowAnalysis.C:512
 runFlowAnalysis.C:513
 runFlowAnalysis.C:514
 runFlowAnalysis.C:515
 runFlowAnalysis.C:516
 runFlowAnalysis.C:517
 runFlowAnalysis.C:518
 runFlowAnalysis.C:519
 runFlowAnalysis.C:520
 runFlowAnalysis.C:521
 runFlowAnalysis.C:522
 runFlowAnalysis.C:523
 runFlowAnalysis.C:524
 runFlowAnalysis.C:525
 runFlowAnalysis.C:526
 runFlowAnalysis.C:527
 runFlowAnalysis.C:528
 runFlowAnalysis.C:529
 runFlowAnalysis.C:530
 runFlowAnalysis.C:531
 runFlowAnalysis.C:532
 runFlowAnalysis.C:533
 runFlowAnalysis.C:534
 runFlowAnalysis.C:535
 runFlowAnalysis.C:536
 runFlowAnalysis.C:537
 runFlowAnalysis.C:538
 runFlowAnalysis.C:539
 runFlowAnalysis.C:540
 runFlowAnalysis.C:541
 runFlowAnalysis.C:542
 runFlowAnalysis.C:543
 runFlowAnalysis.C:544
 runFlowAnalysis.C:545
 runFlowAnalysis.C:546
 runFlowAnalysis.C:547
 runFlowAnalysis.C:548
 runFlowAnalysis.C:549
 runFlowAnalysis.C:550
 runFlowAnalysis.C:551
 runFlowAnalysis.C:552
 runFlowAnalysis.C:553
 runFlowAnalysis.C:554
 runFlowAnalysis.C:555
 runFlowAnalysis.C:556
 runFlowAnalysis.C:557
 runFlowAnalysis.C:558
 runFlowAnalysis.C:559
 runFlowAnalysis.C:560
 runFlowAnalysis.C:561
 runFlowAnalysis.C:562
 runFlowAnalysis.C:563
 runFlowAnalysis.C:564
 runFlowAnalysis.C:565
 runFlowAnalysis.C:566
 runFlowAnalysis.C:567
 runFlowAnalysis.C:568
 runFlowAnalysis.C:569
 runFlowAnalysis.C:570
 runFlowAnalysis.C:571
 runFlowAnalysis.C:572
 runFlowAnalysis.C:573
 runFlowAnalysis.C:574
 runFlowAnalysis.C:575
 runFlowAnalysis.C:576
 runFlowAnalysis.C:577
 runFlowAnalysis.C:578
 runFlowAnalysis.C:579
 runFlowAnalysis.C:580
 runFlowAnalysis.C:581
 runFlowAnalysis.C:582
 runFlowAnalysis.C:583
 runFlowAnalysis.C:584
 runFlowAnalysis.C:585
 runFlowAnalysis.C:586
 runFlowAnalysis.C:587
 runFlowAnalysis.C:588
 runFlowAnalysis.C:589
 runFlowAnalysis.C:590
 runFlowAnalysis.C:591
 runFlowAnalysis.C:592
 runFlowAnalysis.C:593
 runFlowAnalysis.C:594
 runFlowAnalysis.C:595
 runFlowAnalysis.C:596
 runFlowAnalysis.C:597
 runFlowAnalysis.C:598
 runFlowAnalysis.C:599
 runFlowAnalysis.C:600
 runFlowAnalysis.C:601
 runFlowAnalysis.C:602
 runFlowAnalysis.C:603
 runFlowAnalysis.C:604
 runFlowAnalysis.C:605
 runFlowAnalysis.C:606
 runFlowAnalysis.C:607
 runFlowAnalysis.C:608
 runFlowAnalysis.C:609
 runFlowAnalysis.C:610
 runFlowAnalysis.C:611
 runFlowAnalysis.C:612
 runFlowAnalysis.C:613
 runFlowAnalysis.C:614
 runFlowAnalysis.C:615
 runFlowAnalysis.C:616
 runFlowAnalysis.C:617
 runFlowAnalysis.C:618
 runFlowAnalysis.C:619
 runFlowAnalysis.C:620
 runFlowAnalysis.C:621
 runFlowAnalysis.C:622
 runFlowAnalysis.C:623
 runFlowAnalysis.C:624
 runFlowAnalysis.C:625
 runFlowAnalysis.C:626
 runFlowAnalysis.C:627
 runFlowAnalysis.C:628
 runFlowAnalysis.C:629
 runFlowAnalysis.C:630
 runFlowAnalysis.C:631
 runFlowAnalysis.C:632
 runFlowAnalysis.C:633
 runFlowAnalysis.C:634
 runFlowAnalysis.C:635
 runFlowAnalysis.C:636
 runFlowAnalysis.C:637
 runFlowAnalysis.C:638
 runFlowAnalysis.C:639
 runFlowAnalysis.C:640
 runFlowAnalysis.C:641
 runFlowAnalysis.C:642
 runFlowAnalysis.C:643
 runFlowAnalysis.C:644
 runFlowAnalysis.C:645