]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/FLOW/macros/runFlowTask.C
cleanup of structure
[u/mrichter/AliRoot.git] / PWG2 / FLOW / macros / runFlowTask.C
index 2421893d12abdc4e99f73378c9981427175ef8d4..e6d6114fb73ee81892a62aad53588ffd12f7d2dd 100644 (file)
@@ -6,20 +6,22 @@ enum anaModes {mLocal,mLocalPAR,mPROOF,mGRID};
 // 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      = kFALSE;
-Bool_t MCEP     = kFALSE; //not for pp 
+Bool_t MCEP     = kTRUE;  // correlation with Monte Carlo reaction plane
+Bool_t SP       = kTRUE;  // scalar product method (similar to eventplane method)
+Bool_t GFC      = kTRUE;  // cumulants based on generating function
+Bool_t QC       = kTRUE;  // cumulants using Q vectors
+Bool_t FQD      = kTRUE;  // fit of the distribution of the Q vector (only integrated v)
+Bool_t LYZ1SUM  = kTRUE;  // Lee Yang Zeroes using sum generating function (integrated v)
+Bool_t LYZ1PROD = kTRUE;  // Lee Yang Zeroes using product generating function (integrated v)
+Bool_t LYZ2SUM  = kFALSE; // Lee Yang Zeroes using sum generating function (second pass differential v)
+Bool_t LYZ2PROD = kFALSE; // Lee Yang Zeroes using product generating function (second pass differential v)
+Bool_t LYZEP    = kFALSE; // Lee Yang Zeroes Event plane using sum generating function (gives eventplane + weight)
+Bool_t MH       = kTRUE;  // azimuthal correlators in mixed harmonics  
+Bool_t NL       = kTRUE;  // nested loops (for instance distribution of phi1-phi2 for all distinct pairs)
 
-Bool_t METHODS[] = {SP,LYZ1SUM,LYZ1PROD,LYZ2SUM,LYZ2PROD,LYZEP,GFC,QC,FQD,MCEP};
+Bool_t METHODS[] = {SP,LYZ1SUM,LYZ1PROD,LYZ2SUM,LYZ2PROD,LYZEP,GFC,QC,FQD,MCEP,MH,NL};
 
-// Analysis type can be ESD, AOD, MC, ESDMC0, ESDMC1
+// Analysis type can be ESD, AOD, MC, ESDMCkineESD, ESDMCkineMC
 const TString type = "ESD";
 
 // Boolean to fill/not fill the QA histograms
@@ -29,62 +31,104 @@ Bool_t QA = kTRUE;
 Bool_t WEIGHTS[] = {kFALSE,kFALSE,kFALSE}; //Phi, v'(pt), v'(eta)
 
 
