ROOT logo
void  runFlowReaderExample( Int_t maxNumberOfEvents = 1000, const char* inputDataFiles="/Users/snelling/alice_data/jthomas/testData/")
{
  gSystem->Load("libTree.so");
  gSystem->Load("libVMC.so");
  gSystem->Load("libPhysics.so");
  gSystem->Load("libPWGflowBase");

  TStopwatch timer;
  timer.Start();

  //define reference particles
  AliStarTrackCuts* rpCuts = AliStarTrackCuts::StandardCuts();
  rpCuts->SetPtMin(0.05);
  rpCuts->SetPtMax(10.);

  //define particles of interest
  AliStarTrackCuts* poiCuts = AliStarTrackCuts::StandardCuts();
  poiCuts->SetPtMin(0.05);
  poiCuts->SetPtMax(10.);

  //define event cuts
  AliStarEventCuts* starEventCuts = AliStarEventCuts::StandardCuts();
  starEventCuts-> SetCentralityIDMax(3);
  starEventCuts-> SetCentralityIDMin(3);

  AliFlowAnalysisWithMCEventPlane *mcep = new AliFlowAnalysisWithMCEventPlane();
  AliFlowAnalysisWithQCumulants* qc = new AliFlowAnalysisWithQCumulants();   //mcep->SetHarmonic(2); // default is v2

  mcep->Init(); qc->Init();  

  Int_t i=0;
  AliStarEventReader starReader(inputDataFiles) ;
  while ( starReader.GetNextEvent() )                                // Get next event
  {
    AliStarEvent* starEvent = starReader.GetEvent();
    if ( !starEventCuts->PassesCuts(starEvent) ) continue;              // Test if the event is good
    AliFlowEventSimple* flowEvent = new AliFlowEventStar(starEvent,rpCuts,poiCuts);  // make a flow event from a star event 
    // do flow analysis for various methods

    mcep->Make(flowEvent);
    qc->Make(flowEvent);

    delete flowEvent;

    i++;
    cout <<"Event: " << i << "\r"; cout.flush();
    if (i>maxNumberOfEvents) break;
  }

  //---------------------------------------------------------------------------------------  
  // 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 = 2;
  TString method[nMethods] = {"MCEP","QC"};
  TDirectoryFile *dirFileFinal[nMethods] = {NULL};
  TString fileName[nMethods]; 
  for(Int_t i=0;i<nMethods;i++)
    {
      // form a file name for each method:
      fileName[i]+="output";
      fileName[i]+=method[i].Data();
      fileName[i]+="analysis";
      dirFileFinal[i] = new TDirectoryFile(fileName[i].Data(),fileName[i].Data());
    } 
  
  // calculating and storing the final results of default flow analysis:
  mcep->Finish();    mcep->WriteHistograms(dirFileFinal[0]);
  qc->Finish();      qc->WriteHistograms(dirFileFinal[1]);
  //---------------------------------------------------------------------------------------  
  
  outputFile->Close();
  delete outputFile;
  
  timer.Stop();
  cout << endl;
  timer.Print();
  
  delete rpCuts;
  delete poiCuts;
  delete starEventCuts;
}
 runFlowReaderExample.C:1
 runFlowReaderExample.C:2
 runFlowReaderExample.C:3
 runFlowReaderExample.C:4
 runFlowReaderExample.C:5
 runFlowReaderExample.C:6
 runFlowReaderExample.C:7
 runFlowReaderExample.C:8
 runFlowReaderExample.C:9
 runFlowReaderExample.C:10
 runFlowReaderExample.C:11
 runFlowReaderExample.C:12
 runFlowReaderExample.C:13
 runFlowReaderExample.C:14
 runFlowReaderExample.C:15
 runFlowReaderExample.C:16
 runFlowReaderExample.C:17
 runFlowReaderExample.C:18
 runFlowReaderExample.C:19
 runFlowReaderExample.C:20
 runFlowReaderExample.C:21
 runFlowReaderExample.C:22
 runFlowReaderExample.C:23
 runFlowReaderExample.C:24
 runFlowReaderExample.C:25
 runFlowReaderExample.C:26
 runFlowReaderExample.C:27
 runFlowReaderExample.C:28
 runFlowReaderExample.C:29
 runFlowReaderExample.C:30
 runFlowReaderExample.C:31
 runFlowReaderExample.C:32
 runFlowReaderExample.C:33
 runFlowReaderExample.C:34
 runFlowReaderExample.C:35
 runFlowReaderExample.C:36
 runFlowReaderExample.C:37
 runFlowReaderExample.C:38
 runFlowReaderExample.C:39
 runFlowReaderExample.C:40
 runFlowReaderExample.C:41
 runFlowReaderExample.C:42
 runFlowReaderExample.C:43
 runFlowReaderExample.C:44
 runFlowReaderExample.C:45
 runFlowReaderExample.C:46
 runFlowReaderExample.C:47
 runFlowReaderExample.C:48
 runFlowReaderExample.C:49
 runFlowReaderExample.C:50
 runFlowReaderExample.C:51
 runFlowReaderExample.C:52
 runFlowReaderExample.C:53
 runFlowReaderExample.C:54
 runFlowReaderExample.C:55
 runFlowReaderExample.C:56
 runFlowReaderExample.C:57
 runFlowReaderExample.C:58
 runFlowReaderExample.C:59
 runFlowReaderExample.C:60
 runFlowReaderExample.C:61
 runFlowReaderExample.C:62
 runFlowReaderExample.C:63
 runFlowReaderExample.C:64
 runFlowReaderExample.C:65
 runFlowReaderExample.C:66
 runFlowReaderExample.C:67
 runFlowReaderExample.C:68
 runFlowReaderExample.C:69
 runFlowReaderExample.C:70
 runFlowReaderExample.C:71
 runFlowReaderExample.C:72
 runFlowReaderExample.C:73
 runFlowReaderExample.C:74
 runFlowReaderExample.C:75
 runFlowReaderExample.C:76
 runFlowReaderExample.C:77
 runFlowReaderExample.C:78
 runFlowReaderExample.C:79
 runFlowReaderExample.C:80
 runFlowReaderExample.C:81
 runFlowReaderExample.C:82
 runFlowReaderExample.C:83
 runFlowReaderExample.C:84