ROOT logo
//====================================================================================================================================================

Bool_t RunAnalysisTaskMFTExample(const Char_t *runType="local",       // "grid" and "local" types have been tested
				 const Char_t *runMode="full") {
  
  //  enum {kGenerated, kReconstructed};

  LoadLibs();

  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (mgr) delete mgr;
  mgr = new AliAnalysisManager("AM","Analysis Manager");
  
  AliAODInputHandler* inputHandler = new AliAODInputHandler();
  mgr->SetInputEventHandler(inputHandler);
  
  if (!strcmp(runType,"grid")) mgr->SetGridHandler(CreateAlienHandler(runMode));
  
  gROOT->LoadMacro("AliAnalysisTaskMFTExample.cxx++g");   
  AliAnalysisTaskMFTExample *task = new AliAnalysisTaskMFTExample("AliAnalysisTaskMFTExample");

  // in cm, taken from Fig. 7.4 of the ITS Upgrade TDR, in the hypothesis of ~80 tracks participating to the vtx
  task -> SetVtxResolutionITS(5.e-4, 5.e-4, 4.e-4);
  task -> SetVertexMode(AliAnalysisTaskMFTExample::kGenerated);

  mgr->AddTask(task);
  
  // create output container(s)
  AliAnalysisDataContainer *histogramList = mgr->CreateContainer("list", TList::Class(), AliAnalysisManager::kOutputContainer, "AnalysisMFT_Output.root");
  
  // connect input and output
  mgr->ConnectInput(task,  0, mgr->GetCommonInputContainer());
  mgr->ConnectOutput(task, 1, histogramList);

  // RUN ANALYSIS

  TStopwatch timer;
  timer.Start();
  mgr->InitAnalysis();
  mgr->PrintStatus();
  
  if (!strcmp(runType,"grid")) {
    printf("Starting MFT analysis on the grid");
    mgr->StartAnalysis("grid");
  }

  else if (!strcmp(runType,"local")) {
    printf("Starting MFT analysis locally");
    mgr->StartAnalysis("local", GetInputLocalData());
  }

  else AliError(Form("Specified run type %s is not supported", runType));
  
  timer.Stop();
  timer.Print();
  return kTRUE;

}

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

