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:
//
//   - taskList       = a string containin all the 'add-task' macros to be used
//   - 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
//
Bool_t AnalysisSetup
(
   Bool_t      isMC,
   const char *options,
   const char *outputFileName,
   const char *configPath
)
{
   //
   // === EXAMINE OPTIONS ==========================================================================
   //

   // this is done using the utility 'RsnOptions.C'
   // which provides a unique way to interpret them
   
   TString opt(options);
   opt.ToUpper();
   opt.ReplaceAll(" ", "");
   
   Bool_t isMix      = opt.Contains("MIX");
   Bool_t isESD      = opt.Contains("ESD");
   Bool_t isAOD      = opt.Contains("AOD");
   Bool_t central    = opt.Contains("CEN");
   Bool_t peripheral = opt.Contains("PER");
   Bool_t useTender  = opt.Contains("TENDER");
   Bool_t usePhysSel = opt.Contains("PHYS");
   Bool_t noV0       = opt.Contains("NOV0");
   
   //
   // === LOAD LIBRARIES ===========================================================================
   //

   gSystem->Load("libVMC.so");
   gSystem->Load("libTree.so");
   gSystem->Load("libPhysics.so");
   gSystem->Load("libMatrix.so");
   gSystem->Load("libMinuit.so");
   gSystem->Load("libXMLParser.so");
   gSystem->Load("libGui.so");
   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");
   
   if (useTender) {
      ::Info("AnalysisSetup", "Loading tender libraries");
      gSystem->Load("libTENDER.so");
      gSystem->Load("libTENDERSupplies.so");
   }
   
   if (!AliAnalysisAlien::SetupPar("PWG2resonances.par")) return kFALSE;

   //
   // === ANALYSIS MANAGER CONFIGURATION ===========================================================
   //

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

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

   // create input handler
   // since there is an exit point above if the job
   // isn't either ESD or AOD, here we don't recheck that
   if (isESD) {
      ::Info("AnalysisSetup", "Configuring for ESD");
      AliESDInputHandler *esdHandler = new AliESDInputHandler();
      mgr->SetInputEventHandler(esdHandler);
      // if possible, create also MC handler
      if (isMC) {
         ::Info("AnalysisSetup", "Creating MC handler");
         AliMCEventHandler *mcHandler  = new AliMCEventHandler();
         mgr->SetMCtruthEventHandler(mcHandler);
      }
   } else if (isAOD) {
      ::Info("AnalysisSetup", "Configuring for AOD");
      AliAODInputHandler *aodHandler = new AliAODInputHandler();
      mgr->SetInputEventHandler(aodHandler);
   } else {
      ::Error("AnalysisSetup", "Require ESD or AOD");
      return kFALSE;
   }

   //
   // === CONFIGURE AND INSERT PHYSICS SELECTION & TENDER SUPPLY ===================================
   //

   // add event selection for data if running ESD
   if (isESD) {
      // add tender supply for TOF
      if (useTender) {
         ::Info("AnalysisSetup", "options '%s' require to add tender", options);
         gROOT->LoadMacro(Form("%s/AddTenderSupplies.C", configPath));
         AddTenderSupplies(100.0, kTRUE, kFALSE);
      }

      // add event selection for data
      // and swtich off VZERO if tender is not used
      if (usePhysSel) {
         ::Info("AnalysisSetup", "options '%s' require to add physics selection", options);
         gROOT->LoadMacro("$(ALICE_ROOT)/ANALYSIS/macros/AddTaskPhysicsSelection.C");
         AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(isMC);
         if (noV0) {
            ::Info("AnalysisSetup", "options '%s' require to skip V0 info", options);
            physSelTask->GetPhysicsSelection()->SetSkipV0(kTRUE);
         }
      }
   }
   
   ::Info("AnalysisSetup", "Setup successful");
   return kTRUE;
}
 AnalysisSetup.C:1
 AnalysisSetup.C:2
 AnalysisSetup.C:3
 AnalysisSetup.C:4
 AnalysisSetup.C:5
 AnalysisSetup.C:6
 AnalysisSetup.C:7
 AnalysisSetup.C:8
 AnalysisSetup.C:9
 AnalysisSetup.C:10
 AnalysisSetup.C:11
 AnalysisSetup.C:12
 AnalysisSetup.C:13
 AnalysisSetup.C:14
 AnalysisSetup.C:15
 AnalysisSetup.C:16
 AnalysisSetup.C:17
 AnalysisSetup.C:18
 AnalysisSetup.C:19
 AnalysisSetup.C:20
 AnalysisSetup.C:21
 AnalysisSetup.C:22
 AnalysisSetup.C:23
 AnalysisSetup.C:24
 AnalysisSetup.C:25
 AnalysisSetup.C:26
 AnalysisSetup.C:27
 AnalysisSetup.C:28
 AnalysisSetup.C:29
 AnalysisSetup.C:30
 AnalysisSetup.C:31
 AnalysisSetup.C:32
 AnalysisSetup.C:33
 AnalysisSetup.C:34
 AnalysisSetup.C:35
 AnalysisSetup.C:36
 AnalysisSetup.C:37
 AnalysisSetup.C:38
 AnalysisSetup.C:39
 AnalysisSetup.C:40
 AnalysisSetup.C:41
 AnalysisSetup.C:42
 AnalysisSetup.C:43
 AnalysisSetup.C:44
 AnalysisSetup.C:45
 AnalysisSetup.C:46
 AnalysisSetup.C:47
 AnalysisSetup.C:48
 AnalysisSetup.C:49
 AnalysisSetup.C:50
 AnalysisSetup.C:51
 AnalysisSetup.C:52
 AnalysisSetup.C:53
 AnalysisSetup.C:54
 AnalysisSetup.C:55
 AnalysisSetup.C:56
 AnalysisSetup.C:57
 AnalysisSetup.C:58
 AnalysisSetup.C:59
 AnalysisSetup.C:60
 AnalysisSetup.C:61
 AnalysisSetup.C:62
 AnalysisSetup.C:63
 AnalysisSetup.C:64
 AnalysisSetup.C:65
 AnalysisSetup.C:66
 AnalysisSetup.C:67
 AnalysisSetup.C:68
 AnalysisSetup.C:69
 AnalysisSetup.C:70
 AnalysisSetup.C:71
 AnalysisSetup.C:72
 AnalysisSetup.C:73
 AnalysisSetup.C:74
 AnalysisSetup.C:75
 AnalysisSetup.C:76
 AnalysisSetup.C:77
 AnalysisSetup.C:78
 AnalysisSetup.C:79
 AnalysisSetup.C:80
 AnalysisSetup.C:81
 AnalysisSetup.C:82
 AnalysisSetup.C:83
 AnalysisSetup.C:84
 AnalysisSetup.C:85
 AnalysisSetup.C:86
 AnalysisSetup.C:87
 AnalysisSetup.C:88
 AnalysisSetup.C:89
 AnalysisSetup.C:90
 AnalysisSetup.C:91
 AnalysisSetup.C:92
 AnalysisSetup.C:93
 AnalysisSetup.C:94
 AnalysisSetup.C:95
 AnalysisSetup.C:96
 AnalysisSetup.C:97
 AnalysisSetup.C:98
 AnalysisSetup.C:99
 AnalysisSetup.C:100
 AnalysisSetup.C:101
 AnalysisSetup.C:102
 AnalysisSetup.C:103
 AnalysisSetup.C:104
 AnalysisSetup.C:105
 AnalysisSetup.C:106
 AnalysisSetup.C:107
 AnalysisSetup.C:108
 AnalysisSetup.C:109
 AnalysisSetup.C:110
 AnalysisSetup.C:111
 AnalysisSetup.C:112
 AnalysisSetup.C:113
 AnalysisSetup.C:114
 AnalysisSetup.C:115
 AnalysisSetup.C:116
 AnalysisSetup.C:117
 AnalysisSetup.C:118
 AnalysisSetup.C:119
 AnalysisSetup.C:120
 AnalysisSetup.C:121
 AnalysisSetup.C:122
 AnalysisSetup.C:123
 AnalysisSetup.C:124
 AnalysisSetup.C:125
 AnalysisSetup.C:126
 AnalysisSetup.C:127
 AnalysisSetup.C:128
 AnalysisSetup.C:129
 AnalysisSetup.C:130
 AnalysisSetup.C:131
 AnalysisSetup.C:132
 AnalysisSetup.C:133
 AnalysisSetup.C:134
 AnalysisSetup.C:135
 AnalysisSetup.C:136