42bc18ad68f5aecdc65382373fd8dbc479fda87c
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / lego_train / AddAMRsn.C
1 Bool_t AddAMRsn(TString analysisSource = "proof", TString analysisMode = "test",TString input="aod",TString inputMC="", TString postfix = "",TString idStr="0")
2 {
3
4    analysisSource.ToLower(); analysisMode.ToLower();
5
6    if (!RsnLoadMacro("RsnManager.C")) return kFALSE;
7    TList *listRsn = RsnManager();
8
9    Bool_t useMC = !inputMC.CompareTo("mc");
10    Bool_t valid;
11
12    Int_t eventMixinPar = AliAnalysisManager::GetGlobalInt("rsnUseEventMixingPar",valid);
13    Int_t rsnPar = AliAnalysisManager::GetGlobalInt("rsnUseRSNPar",valid);
14    if (eventMixinPar) rsnPar = 1;
15
16    Int_t pidResponse = AliAnalysisManager::GetGlobalInt("rsnUsePIDResponse",valid);
17    Int_t useRsnIH = AliAnalysisManager::GetGlobalInt("rsnUseRsnInputHandler",valid);
18    Int_t physSel = AliAnalysisManager::GetGlobalInt("rsnUsePhysSel",valid);
19    Int_t splitMgrByTask = AliAnalysisManager::GetGlobalInt("rsnSplitMgrByTasks",valid);
20
21    Int_t useMixing = AliAnalysisManager::GetGlobalInt("rsnUseMixing",valid);
22
23    Int_t isRsnMini = AliAnalysisManager::GetGlobalInt("rsnUseMiniPackage",valid);
24    Int_t mixNum = AliAnalysisManager::GetGlobalInt("rsnNumMix",valid);
25
26    // ALICE stuff
27    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
28    if (!mgr) { Printf("Error[AddAMRsn] mgr is null !!!"); return kFALSE; }
29
30    AliAnalysisGrid *analysisPlugin = mgr->GetGridHandler();
31    if (!analysisPlugin) { Printf("Error[AddAMRsn] : analysisPlugin is null !!!"); return kFALSE; }
32
33    TString myAdditionalLibs;
34    if (eventMixinPar) { AliAnalysisAlien::SetupPar("EventMixing"); myAdditionalLibs += " EventMixing.par"; }
35    else { gSystem->Load("libEventMixing.so"); myAdditionalLibs += " libEventMixing.so"; }
36
37    TString rsnLibName = "PWGLFresonances";
38    if (gSystem->Getenv("ALICE_ROOT")) {
39       TString alirootVersion = gSystem->GetFromPipe("aliroot --version | awk '{print $3}'");
40       if (alirootVersion<"v5-02-19-AN" && alirootVersion.CompareTo("trunk")) rsnLibName = "PWG2resonances";
41       if (rsnPar) { AliAnalysisAlien::SetupPar(rsnLibName.Data()); myAdditionalLibs += Form(" %s.par",rsnLibName.Data()); }
42       else { gSystem->Load(Form("lib%s.so",rsnLibName.Data())); myAdditionalLibs += Form(" lib%s.so",rsnLibName.Data()); }
43    }
44
45    analysisPlugin->SetAdditionalLibs(myAdditionalLibs.Data());
46
47    AliMultiInputEventHandler *multiInputHandler = mgr->GetInputEventHandler();
48    AliRsnInputHandler *rsnIH=0;
49
50    if (pidResponse) {
51       // add PID Response Handler
52       if (!RsnLoadMacro("AddPIDResponseInputHandler.C")) return kFALSE;
53       AddPIDResponseInputHandler(multiInputHandler,useMC);
54    }
55
56    if (useRsnIH) {
57       // add Rsn input handler (it has to be after ESD,MC,Tender input handler, but before Mixing)
58       AliRsnInputHandler *rsnIH = new AliRsnInputHandler();
59       multiInputHandler->AddInputEventHandler(rsnIH);
60    }
61
62    if (physSel) {
63       gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
64       AddTaskPhysicsSelection(useMC);
65
66       // maybe we can put it in $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C
67       AliMultiInputEventHandler *multiIH = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
68       if (multiIH) {
69          AliESDInputHandler *esdIH = dynamic_cast<AliESDInputHandler *>(multiIH->GetFirstInputEventHandler());
70          if (esdIH) esdIH->SetEventSelection(multiIH->GetEventSelection());
71          AliAODInputHandler *aodIH = dynamic_cast<AliAODInputHandler *>(multiIH->GetFirstInputEventHandler());
72          if (aodIH) aodIH->SetEventSelection(multiIH->GetEventSelection());
73       }
74    }
75
76
77    // load and run AddTask macro
78    if (!RsnLoadMacro("AddRsnAnalysisTask.C")) return kFALSE;
79    if (!RsnLoadMacro("RsnConfig.C")) return kFALSE;
80    if (!RsnLoadMacro("AddMixingHandler.C")) return kFALSE;
81    if (!analysisSource.CompareTo("grid")) {
82       if (!RsnLoadMacro("RsnGridPlugin.C")) return kFALSE;
83       RsnGridPlugin();
84    }
85
86    if (splitMgrByTask) {
87       Int_t iTask=0;
88       TList *l=0;
89       TNamed *rsnObj = 0;
90       AliAnalysisTaskSE *task=0;
91       TString rsnName,rsnCutName;
92       TIter next(listRsn);
93       while ((rsnObj = (TNamed *)next())) {
94          l = new TList();
95          Printf("Adding task for RSN:%s CUT:%s ",rsnObj->GetName(),rsnObj->GetTitle());
96          l->Add(new TNamed(*rsnObj));
97          task = AddRsnAnalysisTask(input, useMC, useMixing,rsnIH,l,Form("%s_%d",postfix.Data(),iTask++));
98          if (useMixing) {
99             // add mixing handler (uncomment to turn on Mixnig)
100             AddMixingHandler(multiInputHandler,task, input, useMC,isRsnMini, mixNum,postfix);
101          }
102       }
103    } else {
104       task = AddRsnAnalysisTask(input, useMC, useMixing,rsnIH,listRsn,postfix);
105       if (useMixing) {
106          // add mixing handler (uncomment to turn on Mixnig)
107          AddMixingHandler(multiInputHandler,task, input, useMC,isRsnMini, mixNum,postfix);
108       }
109    }
110
111    return kTRUE;
112 }
113
114 Bool_t RsnLoadMacro(TString macro,TString path="") {
115
116    Bool_t valid;
117    TString lego_path = AliAnalysisManager::GetGlobalStr("rsnLegoTrainPath",valid);
118    if (!valid) lego_path = "$ALICE_ROOT/PWG2/RESONANCES/macros/lego_train";
119
120    if (!gSystem->AccessPathName(macro.Data())) {
121       gROOT->LoadMacro(macro.Data());
122       Printf("Macro loaded from %s/%s ...",gSystem->pwd(),macro.Data());
123       return kTRUE;
124    }
125
126    if (!gSystem->AccessPathName(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())))) {
127       gROOT->LoadMacro(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
128       Printf("Macro loaded from %s ...",gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
129       return kTRUE;
130    }
131
132    Printf("Error loading %s",macro.Data());
133
134    return kFALSE;
135 }
136