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