AliAnalysisGrid* CreateAlienHandler(const Char_t *runMode) {

  // Set up the analysis plugin in case of a grid analysis

  TString rootVersion = "v5-34-08-6";
  TString alirootVersion = "vAN-20140727";

  AliAnalysisAlien *analysisPlugin = new AliAnalysisAlien();
  if (!analysisPlugin) { Printf("Error : analysisPlugin is null !!!"); return kFALSE; }
  analysisPlugin->SetAPIVersion("V1.1x");
  analysisPlugin->SetROOTVersion(rootVersion.Data());
  analysisPlugin->SetAliROOTVersion(alirootVersion.Data());
  analysisPlugin->SetExecutableCommand("aliroot -b -q");

  // Overwrite all generated files, datasets and output results from a previous session
  analysisPlugin->SetOverwriteMode();
  // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
  analysisPlugin->SetRunMode(runMode);  // VERY IMPORTANT 
  
  analysisPlugin->SetAdditionalRootLibs("CORRFW");
  analysisPlugin->SetAdditionalRootLibs("PWGmuon");
  
  // Location of Data and Working dir
  analysisPlugin->SetGridDataDir("/alice/cern.ch/user/a/auras/MFT/simulations_2014/PbPb/jpsi_prompt/pix20um20um_plane400um/");
  analysisPlugin->SetDataPattern("*/AliAOD.Muons.root");
  analysisPlugin->SetRunPrefix("");
  analysisPlugin->SetGridWorkingDir("MFT/analysis_2014/PbPb/jpsi_prompt/pix20um20um_plane400um/");
  
  // Declare alien output directory. Relative to working directory.
  analysisPlugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output
  // Declare the analysis source files names separated by blancs. To be compiled runtime using ACLiC on the worker nodes.
  analysisPlugin->SetAnalysisSource("AliAnalysisTaskMFTExample.cxx");
  // Declare all libraries (other than the default ones for the framework. These will be
  // loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here.
  analysisPlugin->SetAdditionalLibs("libCORRFW.so libPWGmuon.so AliAnalysisTaskMFTExample.h AliAnalysisTaskMFTExample.cxx");
  
  analysisPlugin->AddIncludePath("-I.");

  analysisPlugin->SetOutputToRunNo();
  
  // Optionally set a name for the generated analysis macro (default MyAnalysis.C)
  analysisPlugin->SetAnalysisMacro("MFTAnalysis.C");

  // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)
  analysisPlugin->SetSplitMaxInputFileNumber(100);
  // Number of runs per master job
  analysisPlugin->SetNrunsPerMaster(1);
  
  // Optionally modify the executable name (default analysis.sh)
  analysisPlugin->SetExecutable("MFTAnalysis.sh");

  // Optionally set number of failed jobs that will trigger killing waiting sub-jobs.
  analysisPlugin->SetMaxInitFailed(5);
  // Optionally resubmit threshold.
  analysisPlugin->SetMasterResubmitThreshold(90);
  // Optionally set time to live (default 30000 sec)
  analysisPlugin->SetTTL(30000);
  // Optionally set input format (default xml-single)
  analysisPlugin->SetInputFormat("xml-single");
  // Optionally modify the name of the generated JDL (default analysis.jdl)
  analysisPlugin->SetJDLName("MFTAnalysis.jdl");
  // Optionally modify job price (default 1)
  analysisPlugin->SetPrice(1);      
  // Optionally modify split mode (default 'se')    
  analysisPlugin->SetSplitMode("se");
  
  analysisPlugin->SetNtestFiles(5);
  //   analysisPlugin->SetMergeViaJDL(1);
  analysisPlugin->SetOverwriteMode(kTRUE);
  
  return analysisPlugin;

}

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

TChain* GetInputLocalData() {

  // Set up the chain of input events in case of a local analysis

  TChain *chain = new TChain("aodTree");
  chain->Add("./AliAOD.Muons.root");

  return chain;

}

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

