ROOT logo
class AliAnalysisGrid;
class AliAnalysisAlien;

//_______________________________| Loading Libraries |________________________________
void Load() {
    
  gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/CONTAINERS -I$ALICE_ROOT/STEER/STEER -I$ALICE_ROOT/STEER/STEERBase -I$ALICE_ROOT/STEER/ESD -I$ALICE_ROOT/STEER/AOD -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS  -I$ALICE_ROOT/OADB -I$ALICE_ROOT/PWGPP -g"); 

  //load the required aliroot libraries
  gSystem->Load("libTree.so");
  gSystem->Load("libGeom.so");
  gSystem->Load("libPhysics.so");
  gSystem->Load("libVMC.so");
  gSystem->Load("libMinuit.so");
  gSystem->Load("libSTEERBase.so");
  gSystem->Load("libESD.so");
  gSystem->Load("libAOD.so"); 
  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libOADB.so");
  gSystem->Load("libANALYSISalice.so");
  gSystem->Load("libCORRFW.so");
  gSystem->Load("libPWGPP.so");
}

//_______________________________| Running on Grid |________________________________
void RunCFSingleTrackEfficiencyTask()
{

  const Bool_t readAOD = 1;

  TString        analysisMode    =  "local"; // "local", "grid", or "proof"
  TString           inputMode    =  "list"; // "list", "xml", or "dataset"
  Long64_t           nentries    =   123567890,firstentry=0;
  Bool_t       useAlienPlugin    =   kTRUE;
  TString          pluginmode    =   "test";
  TString testfileslistWithPlugin="filesAOD.txt"; // list of local files to test a la "files.txt" to use by the plugin

  TBenchmark benchmark;
  benchmark.Start("AliCFSingleTrackEfficiencyTask");

  Load();

  if(analysisMode=="grid") {
    TGrid::Connect("alien://") ;    //  Create an AliRunTagCuts and an AliEventTagCuts Object
  }

  if(useAlienPlugin) {
    AliAnalysisGrid *alienHandler = CreateAlienHandler(pluginmode,testfileslistWithPlugin,readAOD);
    if(!alienHandler) return;
  }

  printf("CREATE ANALYSIS MANAGER\n");
  AliAnalysisManager *mgr = new AliAnalysisManager("My Manager","My Manager");
  mgr->SetDebugLevel(10);
  if(useAlienPlugin) mgr->SetGridHandler(alienHandler);

  AliMCEventHandler*  mcHandler = new AliMCEventHandler();
  if (!readAOD) mgr->SetMCtruthEventHandler(mcHandler);
	 
  AliInputEventHandler* dataHandler;
  if   (readAOD) dataHandler = new AliAODInputHandler();
  else           dataHandler = new AliESDInputHandler();
  mgr->SetInputEventHandler(dataHandler);
	 
  //CREATE THE TASK
  printf("Prepare to create the task\n");

  // Run physics selection if not reading AODs
  if (!readAOD) {
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
    AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(kTRUE);
  }

  // Add new tasks
  //
  // First add the task for the PID response setting
  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
  AliAnalysisTaskSE *setupTask = AddTaskPIDResponse(kTRUE,kTRUE);
	 
  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDqa.C");
  AliAnalysisTaskPIDqa *pidQA = AddTaskPIDqa();

  // gROOT->LoadMacro("AliSingleTrackEffCuts.cxx++g");
  // gROOT->LoadMacro("AliCFSingleTrackEfficiencyTask.cxx++g");
  gROOT->LoadMacro("AddSingleTrackEfficiencyTask.C");
  AliCFSingleTrackEfficiencyTask *task = AddSingleTrackEfficiencyTask(readAOD,"Nch");
  AliCFSingleTrackEfficiencyTask *taskPi = AddSingleTrackEfficiencyTask(readAOD,"Pion",AliPID::kPion,211);
  AliCFSingleTrackEfficiencyTask *taskKa = AddSingleTrackEfficiencyTask(readAOD,"Kaon",AliPID::kKaon,321);
 
  // Run the analysis
  TChain * analysisChain=0;
	 
  if(analysisChain) printf("CHAIN HAS %d ENTRIES\n",(Int_t)analysisChain->GetEntries());
  if(!mgr->InitAnalysis()) return;
  mgr->PrintStatus();
  if(analysisMode=="grid" && !useAlienPlugin) analysisMode="local";
  if(analysisMode!="proof") {
    mgr->StartAnalysis(analysisMode.Data(),analysisChain,nentries,firstentry);
  }
	 
  benchmark.Stop("AliCFSingleTrackEfficiencyTask");
  benchmark.Show("AliCFSingleTrackEfficiencyTask");
	 
  return;  
}


