ROOT logo
#ifndef __CINT__
#include <AliAnalysisManager.h>
#include <AliLog.h>
#endif

Bool_t AddAMRsn(TString analysisSource = "proof", TString analysisMode = "test",TString input="aod",TString inputMC="", TString postfix = "",TString idStr="0")
{

   analysisSource.ToLower(); analysisMode.ToLower();

   if (!RsnLoadMacro("RsnManager.C")) return kFALSE;
   TList *listRsn = RsnManager();

   Bool_t useMC = !inputMC.CompareTo("mc");
   input.ToLower();
   Bool_t valid;

   Int_t eventMixinPar = AliAnalysisManager::GetGlobalInt("rsnUseEventMixingPar",valid);
   Int_t rsnPar = AliAnalysisManager::GetGlobalInt("rsnUseRSNPar",valid);
   Int_t rsnParDev = AliAnalysisManager::GetGlobalInt("rsnUseRSNParDev",valid);
   if (eventMixinPar) rsnPar = 1;
   if (rsnPar&&rsnParDev>=0) rsnParDev=1;

   Int_t pidResponse = AliAnalysisManager::GetGlobalInt("rsnUsePIDResponse",valid);
   Int_t useRsnIH = AliAnalysisManager::GetGlobalInt("rsnUseRsnInputHandler",valid);
   Int_t physSel = AliAnalysisManager::GetGlobalInt("rsnUsePhysSel",valid);
   Int_t useCentralityTask = AliAnalysisManager::GetGlobalInt("rsnUseCentralityTask",valid);
   Int_t useEventPlaneTask = AliAnalysisManager::GetGlobalInt("rsnUseEventPlaneTask",valid);
   Int_t usePIDqa = AliAnalysisManager::GetGlobalInt("rsnUsePIDqa",valid);
   Int_t splitMgrByTask = AliAnalysisManager::GetGlobalInt("rsnSplitMgrByTasks",valid);

   Int_t useMixing = AliAnalysisManager::GetGlobalInt("rsnUseMixing",valid);

   Int_t isRsnMini = AliAnalysisManager::GetGlobalInt("rsnUseMiniPackage",valid);
   Int_t mixNum = AliAnalysisManager::GetGlobalInt("rsnNumMix",valid);

   // ALICE stuff
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) { Printf("Error[AddAMRsn] mgr is null !!!"); return kFALSE; }

   AliAnalysisGrid *analysisPlugin = mgr->GetGridHandler();
   if (!analysisPlugin) { Printf("Error[AddAMRsn] : analysisPlugin is null !!!"); return kFALSE; }

   TString myAdditionalLibs;
   if (eventMixinPar) { AliAnalysisAlien::SetupPar("EventMixing"); myAdditionalLibs += " EventMixing.par"; }
   else { gSystem->Load("libEventMixing.so"); myAdditionalLibs += " libEventMixing.so"; }

   TString rsnLibName = "PWGLFresonances";
   if (gSystem->Getenv("ALICE_ROOT")) {
      TString alirootVersion = gSystem->GetFromPipe("aliroot --version | awk '{print $3}'");
      if (alirootVersion<"v5-02-19-AN" && alirootVersion.CompareTo("trunk")) rsnLibName = "PWG2resonances";
      if (rsnPar) { AliAnalysisAlien::SetupPar(rsnLibName.Data()); myAdditionalLibs += Form(" %s.par",rsnLibName.Data()); }
      else { gSystem->Load(Form("lib%s.so",rsnLibName.Data())); myAdditionalLibs += Form(" lib%s.so",rsnLibName.Data()); }
   }

   if (rsnParDev>=0) {
      if (rsnParDev) { AliAnalysisAlien::SetupPar("PWGLFresonancesdev"); myAdditionalLibs += " PWGLFresonancesdev.par"; }
      else { gSystem->Load("libPWGLFresonancesdev.so"); myAdditionalLibs += " libPWGLFresonancesdev.so"; }
   }
   analysisPlugin->SetAdditionalLibs(myAdditionalLibs.Data());

   AliMultiInputEventHandler *multiInputHandler = 0;
   AliInputEventHandler *inputHandler = mgr->GetInputEventHandler();

   TString className = inputHandler->ClassName();
   if (!className.CompareTo("AliMultiInputEventHandler")) {
      multiInputHandler = (AliMultiInputEventHandler *)inputHandler;
   }

   AliRsnInputHandler *rsnIH=0;

   if (pidResponse) {
      if (multiInputHandler) {
         // add PID Response Handler
         if (!RsnLoadMacro("AddPIDResponseInputHandler.C")) return kFALSE;
         AddPIDResponseInputHandler(multiInputHandler,useMC);
      } else {
         gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
         AddTaskPIDResponse(useMC);
      }
   }

   if (multiInputHandler && useRsnIH) {
      // add Rsn input handler (it has to be after ESD,MC,Tender input handler, but before Mixing)
      rsnIH = new AliRsnInputHandler();
      multiInputHandler->AddInputEventHandler(rsnIH);
   }

   if (physSel) {
      if (!input.CompareTo("esd")) {
         gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
         AddTaskPhysicsSelection(useMC);
      }

      // maybe we can put it in $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C
      if (multiInputHandler) {
         AliInputEventHandler *ih = multiInputHandler->GetFirstInputEventHandler();
         ih->SetEventSelection(multiInputHandler->GetEventSelection());
      }
   }

   if (useCentralityTask) {
      gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
      AliCentralitySelectionTask *centralityTask = AddTaskCentrality(kFALSE);
   }

   if (useEventPlaneTask) {
      gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskEventplane.C");
      AliEPSelectionTask *eventPlaneTask = AddTaskEventplane();
   }

   if (usePIDqa) {
      gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDqa.C");
      AddTaskPIDqa();
   }

   // load and run AddTask macro
   if (!RsnLoadMacro("AddRsnAnalysisTask.C")) return kFALSE;
   if (!RsnLoadMacro("RsnConfig.C")) return kFALSE;
   if (!RsnLoadMacro("AddMixingHandler.C")) return kFALSE;
   if (!analysisSource.CompareTo("grid")) {
      if (!RsnLoadMacro("RsnGridPlugin.C")) return kFALSE;
      RsnGridPlugin(analysisMode);
   }

   if (splitMgrByTask) {
      Int_t iTask=0;
      TList *l=0;
      TNamed *rsnObj = 0;
      AliAnalysisTaskSE *task=0;
      TString rsnName,rsnCutName;
      TIter next(listRsn);
      while ((rsnObj = (TNamed *)next())) {
         l = new TList();
         Printf("Adding task for RSN:%s CUT:%s ",rsnObj->GetName(),rsnObj->GetTitle());
         l->Add(new TNamed(*rsnObj));
         task = AddRsnAnalysisTask(input, useMC, useMixing,rsnIH,l,Form("%s_%d",postfix.Data(),iTask++));
         if (useMixing) {
            // add mixing handler (uncomment to turn on Mixnig)
            AddMixingHandler(multiInputHandler,task, input, useMC,isRsnMini, mixNum,postfix);
         }
      }
   } else {
      task = AddRsnAnalysisTask(input, useMC, useMixing,rsnIH,listRsn,postfix);
      if (useMixing) {
         // add mixing handler (uncomment to turn on Mixnig)
         AddMixingHandler(multiInputHandler,task, input, useMC,isRsnMini, mixNum,postfix);
      }
   }

   //    mgr->AddClassDebug("AliRsnCutTrackQuality",AliLog::kDebug+3);

   return kTRUE;
}

Bool_t RsnLoadMacro(TString macro,TString path="") {

   Bool_t valid;
   TString lego_path = AliAnalysisManager::GetGlobalStr("rsnLegoTrainPath",valid);
   if (!valid) lego_path = "$ALICE_ROOT/PWG2/RESONANCES/macros/lego_train";

   if (!gSystem->AccessPathName(macro.Data())) {
      gROOT->LoadMacro(macro.Data());
      Printf("Macro loaded from %s/%s ...",gSystem->pwd(),macro.Data());
      return kTRUE;
   }

   if (!gSystem->AccessPathName(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())))) {
      gROOT->LoadMacro(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
      Printf("Macro loaded from %s ...",gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
      return kTRUE;
   }

   Printf("Error loading %s",macro.Data());

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