void LoadLibs() {

  gSystem->AddIncludePath("-I$ALICE_ROOT/include ");
  
  gSystem->Load("libTree.so")          ;
  gSystem->Load("libGeom.so")          ;
  gSystem->Load("libVMC.so")           ;
  gSystem->Load("libMinuit.so")        ;
  gSystem->Load("libPhysics.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("libPWGmuon.so")       ;

}

//====================================================================================================================================================
 RunAnalysisTaskMFTExample.C:1
 RunAnalysisTaskMFTExample.C:2
 RunAnalysisTaskMFTExample.C:3
 RunAnalysisTaskMFTExample.C:4
 RunAnalysisTaskMFTExample.C:5
 RunAnalysisTaskMFTExample.C:6
 RunAnalysisTaskMFTExample.C:7
 RunAnalysisTaskMFTExample.C:8
 RunAnalysisTaskMFTExample.C:9
 RunAnalysisTaskMFTExample.C:10
 RunAnalysisTaskMFTExample.C:11
 RunAnalysisTaskMFTExample.C:12
 RunAnalysisTaskMFTExample.C:13
 RunAnalysisTaskMFTExample.C:14
 RunAnalysisTaskMFTExample.C:15
 RunAnalysisTaskMFTExample.C:16
 RunAnalysisTaskMFTExample.C:17
 RunAnalysisTaskMFTExample.C:18
 RunAnalysisTaskMFTExample.C:19
 RunAnalysisTaskMFTExample.C:20
 RunAnalysisTaskMFTExample.C:21
 RunAnalysisTaskMFTExample.C:22
 RunAnalysisTaskMFTExample.C:23
 RunAnalysisTaskMFTExample.C:24
 RunAnalysisTaskMFTExample.C:25
 RunAnalysisTaskMFTExample.C:26
 RunAnalysisTaskMFTExample.C:27
 RunAnalysisTaskMFTExample.C:28
 RunAnalysisTaskMFTExample.C:29
 RunAnalysisTaskMFTExample.C:30
 RunAnalysisTaskMFTExample.C:31
 RunAnalysisTaskMFTExample.C:32
 RunAnalysisTaskMFTExample.C:33
 RunAnalysisTaskMFTExample.C:34
 RunAnalysisTaskMFTExample.C:35
 RunAnalysisTaskMFTExample.C:36
 RunAnalysisTaskMFTExample.C:37
 RunAnalysisTaskMFTExample.C:38
 RunAnalysisTaskMFTExample.C:39
 RunAnalysisTaskMFTExample.C:40
 RunAnalysisTaskMFTExample.C:41
 RunAnalysisTaskMFTExample.C:42
 RunAnalysisTaskMFTExample.C:43
 RunAnalysisTaskMFTExample.C:44
 RunAnalysisTaskMFTExample.C:45
 RunAnalysisTaskMFTExample.C:46
 RunAnalysisTaskMFTExample.C:47
 RunAnalysisTaskMFTExample.C:48
 RunAnalysisTaskMFTExample.C:49
 RunAnalysisTaskMFTExample.C:50
 RunAnalysisTaskMFTExample.C:51
 RunAnalysisTaskMFTExample.C:52
 RunAnalysisTaskMFTExample.C:53
 RunAnalysisTaskMFTExample.C:54
 RunAnalysisTaskMFTExample.C:55
 RunAnalysisTaskMFTExample.C:56
 RunAnalysisTaskMFTExample.C:57
 RunAnalysisTaskMFTExample.C:58
 RunAnalysisTaskMFTExample.C:59
 RunAnalysisTaskMFTExample.C:60
 RunAnalysisTaskMFTExample.C:61
 RunAnalysisTaskMFTExample.C:62
 RunAnalysisTaskMFTExample.C:63
 RunAnalysisTaskMFTExample.C:64
 RunAnalysisTaskMFTExample.C:65
 RunAnalysisTaskMFTExample.C:66
 RunAnalysisTaskMFTExample.C:67
 RunAnalysisTaskMFTExample.C:68
 RunAnalysisTaskMFTExample.C:69
 RunAnalysisTaskMFTExample.C:70
 RunAnalysisTaskMFTExample.C:71
 RunAnalysisTaskMFTExample.C:72
 RunAnalysisTaskMFTExample.C:73
 RunAnalysisTaskMFTExample.C:74
 RunAnalysisTaskMFTExample.C:75
 RunAnalysisTaskMFTExample.C:76
 RunAnalysisTaskMFTExample.C:77
 RunAnalysisTaskMFTExample.C:78
 RunAnalysisTaskMFTExample.C:79
 RunAnalysisTaskMFTExample.C:80
 RunAnalysisTaskMFTExample.C:81
 RunAnalysisTaskMFTExample.C:82
 RunAnalysisTaskMFTExample.C:83
 RunAnalysisTaskMFTExample.C:84
 RunAnalysisTaskMFTExample.C:85
 RunAnalysisTaskMFTExample.C:86
 RunAnalysisTaskMFTExample.C:87
 RunAnalysisTaskMFTExample.C:88
 RunAnalysisTaskMFTExample.C:89
 RunAnalysisTaskMFTExample.C:90
 RunAnalysisTaskMFTExample.C:91
 RunAnalysisTaskMFTExample.C:92
 RunAnalysisTaskMFTExample.C:93
 RunAnalysisTaskMFTExample.C:94
 RunAnalysisTaskMFTExample.C:95
 RunAnalysisTaskMFTExample.C:96
 RunAnalysisTaskMFTExample.C:97
 RunAnalysisTaskMFTExample.C:98
 RunAnalysisTaskMFTExample.C:99
 RunAnalysisTaskMFTExample.C:100
 RunAnalysisTaskMFTExample.C:101
 RunAnalysisTaskMFTExample.C:102
 RunAnalysisTaskMFTExample.C:103
 RunAnalysisTaskMFTExample.C:104
 RunAnalysisTaskMFTExample.C:105
 RunAnalysisTaskMFTExample.C:106
 RunAnalysisTaskMFTExample.C:107
 RunAnalysisTaskMFTExample.C:108
 RunAnalysisTaskMFTExample.C:109
 RunAnalysisTaskMFTExample.C:110
 RunAnalysisTaskMFTExample.C:111
 RunAnalysisTaskMFTExample.C:112
 RunAnalysisTaskMFTExample.C:113
 RunAnalysisTaskMFTExample.C:114
 RunAnalysisTaskMFTExample.C:115
 RunAnalysisTaskMFTExample.C:116
 RunAnalysisTaskMFTExample.C:117
 RunAnalysisTaskMFTExample.C:118
 RunAnalysisTaskMFTExample.C:119
 RunAnalysisTaskMFTExample.C:120
 RunAnalysisTaskMFTExample.C:121
 RunAnalysisTaskMFTExample.C:122
 RunAnalysisTaskMFTExample.C:123
 RunAnalysisTaskMFTExample.C:124
 RunAnalysisTaskMFTExample.C:125
 RunAnalysisTaskMFTExample.C:126
 RunAnalysisTaskMFTExample.C:127
 RunAnalysisTaskMFTExample.C:128
 RunAnalysisTaskMFTExample.C:129
 RunAnalysisTaskMFTExample.C:130
 RunAnalysisTaskMFTExample.C:131
 RunAnalysisTaskMFTExample.C:132
 RunAnalysisTaskMFTExample.C:133
 RunAnalysisTaskMFTExample.C:134
 RunAnalysisTaskMFTExample.C:135
 RunAnalysisTaskMFTExample.C:136
 RunAnalysisTaskMFTExample.C:137
 RunAnalysisTaskMFTExample.C:138
 RunAnalysisTaskMFTExample.C:139
 RunAnalysisTaskMFTExample.C:140
 RunAnalysisTaskMFTExample.C:141
 RunAnalysisTaskMFTExample.C:142
 RunAnalysisTaskMFTExample.C:143
 RunAnalysisTaskMFTExample.C:144
 RunAnalysisTaskMFTExample.C:145
 RunAnalysisTaskMFTExample.C:146
 RunAnalysisTaskMFTExample.C:147
 RunAnalysisTaskMFTExample.C:148
 RunAnalysisTaskMFTExample.C:149
 RunAnalysisTaskMFTExample.C:150
 RunAnalysisTaskMFTExample.C:151
 RunAnalysisTaskMFTExample.C:152
 RunAnalysisTaskMFTExample.C:153
 RunAnalysisTaskMFTExample.C:154
 RunAnalysisTaskMFTExample.C:155
 RunAnalysisTaskMFTExample.C:156
 RunAnalysisTaskMFTExample.C:157
 RunAnalysisTaskMFTExample.C:158
 RunAnalysisTaskMFTExample.C:159
 RunAnalysisTaskMFTExample.C:160
 RunAnalysisTaskMFTExample.C:161
 RunAnalysisTaskMFTExample.C:162
 RunAnalysisTaskMFTExample.C:163
 RunAnalysisTaskMFTExample.C:164
 RunAnalysisTaskMFTExample.C:165
 RunAnalysisTaskMFTExample.C:166
 RunAnalysisTaskMFTExample.C:167
 RunAnalysisTaskMFTExample.C:168
 RunAnalysisTaskMFTExample.C:169
 RunAnalysisTaskMFTExample.C:170
 RunAnalysisTaskMFTExample.C:171
 RunAnalysisTaskMFTExample.C:172