//_______________________________| CreateAlienHandler |________________________________
AliAnalysisGrid* CreateAlienHandler(TString pluginmode="test", TString testfileslistWithPlugin="", const Bool_t readAOD=kTRUE)
{

  AliAnalysisAlien *plugin = new AliAnalysisAlien();
  plugin->SetRunMode(pluginmode.Data());
  plugin->SetUser("zconesa");
  plugin->SetAPIVersion("V1.1x");
  plugin->SetROOTVersion("v5-34-08");
  plugin->SetAliROOTVersion("v5-05-03-AN");
  plugin->SetNtestFiles(1);

  // Set data file list to test on local mode  
  plugin->SetFileForTestMode(testfileslistWithPlugin.Data());

  // Set data search pattern for DATA grid Mode
  plugin->SetGridDataDir("/alice/sim/2013/LHC13d3"); // specify MC sample
  if(readAOD) plugin->SetDataPattern("AOD/*AliAOD.root");// specify AOD set
  else plugin->SetDataPattern("*/AliESDs.root");
  
  Int_t totruns=0;
  gROOT->LoadMacro("$ALICE_ROOT/PWGHF/vertexingHF/AddGoodRuns.C");
  totruns += AddGoodRuns(plugin,"LHC13b","LHC13b");
  totruns += AddGoodRuns(plugin,"LHC13c","LHC13c");
  plugin->SetNrunsPerMaster(totruns);
  
  // plugin->AddDataFile("/alice/cern.ch/user/z/zconesa/sim/LHC13d3/195483_195529.xml");

  plugin->SetGridWorkingDir("sim/LHC13d3/ST290713");
  plugin->SetGridOutputDir("out"); 
  
  plugin->SetExecutable("ST290713.sh");
  plugin->SetAnalysisSource("AliSingleTrackEffCuts.cxx AliCFSingleTrackEfficiencyTask.cxx");
  plugin->SetAdditionalLibs("AliSingleTrackEffCuts.h AliSingleTrackEffCuts.cxx AliCFSingleTrackEfficiencyTask.cxx AliCFSingleTrackEfficiencyTask.h");  
  plugin->AddIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/CONTAINERS -I$ALICE_ROOT/STEER/STEER -I$ALICE_ROOT/STEER/STEERBase -I$ALICE_ROOT/STEER/ESD -I$ALICE_ROOT/STEER/AOD -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/OADB -g"); 
  
  plugin->SetDefaultOutputs(kTRUE);
  // merging via jdl
  plugin->SetMergeViaJDL(kTRUE);
  plugin->SetOneStageMerging(kFALSE);
  plugin->SetMaxMergeStages(2);
  
  plugin->SetSplitMaxInputFileNumber(5);
  
  plugin->SetAnalysisMacro("ST290713.C");
  plugin->SetJDLName("TaskHFST290713.jdl");
  
  return plugin;
}
 RunCFSingleTrackEfficiencyTask.C:1
 RunCFSingleTrackEfficiencyTask.C:2
 RunCFSingleTrackEfficiencyTask.C:3
 RunCFSingleTrackEfficiencyTask.C:4
 RunCFSingleTrackEfficiencyTask.C:5
 RunCFSingleTrackEfficiencyTask.C:6
 RunCFSingleTrackEfficiencyTask.C:7
 RunCFSingleTrackEfficiencyTask.C:8
 RunCFSingleTrackEfficiencyTask.C:9
 RunCFSingleTrackEfficiencyTask.C:10
 RunCFSingleTrackEfficiencyTask.C:11
 RunCFSingleTrackEfficiencyTask.C:12
 RunCFSingleTrackEfficiencyTask.C:13
 RunCFSingleTrackEfficiencyTask.C:14
 RunCFSingleTrackEfficiencyTask.C:15
 RunCFSingleTrackEfficiencyTask.C:16
 RunCFSingleTrackEfficiencyTask.C:17
 RunCFSingleTrackEfficiencyTask.C:18
 RunCFSingleTrackEfficiencyTask.C:19
 RunCFSingleTrackEfficiencyTask.C:20
 RunCFSingleTrackEfficiencyTask.C:21
 RunCFSingleTrackEfficiencyTask.C:22
 RunCFSingleTrackEfficiencyTask.C:23
 RunCFSingleTrackEfficiencyTask.C:24
 RunCFSingleTrackEfficiencyTask.C:25
 RunCFSingleTrackEfficiencyTask.C:26
 RunCFSingleTrackEfficiencyTask.C:27
 RunCFSingleTrackEfficiencyTask.C:28
 RunCFSingleTrackEfficiencyTask.C:29
 RunCFSingleTrackEfficiencyTask.C:30
 RunCFSingleTrackEfficiencyTask.C:31
 RunCFSingleTrackEfficiencyTask.C:32
 RunCFSingleTrackEfficiencyTask.C:33
 RunCFSingleTrackEfficiencyTask.C:34
 RunCFSingleTrackEfficiencyTask.C:35
 RunCFSingleTrackEfficiencyTask.C:36
 RunCFSingleTrackEfficiencyTask.C:37
 RunCFSingleTrackEfficiencyTask.C:38
 RunCFSingleTrackEfficiencyTask.C:39
 RunCFSingleTrackEfficiencyTask.C:40
 RunCFSingleTrackEfficiencyTask.C:41
 RunCFSingleTrackEfficiencyTask.C:42
 RunCFSingleTrackEfficiencyTask.C:43
 RunCFSingleTrackEfficiencyTask.C:44
 RunCFSingleTrackEfficiencyTask.C:45
 RunCFSingleTrackEfficiencyTask.C:46
 RunCFSingleTrackEfficiencyTask.C:47
 RunCFSingleTrackEfficiencyTask.C:48
 RunCFSingleTrackEfficiencyTask.C:49
 RunCFSingleTrackEfficiencyTask.C:50
 RunCFSingleTrackEfficiencyTask.C:51
 RunCFSingleTrackEfficiencyTask.C:52
 RunCFSingleTrackEfficiencyTask.C:53
 RunCFSingleTrackEfficiencyTask.C:54
 RunCFSingleTrackEfficiencyTask.C:55
 RunCFSingleTrackEfficiencyTask.C:56
 RunCFSingleTrackEfficiencyTask.C:57
 RunCFSingleTrackEfficiencyTask.C:58
 RunCFSingleTrackEfficiencyTask.C:59
 RunCFSingleTrackEfficiencyTask.C:60
 RunCFSingleTrackEfficiencyTask.C:61
 RunCFSingleTrackEfficiencyTask.C:62
 RunCFSingleTrackEfficiencyTask.C:63
 RunCFSingleTrackEfficiencyTask.C:64
 RunCFSingleTrackEfficiencyTask.C:65
 RunCFSingleTrackEfficiencyTask.C:66
 RunCFSingleTrackEfficiencyTask.C:67
 RunCFSingleTrackEfficiencyTask.C:68
 RunCFSingleTrackEfficiencyTask.C:69
 RunCFSingleTrackEfficiencyTask.C:70
 RunCFSingleTrackEfficiencyTask.C:71
 RunCFSingleTrackEfficiencyTask.C:72
 RunCFSingleTrackEfficiencyTask.C:73
 RunCFSingleTrackEfficiencyTask.C:74
 RunCFSingleTrackEfficiencyTask.C:75
 RunCFSingleTrackEfficiencyTask.C:76
 RunCFSingleTrackEfficiencyTask.C:77
 RunCFSingleTrackEfficiencyTask.C:78
 RunCFSingleTrackEfficiencyTask.C:79
 RunCFSingleTrackEfficiencyTask.C:80
 RunCFSingleTrackEfficiencyTask.C:81
 RunCFSingleTrackEfficiencyTask.C:82
 RunCFSingleTrackEfficiencyTask.C:83
 RunCFSingleTrackEfficiencyTask.C:84
 RunCFSingleTrackEfficiencyTask.C:85
 RunCFSingleTrackEfficiencyTask.C:86
 RunCFSingleTrackEfficiencyTask.C:87
 RunCFSingleTrackEfficiencyTask.C:88
 RunCFSingleTrackEfficiencyTask.C:89
 RunCFSingleTrackEfficiencyTask.C:90
 RunCFSingleTrackEfficiencyTask.C:91
 RunCFSingleTrackEfficiencyTask.C:92
 RunCFSingleTrackEfficiencyTask.C:93
 RunCFSingleTrackEfficiencyTask.C:94
 RunCFSingleTrackEfficiencyTask.C:95
 RunCFSingleTrackEfficiencyTask.C:96
 RunCFSingleTrackEfficiencyTask.C:97
 RunCFSingleTrackEfficiencyTask.C:98
 RunCFSingleTrackEfficiencyTask.C:99
 RunCFSingleTrackEfficiencyTask.C:100
 RunCFSingleTrackEfficiencyTask.C:101
 RunCFSingleTrackEfficiencyTask.C:102
 RunCFSingleTrackEfficiencyTask.C:103
 RunCFSingleTrackEfficiencyTask.C:104
 RunCFSingleTrackEfficiencyTask.C:105
 RunCFSingleTrackEfficiencyTask.C:106
 RunCFSingleTrackEfficiencyTask.C:107
 RunCFSingleTrackEfficiencyTask.C:108
 RunCFSingleTrackEfficiencyTask.C:109
 RunCFSingleTrackEfficiencyTask.C:110
 RunCFSingleTrackEfficiencyTask.C:111
 RunCFSingleTrackEfficiencyTask.C:112
 RunCFSingleTrackEfficiencyTask.C:113
 RunCFSingleTrackEfficiencyTask.C:114
 RunCFSingleTrackEfficiencyTask.C:115
 RunCFSingleTrackEfficiencyTask.C:116
 RunCFSingleTrackEfficiencyTask.C:117
 RunCFSingleTrackEfficiencyTask.C:118
 RunCFSingleTrackEfficiencyTask.C:119
 RunCFSingleTrackEfficiencyTask.C:120
 RunCFSingleTrackEfficiencyTask.C:121
 RunCFSingleTrackEfficiencyTask.C:122
 RunCFSingleTrackEfficiencyTask.C:123
 RunCFSingleTrackEfficiencyTask.C:124
 RunCFSingleTrackEfficiencyTask.C:125
 RunCFSingleTrackEfficiencyTask.C:126
 RunCFSingleTrackEfficiencyTask.C:127
 RunCFSingleTrackEfficiencyTask.C:128
 RunCFSingleTrackEfficiencyTask.C:129
 RunCFSingleTrackEfficiencyTask.C:130
 RunCFSingleTrackEfficiencyTask.C:131
 RunCFSingleTrackEfficiencyTask.C:132
 RunCFSingleTrackEfficiencyTask.C:133
 RunCFSingleTrackEfficiencyTask.C:134
 RunCFSingleTrackEfficiencyTask.C:135
 RunCFSingleTrackEfficiencyTask.C:136
 RunCFSingleTrackEfficiencyTask.C:137
 RunCFSingleTrackEfficiencyTask.C:138
 RunCFSingleTrackEfficiencyTask.C:139
 RunCFSingleTrackEfficiencyTask.C:140
 RunCFSingleTrackEfficiencyTask.C:141
 RunCFSingleTrackEfficiencyTask.C:142
 RunCFSingleTrackEfficiencyTask.C:143
 RunCFSingleTrackEfficiencyTask.C:144
 RunCFSingleTrackEfficiencyTask.C:145
 RunCFSingleTrackEfficiencyTask.C:146
 RunCFSingleTrackEfficiencyTask.C:147
 RunCFSingleTrackEfficiencyTask.C:148
 RunCFSingleTrackEfficiencyTask.C:149
 RunCFSingleTrackEfficiencyTask.C:150
 RunCFSingleTrackEfficiencyTask.C:151
 RunCFSingleTrackEfficiencyTask.C:152
 RunCFSingleTrackEfficiencyTask.C:153
 RunCFSingleTrackEfficiencyTask.C:154
 RunCFSingleTrackEfficiencyTask.C:155
 RunCFSingleTrackEfficiencyTask.C:156
 RunCFSingleTrackEfficiencyTask.C:157