-void runFlowTask(Int_t mode=mLocal, Int_t nRuns = 40, 
-                //const Char_t* dataDir="/data/alice2/kolk/PP/LHC09a4/81119", Int_t offset = 0)
-                const Char_t* dataDir="/data/alice2/kolk/Therminator_midcentral", Int_t offset = 0)
-//void runFlowTask(Int_t mode=mPROOF, Int_t nRuns = 10000, 
-                //      const Char_t* dataDir="/COMMON/COMMON/LHC09a4_run8158X", Int_t offset = 0)
-                //const Char_t* dataDir="/PWG2/akisiel/Therminator_c2030", Int_t offset=0)
+//void runFlowTask(Int_t mode=mLocal, Int_t nRuns = 2, 
+//Bool_t DATA = kTRUE, const Char_t* dataDir="/data/alice2/kolk/PP/data/LHC09d/104892/test", Int_t offset = 0)
+//              Bool_t DATA = kFALSE, const Char_t* dataDir="/data/alice2/kolk/PP/LHC09d10/104873", Int_t offset = 0)
+
+void runFlowTask(Int_t mode = mPROOF, Int_t nRuns = 50000000, 
+                //Bool_t DATA = kFALSE, const Char_t* dataDir="/PWG2/akisiel/Therminator_midcentral_ESD", Int_t offset=0)
+                //Bool_t DATA = kFALSE, const Char_t* dataDir="/PWG2/akisiel/LHC10d6_0.9TeV_EPOS_12502X", Int_t offset=0)
+                //Bool_t DATA = kFALSE, const Char_t* dataDir="/alice/sim/LHC10d2_117048", Int_t offset=0) //phojet 7 TeV               
+                //Bool_t DATA = kTRUE, const Char_t* dataDir="/alice/data/LHC09d_000104792_p6", Int_t offset=0) //data 0.9 TeV
+                Bool_t DATA = kFALSE, const Char_t* dataDir="/PWG4/morsch/HIJING_CENT_4EV", Int_t offset=0) //hijing Pb Pb pilot
+
+//void runFlowTask(Int_t mode = mGRID, Bool_t DATA = kTRUE)
 {
   TStopwatch timer;
   timer.Start();
   
+  CrossCheckUserSettings(DATA);
+
   LoadLibraries(mode);
+
+  if (mode == mGRID) {
+    // Create and configure the alien handler plugin
+    gROOT->LoadMacro("CreateAlienHandler.C");
+    AliAnalysisGrid *alienHandler = CreateAlienHandler();  
+    if (!alienHandler) return;
+  }
   
-  if (mode==mLocal || mode == mLocalPAR || mode == mGRID) {
+  if (mode==mLocal || mode == mLocalPAR) {
     if (type!="AOD") { TChain* chain = CreateESDChain(dataDir, nRuns, offset);}
     else { TChain* chain = CreateAODChain(dataDir, nRuns, offset);}
   }
   //____________________________________________//
   // Make the analysis manager
   AliAnalysisManager *mgr = new AliAnalysisManager("FlowAnalysisManager");
-  
+  if (mode == mGRID) { 
+    // Connect plug-in to the analysis manager
+    mgr->SetGridHandler(alienHandler);
+  }
+
   if (type == "ESD"){
     AliVEventHandler* esdH = new AliESDInputHandler;
     mgr->SetInputEventHandler(esdH);
+    if (MCEP) { 
+      AliMCEventHandler *mc = new AliMCEventHandler();
+      mgr->SetMCtruthEventHandler(mc); 
+    }
   }
   
   if (type == "AOD"){
     AliVEventHandler* aodH = new AliAODInputHandler;
     mgr->SetInputEventHandler(aodH); 
+    if (MCEP) { 
+      AliMCEventHandler *mc = new AliMCEventHandler();
+      mgr->SetMCtruthEventHandler(mc);
+    } 
   }
   
-  if (type == "MC" || type == "ESDMC0" || type == "ESDMC1"){
+  if (type == "MC" || type == "ESDMCkineESD" || type == "ESDMCkineMC"){
     AliVEventHandler* esdH = new AliESDInputHandler;
     mgr->SetInputEventHandler(esdH);
     
     AliMCEventHandler *mc = new AliMCEventHandler();
-    mgr->SetMCtruthEventHandler(mc); }
-  
-  
+    mgr->SetMCtruthEventHandler(mc); 
+  }
+    
   //____________________________________________//
-  // Load the tasks
+  // Load the analysis task
   gROOT->LoadMacro("AddTaskFlow.C");
   AliAnalysisTaskFlowEvent* taskFE = AddTaskFlow(type,METHODS,QA,WEIGHTS);
-    
+
+  
+  // Task to check the offline trigger
+  if (mode == mLocal || mode == mGRID) {
+    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); }
+  else if (mode == mPROOF || mode == mLocalPAR) {
+    gROOT->LoadMacro("AddTaskPhysicsSelection.C"); }
+  AliPhysicsSelectionTask* physicsSelTask = AddTaskPhysicsSelection();
+  if (!DATA) {physicsSelTask->GetPhysicsSelection()->SetAnalyzeMC();}
+  
+  // Enable debug printouts
+  mgr->SetDebugLevel(2);
+
+
   //____________________________________________//
   // Run the analysis
   if (!mgr->InitAnalysis()) return;
   mgr->PrintStatus();
   
-  if (mode==mLocal || mode == mLocalPAR) {
+  if (mode == mLocal || mode == mLocalPAR) {
     mgr->StartAnalysis("local",chain);
   }
-  else if (mode==mPROOF) {
+  else if (mode == mPROOF) {
     mgr->StartAnalysis("proof",dataDir,nRuns,offset);
   }
-  else if (mode==mGRID) { 
-    mgr->StartAnalysis("local",chain);
+  else if (mode == mGRID) { 
+    mgr->StartAnalysis("grid");
   }
   
   timer.Stop();
@@ -92,22 +136,36 @@ void runFlowTask(Int_t mode=mLocal, Int_t nRuns = 40,
   
 }
 
+void CrossCheckUserSettings(Bool_t bData) 
+{
+ // Check in this method if the user settings make sense.
+ if(MCEP==kTRUE && bData==kTRUE)
+ {
+  cout<<endl;
+  cout<<"WARNING: In real datasets there is no Monte Carlo information available !!!!"<<endl;
+  cout<<"         Set for real data analysis DATA = kTRUE and MCEP = kFALSE in the macro."<<endl;
+  cout<<endl;
+  exit(0);
+ }
+
+} // end of void CrossCheckUserSettings()
 
 void LoadLibraries(const anaModes mode) {
   
   //--------------------------------------
   // Load the needed libraries most of them already loaded by aliroot
   //--------------------------------------
-  gSystem->Load("libTree.so");
-  gSystem->Load("libGeom.so");
-  gSystem->Load("libVMC.so");
-  gSystem->Load("libXMLIO.so");
-  gSystem->Load("libPhysics.so");
+  gSystem->Load("libTree");
+  gSystem->Load("libGeom");
+  gSystem->Load("libVMC");
+  gSystem->Load("libXMLIO");
+  gSystem->Load("libPhysics");
   
   //----------------------------------------------------------
   // >>>>>>>>>>> Local mode <<<<<<<<<<<<<< 
   //----------------------------------------------------------
-  if (mode==mLocal) {
+  if (mode==mLocal || mode==mGRID) {
     //--------------------------------------------------------
     // If you want to use already compiled libraries 
     // in the aliroot distribution
@@ -117,15 +175,23 @@ void LoadLibraries(const anaModes mode) {
     gSystem->Load("libAOD");
     gSystem->Load("libANALYSIS");
     gSystem->Load("libANALYSISalice");
-    gSystem->Load("libCORRFW.so");
-    cerr<<"libCORRFW.so loaded..."<<endl;
-    gSystem->Load("libPWG2flowCommon.so");
-    cerr<<"libPWG2flowCommon.so loaded..."<<endl;
-    gSystem->Load("libPWG2flowTasks.so");
-    cerr<<"libPWG2flowTasks.so loaded..."<<endl;
+    gSystem->Load("libCORRFW");
+    gSystem->Load("libPWG2forward");
+    if (mode==mLocal) {
+      gSystem->Load("libPWG2flowCommon");
+      cerr<<"libPWG2flowCommon loaded..."<<endl;
+      gSystem->Load("libPWG2flowTasks");
+      cerr<<"libPWG2flowTasks loaded..."<<endl;
+    }
+    if (mode==mGRID) {
+      SetupPar("PWG2flowCommon");
+      cerr<<"PWG2flowCommon.par loaded..."<<endl;
+      SetupPar("PWG2flowTasks");
+      cerr<<"PWG2flowTasks.par loaded..."<<endl;
+    }
   }
   
-  else if (mode == mLocalPAR || mode == mGRID) {
+  else if (mode == mLocalPAR) {
     //--------------------------------------------------------
     //If you want to use root and par files from aliroot
     //--------------------------------------------------------  
@@ -134,8 +200,7 @@ void LoadLibraries(const anaModes mode) {
     SetupPar("AOD");
     SetupPar("ANALYSIS");
     SetupPar("ANALYSISalice");
-    SetupPar("PWG2AOD");
-    SetupPar("CORRFW");
+        SetupPar("CORRFW");
     SetupPar("PWG2flowCommon");
     cerr<<"PWG2flowCommon.par loaded..."<<endl;
     SetupPar("PWG2flowTasks");
@@ -147,55 +212,67 @@ void LoadLibraries(const anaModes mode) {
   //---------------------------------------------------------
   else if (mode==mPROOF) {
     //
-    
+    //gEnv->SetValue("XSec.GSI.DelegProxy","2");    
     //  set to debug root versus if needed
-    //  TProof::Mgr("alicecaf")->SetROOTVersion("v5-21-01-alice_dbg");
-    //  TProof::Mgr("alicecaf")->SetROOTVersion("v5-21-01-alice");
-    
+    //TProof::Mgr("alicecaf")->SetROOTVersion("v5-24-00a_dbg");
+    //TProof::Mgr("alicecaf")->SetROOTVersion("v5-24-00a");
+    //TProof::Reset("proof://snelling@alicecaf.cern.ch");     
     // Connect to proof
-    // Put appropriate username here
-    // TProof::Reset("proof://snelling@alicecaf.cern.ch"); 
     printf("*** Connect to PROOF ***\n");
-    //  TProof::Open("abilandz@alicecaf.cern.ch");
-    //    TProof::Open("nkolk@alicecaf.cern.ch");
-    TProof::Open("snelling@localhost");
+    gEnv->SetValue("XSec.GSI.DelegProxy","2");
+    // Put appropriate username here
+    //TProof::Open("abilandz@alicecaf.cern.ch");
+    //TProof::Open("nkolk@alicecaf.cern.ch");
+    //TProof::Open("snelling@localhost");
+    TProof::Open("alice-caf.cern.ch");
+    //TProof::Open("skaf.saske.sk");
+    //TProof::Open("prf000-iep-grid.saske.sk");
+    //Info("runSKAF.C","Loading libs on proof (may take while, around 1 min) ...");
+    // list the data available
+    //gProof->ShowDataSets("/*/*"); 
+    //gProof->ShowDataSets("/alice/sim/"); //for MC Data
+    //gProof->ShowDataSets("/alice/data/"); //for REAL Data 
+    // Clear the Packages
+    
+    gProof->ClearPackage("STEERBase.par");
+    gProof->ClearPackage("ESD.par");
+    gProof->ClearPackage("AOD.par");
+    gProof->ClearPackage("ANALYSIS.par");
+    gProof->ClearPackage("ANALYSISalice.par");
+    gProof->ClearPackage("CORRFW.par");
+    
+    gProof->ClearPackage("PWG2flowCommon");
+    gProof->ClearPackage("PWG2flowTasks");
     
-    // Enable the STEERBase Package
-    //    gProof->ClearPackage("STEERBase.par");
+    // Upload the Packages
     gProof->UploadPackage("STEERBase.par");
+    gProof->UploadPackage("ESD.par");    
+    gProof->UploadPackage("AOD.par");
+       
+    gProof->UploadPackage("ANALYSIS.par"); 
+    gProof->UploadPackage("ANALYSISalice.par");
+    gProof->UploadPackage("CORRFW.par");
+    gProof->UploadPackage("PWG2flowCommon.par");
+    gProof->UploadPackage("PWG2flowTasks.par");
+
+    // Enable the Packages 
+    // The global package
+    //gProof->EnablePackage("aliroot_v4-19-05-AN",kTRUE);
+    // Or separate
+    
     gProof->EnablePackage("STEERBase");
-    // Enable the ESD Package
-    //    gProof->ClearPackage("ESD.par");
-    gProof->UploadPackage("ESD.par");
     gProof->EnablePackage("ESD");
-    // Enable the AOD Package
-    //    gProof->ClearPackage("AOD.par");
-    gProof->UploadPackage("AOD.par");
     gProof->EnablePackage("AOD");
-    // Enable the Analysis Package
-    //    gProof->ClearPackage("ANALYSIS.par");
-    gProof->UploadPackage("ANALYSIS.par");
+    
+    // Always needed
     gProof->EnablePackage("ANALYSIS");
-    // Enable the Analysis Package alice
-    //    gProof->ClearPackage("ANALYSISalice.par");
-    gProof->UploadPackage("ANALYSISalice.par");
     gProof->EnablePackage("ANALYSISalice");
-    // Load the PWG2 AOD
-    //    gProof->ClearPackage("PWG2AOD.par");
-    gProof->UploadPackage("PWG2AOD.par");
-    gProof->EnablePackage("PWG2AOD");
-    // Enable the Correction Framework
-    //    gProof->ClearPackage("CORRFW.par");
-    gProof->UploadPackage("CORRFW.par");
     gProof->EnablePackage("CORRFW");
-    // Enable Flow Analysis
-    //    gProof->ClearPackage("PWG2flowCommon");
-    gProof->UploadPackage("PWG2flowCommon.par");
     gProof->EnablePackage("PWG2flowCommon");
-    //    gProof->ClearPackage("PWG2flowTasks");
-    gProof->UploadPackage("PWG2flowTasks.par");
     gProof->EnablePackage("PWG2flowTasks");
-    //
+
+    // Show enables Packages
     gProof->ShowEnabledPackages();
   }