ROOT logo
//
// This macro sets all the aspects of configuration of an Analysis Train run
// which are always the same for all kinds of analysis (local, PROOF, AliEn)
//
// Inputs:
//
//   - nmix           = number of mixings to do (if > 0, initialize mixing stuff)
//   - options        = a set of keywords which drive some configurations
//   - outputFileName = name of file produced by train
//   - configPath     = a path where all required config macros are stored
//
// Notes:
//
//   - in case the source is an ESD, and if inputs are a MC production
//     the MC input handler is created by default
//
// Returns:
//   
//   - if successful: the name of the expected input TTre (esdTree or aodTree)
//   - if failed    : NULL
//
TString Setup
(
   Int_t       nmix,
   const char *options,
   const char *outputFileName,
   const char *macroPath = "."
)
{
   // prepare output
   TString out("");
   
   //
   // === EXAMINE OPTIONS ==========================================================================
   //

   // this is done using the utility 'RsnOptions.C'
   // which provides a unique way to interpret them
   
   TString opt(options);
   opt.ToUpper();
   
   Bool_t isMC      = opt.Contains("MC") || (!opt.Contains("DATA"));
   Bool_t isPP      = opt.Contains("PP") || (!opt.Contains("PBPB"));
   Bool_t isESD     = opt.Contains("ESD");
   Bool_t useTender = opt.Contains("TENDER");
   Bool_t noV0      = opt.Contains("NOV0");
   
   //
   // === LOAD LIBRARIES ===========================================================================
   //

   // load analysis libraries
   gSystem->Load("libSTEERBase.so");
   gSystem->Load("libESD.so");
   gSystem->Load("libAOD.so");
   gSystem->Load("libANALYSIS.so");
   gSystem->Load("libANALYSISalice.so");
   gSystem->Load("libEventMixing.so");
   gSystem->Load("libCORRFW.so");
   
   // tender-related libraries
   if (isESD && useTender) {
      ::Info("AnalysisSetup", "Loading tender libraries");
      gSystem->Load("libTENDER.so");
      gSystem->Load("libTENDERSupplies.so");
   } else if (!isESD) {
      useTender = kFALSE;
   }
   
   gSystem->Load("libPWGLFresonances.so");

//   // load development RSN library
//   if (!AliAnalysisAlien::SetupPar("PWG2resonances.par")) return "";

   //
   // === CREATE ANALYSIS MANAGER ==================================================================
   //

   AliAnalysisManager *mgr = new AliAnalysisManager("RsnAnalysisManager");
   mgr->SetCommonFileName(outputFileName);
   ::Info("AnalysisSetup", "Common file name: %s", outputFileName);

   //
   // === INPUT / OUTPUT HANDLER CONFIGURATION =====================================================
   //

   if (isESD) {
      out = "esdTree";
      ::Info("AnalysisSetup", "Creating ESD handler");
      AliESDInputHandler *esdHandler = new AliESDInputHandler();
      mgr->SetInputEventHandler(esdHandler);
      if (isMC) {
         ::Info("AnalysisSetup", "Creating MC handler");
         AliMCEventHandler *mcHandler  = new AliMCEventHandler();
         mgr->SetMCtruthEventHandler(mcHandler);
      }
   } else {
      out = "aodTree";
      ::Info("AnalysisSetup", "Creating AOD handler");
      AliAODInputHandler *aodHandler = new AliAODInputHandler();
      mgr->SetInputEventHandler(aodHandler);
   }

   //
   // === PID RESPONSE =============================================================================
   //

   gROOT->LoadMacro("$(ALICE_ROOT)/ANALYSIS/macros/AddTaskPIDResponse.C");
   AddTaskPIDResponse(isMC);
   
   gROOT->LoadMacro("$(ALICE_ROOT)/ANALYSIS/macros/AddTaskPIDqa.C ");
   AddTaskPIDqa();


   //
   // === TENDER TASK (ESD only -- optional) =======================================================
   //

   if (isESD && useTender) {
      ::Info("AnalysisSetup", "Adding tender (and then accepting V0 info)", options);
//      gROOT->LoadMacro(Form("%s/AddTaskTender.C", macroPath)); //for developers usage
//      gROOT->LoadMacro(Form("$(ALICE_ROOT)/PWGLF/RESONANCES/macros/mini/AddTaskTender.C")); //deprecated
      gROOT->LoadMacro(Form("$(ALICE_ROOT)/ANALYSIS/TenderSupplies/AddTaskTender.C"));
      AddTaskTender();
      noV0 = kFALSE;
   }

   //
   // === PHYSICS SELECTION (ESD only) =============================================================
   //

   if (isESD) {
      ::Info("AnalysisSetup", "Add physics selection by default on ESD analysis");
      gROOT->LoadMacro("$(ALICE_ROOT)/ANALYSIS/macros/AddTaskPhysicsSelection.C");
      AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(isMC);
      if (noV0) {
         ::Info("AnalysisSetup", "Skip of V0 info is required");
         physSelTask->GetPhysicsSelection()->SetSkipV0(kTRUE);
      }
   }
   
   //
   // === CENTRALITY/PLANE (ESD only) ==============================================================
   //
   if (isESD && !isPP) {
     ::Info("AnalysisSetup", "Add centrality and event plane computation tasks");
      gROOT->LoadMacro("$(ALICE_ROOT)/ANALYSIS/macros/AddTaskCentrality.C");
      gROOT->LoadMacro("$(ALICE_ROOT)/ANALYSIS/macros/AddTaskEventplane.C");
      AliCentralitySelectionTask* taskCentrality = (AliCentralitySelectionTask*)AddTaskCentrality();
      if (isMC) {
	::Info("AnalysisSetup", "Setting centrality computation for MC");
	taskCentrality->SetMCInput();
      }
      AddTaskEventplane();
   }
//   //
//   // === PID RESPONSE =============================================================================
//   //
//
//   gROOT->LoadMacro("$(ALICE_ROOT)/ANALYSIS/macros/AddTaskPIDResponse.C");
//   AddTaskPIDResponse(isMC);
//
//   //gROOT->LoadMacro("$(ALICE_ROOT)/ANALYSIS/macros/AddTaskPIDqa.C ");
//   //AddTaskPIDqa();
   
   //
   // === OTHER TASKS ==============================================================================
   //
   
   // add RSN task
   gROOT->LoadMacro(Form("%s/AddAnalysisTaskRsnMini.C", macroPath));
   if (!AddAnalysisTaskRsnMini(isMC, isPP, macroPath, nmix)) return "";
   
   ::Info("AnalysisSetup", "Setup successful");
   return out;
}
 AnalysisSetupRsnMini.C:1
 AnalysisSetupRsnMini.C:2
 AnalysisSetupRsnMini.C:3
 AnalysisSetupRsnMini.C:4
 AnalysisSetupRsnMini.C:5
 AnalysisSetupRsnMini.C:6
 AnalysisSetupRsnMini.C:7
 AnalysisSetupRsnMini.C:8
 AnalysisSetupRsnMini.C:9
 AnalysisSetupRsnMini.C:10
 AnalysisSetupRsnMini.C:11
 AnalysisSetupRsnMini.C:12
 AnalysisSetupRsnMini.C:13
 AnalysisSetupRsnMini.C:14
 AnalysisSetupRsnMini.C:15
 AnalysisSetupRsnMini.C:16
 AnalysisSetupRsnMini.C:17
 AnalysisSetupRsnMini.C:18
 AnalysisSetupRsnMini.C:19
 AnalysisSetupRsnMini.C:20
 AnalysisSetupRsnMini.C:21
 AnalysisSetupRsnMini.C:22
 AnalysisSetupRsnMini.C:23
 AnalysisSetupRsnMini.C:24
 AnalysisSetupRsnMini.C:25
 AnalysisSetupRsnMini.C:26
 AnalysisSetupRsnMini.C:27
 AnalysisSetupRsnMini.C:28
 AnalysisSetupRsnMini.C:29
 AnalysisSetupRsnMini.C:30
 AnalysisSetupRsnMini.C:31
 AnalysisSetupRsnMini.C:32
 AnalysisSetupRsnMini.C:33
 AnalysisSetupRsnMini.C:34
 AnalysisSetupRsnMini.C:35
 AnalysisSetupRsnMini.C:36
 AnalysisSetupRsnMini.C:37
 AnalysisSetupRsnMini.C:38
 AnalysisSetupRsnMini.C:39
 AnalysisSetupRsnMini.C:40
 AnalysisSetupRsnMini.C:41
 AnalysisSetupRsnMini.C:42
 AnalysisSetupRsnMini.C:43
 AnalysisSetupRsnMini.C:44
 AnalysisSetupRsnMini.C:45
 AnalysisSetupRsnMini.C:46
 AnalysisSetupRsnMini.C:47
 AnalysisSetupRsnMini.C:48
 AnalysisSetupRsnMini.C:49
 AnalysisSetupRsnMini.C:50
 AnalysisSetupRsnMini.C:51
 AnalysisSetupRsnMini.C:52
 AnalysisSetupRsnMini.C:53
 AnalysisSetupRsnMini.C:54
 AnalysisSetupRsnMini.C:55
 AnalysisSetupRsnMini.C:56
 AnalysisSetupRsnMini.C:57
 AnalysisSetupRsnMini.C:58
 AnalysisSetupRsnMini.C:59
 AnalysisSetupRsnMini.C:60
 AnalysisSetupRsnMini.C:61
 AnalysisSetupRsnMini.C:62
 AnalysisSetupRsnMini.C:63
 AnalysisSetupRsnMini.C:64
 AnalysisSetupRsnMini.C:65
 AnalysisSetupRsnMini.C:66
 AnalysisSetupRsnMini.C:67
 AnalysisSetupRsnMini.C:68
 AnalysisSetupRsnMini.C:69
 AnalysisSetupRsnMini.C:70
 AnalysisSetupRsnMini.C:71
 AnalysisSetupRsnMini.C:72
 AnalysisSetupRsnMini.C:73
 AnalysisSetupRsnMini.C:74
 AnalysisSetupRsnMini.C:75
 AnalysisSetupRsnMini.C:76
 AnalysisSetupRsnMini.C:77
 AnalysisSetupRsnMini.C:78
 AnalysisSetupRsnMini.C:79
 AnalysisSetupRsnMini.C:80
 AnalysisSetupRsnMini.C:81
 AnalysisSetupRsnMini.C:82
 AnalysisSetupRsnMini.C:83
 AnalysisSetupRsnMini.C:84
 AnalysisSetupRsnMini.C:85
 AnalysisSetupRsnMini.C:86
 AnalysisSetupRsnMini.C:87
 AnalysisSetupRsnMini.C:88
 AnalysisSetupRsnMini.C:89
 AnalysisSetupRsnMini.C:90
 AnalysisSetupRsnMini.C:91
 AnalysisSetupRsnMini.C:92
 AnalysisSetupRsnMini.C:93
 AnalysisSetupRsnMini.C:94
 AnalysisSetupRsnMini.C:95
 AnalysisSetupRsnMini.C:96
 AnalysisSetupRsnMini.C:97
 AnalysisSetupRsnMini.C:98
 AnalysisSetupRsnMini.C:99
 AnalysisSetupRsnMini.C:100
 AnalysisSetupRsnMini.C:101
 AnalysisSetupRsnMini.C:102
 AnalysisSetupRsnMini.C:103
 AnalysisSetupRsnMini.C:104
 AnalysisSetupRsnMini.C:105
 AnalysisSetupRsnMini.C:106
 AnalysisSetupRsnMini.C:107
 AnalysisSetupRsnMini.C:108
 AnalysisSetupRsnMini.C:109
 AnalysisSetupRsnMini.C:110
 AnalysisSetupRsnMini.C:111
 AnalysisSetupRsnMini.C:112
 AnalysisSetupRsnMini.C:113
 AnalysisSetupRsnMini.C:114
 AnalysisSetupRsnMini.C:115
 AnalysisSetupRsnMini.C:116
 AnalysisSetupRsnMini.C:117
 AnalysisSetupRsnMini.C:118
 AnalysisSetupRsnMini.C:119
 AnalysisSetupRsnMini.C:120
 AnalysisSetupRsnMini.C:121
 AnalysisSetupRsnMini.C:122
 AnalysisSetupRsnMini.C:123
 AnalysisSetupRsnMini.C:124
 AnalysisSetupRsnMini.C:125
 AnalysisSetupRsnMini.C:126
 AnalysisSetupRsnMini.C:127
 AnalysisSetupRsnMini.C:128
 AnalysisSetupRsnMini.C:129
 AnalysisSetupRsnMini.C:130
 AnalysisSetupRsnMini.C:131
 AnalysisSetupRsnMini.C:132
 AnalysisSetupRsnMini.C:133
 AnalysisSetupRsnMini.C:134
 AnalysisSetupRsnMini.C:135
 AnalysisSetupRsnMini.C:136
 AnalysisSetupRsnMini.C:137
 AnalysisSetupRsnMini.C:138
 AnalysisSetupRsnMini.C:139
 AnalysisSetupRsnMini.C:140
 AnalysisSetupRsnMini.C:141
 AnalysisSetupRsnMini.C:142
 AnalysisSetupRsnMini.C:143
 AnalysisSetupRsnMini.C:144
 AnalysisSetupRsnMini.C:145
 AnalysisSetupRsnMini.C:146
 AnalysisSetupRsnMini.C:147
 AnalysisSetupRsnMini.C:148
 AnalysisSetupRsnMini.C:149
 AnalysisSetupRsnMini.C:150
 AnalysisSetupRsnMini.C:151
 AnalysisSetupRsnMini.C:152
 AnalysisSetupRsnMini.C:153
 AnalysisSetupRsnMini.C:154
 AnalysisSetupRsnMini.C:155
 AnalysisSetupRsnMini.C:156
 AnalysisSetupRsnMini.C:157
 AnalysisSetupRsnMini.C:158
 AnalysisSetupRsnMini.C:159
 AnalysisSetupRsnMini.C:160
 AnalysisSetupRsnMini.C:161
 AnalysisSetupRsnMini.C:162
 AnalysisSetupRsnMini.C:163
 AnalysisSetupRsnMini.C:164
 AnalysisSetupRsnMini.C:165
 AnalysisSetupRsnMini.C:166
 AnalysisSetupRsnMini.C:167
 AnalysisSetupRsnMini.C:168
 AnalysisSetupRsnMini.C:169
 AnalysisSetupRsnMini.C:170
 AnalysisSetupRsnMini.C:171
 AnalysisSetupRsnMini.C:172
 AnalysisSetupRsnMini.C:173
 AnalysisSetupRsnMini.C:174
 AnalysisSetupRsnMini.C:175
 AnalysisSetupRsnMini.C:176
 AnalysisSetupRsnMini.C:177
 AnalysisSetupRsnMini.C:178